|
@@ -0,0 +1,77 @@
|
|
|
+#include "../include/UserManager.h"
|
|
|
+
|
|
|
+// TODO passwords are stored and checked in plain text
|
|
|
+// TODO read userStorage file location from config
|
|
|
+
|
|
|
+void UserManager::init() {
|
|
|
+ std::ifstream ifile("userStorage.txt");
|
|
|
+ if (!ifile) {
|
|
|
+ // create new file if userStorage does not exist
|
|
|
+ std::ofstream file;
|
|
|
+ file.open("userStorage.txt");
|
|
|
+ file << "cat;tac\n";
|
|
|
+ file.close();
|
|
|
+ }
|
|
|
+ ifile.close();
|
|
|
+}
|
|
|
+
|
|
|
+bool UserManager::isAllowed(const std::string &name, const std::string &pw) {
|
|
|
+ std::map<std::string, std::string> user_map;
|
|
|
+ readFromFile(user_map);
|
|
|
+ auto it = user_map.find(name);
|
|
|
+ // check if user exists and pw is equal
|
|
|
+ if (it != user_map.end() && (it->second.compare(pw) == 0)) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
+void UserManager::addUser(const std::string &name, const std::string &pw) {
|
|
|
+ std::map<std::string, std::string> user_map;
|
|
|
+ readFromFile(user_map);
|
|
|
+ auto it = user_map.find(name);
|
|
|
+ // if user exists, do nothing
|
|
|
+ if (it != user_map.end()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ user_map.insert(std::pair<std::string, std::string>(name, pw));
|
|
|
+ writeToFile(user_map);
|
|
|
+}
|
|
|
+
|
|
|
+void UserManager::deleteUser(const std::string &name, const std::string &pw) {
|
|
|
+ // TODO check pw before delete
|
|
|
+ std::map<std::string, std::string> user_map;
|
|
|
+ readFromFile(user_map);
|
|
|
+ auto it = user_map.find(name);
|
|
|
+ if (it == user_map.end()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ user_map.erase(it);
|
|
|
+ writeToFile(user_map);
|
|
|
+}
|
|
|
+
|
|
|
+// read content from file into given map
|
|
|
+void UserManager::readFromFile(std::map<std::string, std::string> &user_map) {
|
|
|
+ std::ifstream ifile("userStorage.txt");
|
|
|
+ std::string line;
|
|
|
+ while (getline(ifile, line)) {
|
|
|
+ std::stringstream ss(line);
|
|
|
+ std::string segment;
|
|
|
+ std::vector<std::string> v;
|
|
|
+ while (std::getline(ss, segment, ';')) {
|
|
|
+ v.push_back(segment);
|
|
|
+ }
|
|
|
+ user_map.insert(std::pair<std::string, std::string>(v.at(0), v.at(1)));
|
|
|
+ }
|
|
|
+ ifile.close();
|
|
|
+}
|
|
|
+
|
|
|
+// write content from map to file
|
|
|
+void UserManager::writeToFile(std::map<std::string, std::string> &user_map) {
|
|
|
+ std::ofstream file;
|
|
|
+ file.open("userStorage.txt");
|
|
|
+ for (auto const &x : user_map) {
|
|
|
+ file << x.first << ";" << x.second << std::endl;
|
|
|
+ }
|
|
|
+ file.close();
|
|
|
+}
|