Explorar el Código

added user manager src and header file

marius.rescheleit hace 5 años
padre
commit
730c405666
Se han modificado 2 ficheros con 98 adiciones y 0 borrados
  1. 23 0
      daemon/include/user_manager.h
  2. 75 0
      daemon/src/user_manager.cpp

+ 23 - 0
daemon/include/user_manager.h

@@ -0,0 +1,23 @@
+#ifndef USER_MANAGER_H
+#define USER_MANAGER_H
+
+#include <map>
+#include <iostream>
+#include <fstream>
+#include <string>
+#include <vector>
+#include <sstream>
+
+class UserManager {
+public:
+  static void init();
+  static bool isAllowed(std::string user, std::string pw);
+  static void addUser(std::string name, std::string pw);
+  static void deleteUser(std::string name, std::string pw);
+private:
+  static void readFromFile(std::map<std::string,std::string> *user_map);
+  static void writeToFile(std::map<std::string,std::string> *user_map);
+};
+
+
+#endif

+ 75 - 0
daemon/src/user_manager.cpp

@@ -0,0 +1,75 @@
+#include "../include/user_manager.h"
+
+//TODO passwords are stored and checked in plain text
+
+void UserManager::init() {
+  std::ifstream ifile("userStorage.txt");
+  if(!ifile) {
+    std::ofstream file;
+    file.open("userStorage.txt");
+    file << "cat;tac\n";
+    file.close();
+  }
+  ifile.close();
+}
+
+
+bool UserManager::isAllowed(std::string name, std::string pw) {
+  std::map<std::string,std::string> user_map;
+  readFromFile(&user_map);
+  auto it = user_map.find(name);
+  if(it!=user_map.end() && (it->second.compare(pw)==0)) {
+    return true;
+  }
+  return false;
+}
+
+
+void UserManager::addUser(std::string name, std::string pw) {
+  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.insert(std::pair<std::string,std::string>(name,pw));
+  writeToFile(&user_map);
+}
+
+
+void UserManager::deleteUser(std::string name, std::string pw) {
+  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);
+}
+
+
+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();
+}
+
+
+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();
+}