From ddb1c277a3cade6b070841c6be53c94e3ea9cab1 Mon Sep 17 00:00:00 2001 From: Benedikt Galbavy Date: Mon, 16 Oct 2023 00:08:59 +0200 Subject: [PATCH] added userhandler (WIP) --- .gitignore | 4 ++++ server.cpp | 9 +++++++++ user.cpp | 5 +++++ user.h | 12 ++++++++---- user_handler.cpp | 12 ++++++++++++ user_handler.h | 36 ++++++++++++++++++++++++++++++++++++ 6 files changed, 74 insertions(+), 4 deletions(-) create mode 100644 user_handler.cpp create mode 100644 user_handler.h diff --git a/.gitignore b/.gitignore index 60a0569..ed84026 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,9 @@ twmailer-server twmailer-client +spool + +.cache +compile_commands.json # Prerequisites *.d diff --git a/server.cpp b/server.cpp index 5ccd6aa..17bdc39 100644 --- a/server.cpp +++ b/server.cpp @@ -1,4 +1,5 @@ #include "user.h" +#include "user_handler.h" #include #include @@ -34,6 +35,8 @@ inline bool isInteger(const std::string & s); void *clientCommunication(void *data); void signalHandler(int sig); +user_handler* user_handler::instancePtr = nullptr; + int main (int argc, char* argv[]) { if (argc < 3 || @@ -44,6 +47,12 @@ int main (int argc, char* argv[]) return EXIT_FAILURE; } + fs::path spool_dir; + user_handler::getInstance()->setSpoolDir(spool_dir = fs::path(argv[2])); + + fs::create_directory(spool_dir/"users"); + fs::create_directory(spool_dir/"messages"); + char* p; u_long PORT = strtoul(argv[1], &p, 10); diff --git a/user.cpp b/user.cpp index fdd3f17..4ae6d1b 100644 --- a/user.cpp +++ b/user.cpp @@ -1,3 +1,8 @@ #include "user.h" +user::user(fs::path) +{ + // json stuff go here +} + user::~user() {} \ No newline at end of file diff --git a/user.h b/user.h index f43d3a3..c2eb7cf 100644 --- a/user.h +++ b/user.h @@ -5,6 +5,9 @@ #include #include +#include + +namespace fs = std::filesystem; template static const bool ptr_cmp = [](T* left, T* right) { return *left < *right; }; @@ -14,13 +17,14 @@ typedef std::set)> maillist; class user { public: - user(std::string name, maillist mails) - : name(name), mails(mails) - {}; + user(fs::path); + user(std::string name) + : name(name) {}; + ~user(); void addMail(mail mail); - std::set getMails(); + maillist getMails() { return this->mails; }; private: diff --git a/user_handler.cpp b/user_handler.cpp new file mode 100644 index 0000000..9c2708c --- /dev/null +++ b/user_handler.cpp @@ -0,0 +1,12 @@ +#include "user_handler.h" + +#include + +user_handler::user_handler() +{ + for (const auto& entry : fs::directory_iterator()) { + if (entry.path().extension() == ".json") { + this->users.insert(std::pair(fs::path(entry.path()).replace_extension(), new user(entry))); + } + } +} \ No newline at end of file diff --git a/user_handler.h b/user_handler.h new file mode 100644 index 0000000..69df5f6 --- /dev/null +++ b/user_handler.h @@ -0,0 +1,36 @@ +#pragma once + +#include "user.h" +#include +#include +#include + +namespace fs = std::filesystem; + +/* singleton for handling users */ +class user_handler { +public: + + user_handler(const user_handler& obj) = delete; + + static user_handler* getInstance() { + if (instancePtr == nullptr) { + instancePtr = new user_handler(); + return instancePtr; + } else { + return instancePtr; + } + }; + ~user_handler(); + + void setSpoolDir(fs::path p) { this->spool_dir = p; }; + +private: + + static user_handler* instancePtr; + user_handler(); + + fs::path spool_dir; + std::map users; + +}; \ No newline at end of file