Configuration file and CI #4

Merged
bartfaik04 merged 29 commits from configuration into main 2025-06-07 15:33:06 +02:00
5 changed files with 54 additions and 26 deletions
Showing only changes of commit 31ec926793 - Show all commits

View File

@@ -6,19 +6,22 @@
#include <vector> #include <vector>
#include <fstream> #include <fstream>
#include <iostream> #include <iostream>
#include "usermanager.h" #include "definitions.h"
class configFileManager{ class configfilemanager{
private: private:
std::map<std::string, std::string> configs; std::map<std::string, std::string> configs;
public: public:
configFileManager(std::string filepath = "./ncsambawatcher.config") configfilemanager(std::string filepath = "./ncsambawatcher.config")
{ {
std::ifstream is(filepath); std::ifstream is(filepath);
std::string tmp; std::string tmp;
while(std::getline(is, tmp)) while(std::getline(is, tmp))
{ {
if (tmp.at(0) == '#') // ignore comments
continue;
std::vector<std::string> splited = splitString(tmp, '='); std::vector<std::string> splited = splitString(tmp, '=');
if (splited.size() != 2) if (splited.size() != 2)
{ {
@@ -30,11 +33,16 @@ public:
} }
} }
std::string at(std::string &config) std::string at(const std::string &config)
{ {
return configs.at(config); return configs.at(config);
} }
std::string at(const char* config)
{
return at(std::string(config));
}
}; };
#endif // _CONFIGFILEMANAGER_H #endif // _CONFIGFILEMANAGER_H

View File

@@ -5,7 +5,9 @@
#define USER_LOG_LOCATION 3 #define USER_LOG_LOCATION 3
#define SCAN_CMD_USR "docker exec --user www-data nextcloud /var/www/html/occ files:scan --path=" #define SCAN_CMD_USR "docker exec --user www-data %1% /var/www/html/occ files:scan --path="
#define SCAN_CMD_GRP "docker exec --user www-data nextcloud /var/www/html/occ groupfolder:scan " #define SCAN_CMD_GRP "docker exec --user www-data %1% /var/www/html/occ groupfolder:scan "
std::vector<std::string> splitString(const std::string& input, char delimiter);
#endif // _LOCATIONS_H #endif // _LOCATIONS_H

View File

@@ -10,11 +10,27 @@
#include <mutex> #include <mutex>
#include <condition_variable> #include <condition_variable>
#include <cstdio> #include <cstdio>
#include "definitions.h"
#include "usermanager.h" #include "usermanager.h"
#include "configfilemanager.h"
userManager manager; userManager manager;
std::condition_variable cv; std::condition_variable cv;
std::mutex mtx; std::mutex mtx;
configfilemanager cfm;
std::vector<std::string> splitString(const std::string& str, char delimiter = '|')
{
std::vector<std::string> ret;
std::stringstream ss(str);
std::string token;
while (std::getline(ss, token, delimiter)) {
ret.push_back(token);
}
return ret;
}
void readingThreadFunc() void readingThreadFunc()
{ {
@@ -68,7 +84,7 @@ void scannerThreadFunc()
} }
else if (child == 0) // child else if (child == 0) // child
{ {
std::string cmd = userManager::getScanCommandFromUser(user); std::string cmd = userManager::getScanCommandFromUser(user, cfm);
execl("/bin/sh", "sh", "-c", cmd.c_str(), static_cast<char *>(nullptr)); execl("/bin/sh", "sh", "-c", cmd.c_str(), static_cast<char *>(nullptr));
std::cerr << "Scan failed" << std::endl; std::cerr << "Scan failed" << std::endl;
_exit(EXIT_FAILURE); _exit(EXIT_FAILURE);

View File

@@ -1,24 +1,27 @@
#include "usermanager.h" #include "usermanager.h"
std::vector<std::string> splitString(const std::string& str, char delimiter = '|') std::string userManager::getScanCommandFromUser(const std::string &user, configfilemanager &cfm)
{ {
std::vector<std::string> ret; std::string contname = cfm.at("NEXTCLOUD_CONTAINER_NAME");
std::stringstream ss(str); std::string baseCommand;
std::string token; std::string userCommand;
while (std::getline(ss, token, delimiter)) {
ret.push_back(token);
}
return ret;
}
std::string userManager::getScanCommandFromUser(const std::string &user)
{
if (user.find("__groupfolder") != std::string::npos) if (user.find("__groupfolder") != std::string::npos)
{ {
return std::string(SCAN_CMD_GRP) + splitString(user, '/').back(); baseCommand = SCAN_CMD_GRP;
userCommand = splitString(user, '/').back();
}
else
{
baseCommand = SCAN_CMD_USR;
userCommand = user;
} }
return std::string(SCAN_CMD_USR) + user; size_t pos = 0;
while ((pos = baseCommand.find("%1%", pos)) != std::string::npos) {
baseCommand.replace(pos, contname.length(), contname);
pos += contname.length(); // Move past the replacement
}
return baseCommand + userCommand;
} }

View File

@@ -8,8 +8,7 @@
#include <sstream> #include <sstream>
#include <mutex> #include <mutex>
#include "definitions.h" #include "definitions.h"
#include "configfilemanager.h"
std::vector<std::string> splitString(const std::string& input, char delimiter);
class userManager class userManager
{ {
@@ -19,7 +18,7 @@ private:
public: public:
static std::string getScanCommandFromUser(const std::string&); static std::string getScanCommandFromUser(const std::string&, configfilemanager& cfm);
void addUserFromLogLine(std::string &line) void addUserFromLogLine(std::string &line)
{ {