Browse Source

added checl if user exists to check login when signup

marius.rescheleit 4 years ago
parent
commit
1f237f8679
3 changed files with 16 additions and 10 deletions
  1. 1 1
      daemon/include/UserManager.h
  2. 12 7
      daemon/src/JsonCommander.cpp
  3. 3 2
      daemon/src/UserManager.cpp

+ 1 - 1
daemon/include/UserManager.h

@@ -35,7 +35,7 @@ public:
    * @param user the name of the users
    * @param pw password in plain text
    */
-  static void addUser(const std::string &name, const std::string &pw);
+  static bool addUser(const std::string &name, const std::string &pw);
 
   /**
    * Delete a new user and delete from storage.

+ 12 - 7
daemon/src/JsonCommander.cpp

@@ -346,13 +346,18 @@ JsonCommander::Response JsonCommander::checkLogin(const Json::Value &message) {
     response.json["accept"] = true;
     response.json["error"] = "";
   } else if (!message["login"].asBool()) {
-    // add user
-    // TODO check if user already exists before adding!!!
-    UserManager::addUser(message["user"].asString(),
-                         message["pass"].asString());
-    response.action = send;
-    response.json["accept"] = true;
-    response.json["error"] = "";
+    // add user. Check if already exists before
+    if(!UserManager::addUser(message["user"].asString(),
+                         message["pass"].asString())) {
+     response.action = closeAndSend;
+     response.json["accept"] = false;
+     response.json["error"] = "user does already exist";
+    } else {
+      response.action = send;
+      response.json["accept"] = true;
+      response.json["error"] = "";
+    }
+
   } else {
     // reject user
     response.action = closeAndSend;

+ 3 - 2
daemon/src/UserManager.cpp

@@ -32,16 +32,17 @@ bool UserManager::isAllowed(const std::string &name, const std::string &pw) {
   return false;
 }
 
-void UserManager::addUser(const std::string &name, const std::string &pw) {
+bool 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;
+    return false;
   }
   user_map.insert(std::pair<std::string, std::string>(name, pw));
   writeToFile(user_map);
+  return true;
 }
 
 void UserManager::deleteUser(const std::string &name, const std::string &pw) {