Browse Source

login/signup now show an error if already logged in (or login request already sent)

Denys 5 years ago
parent
commit
820cab9a80
2 changed files with 45 additions and 26 deletions
  1. 3 3
      cli/include/cmdman.h
  2. 42 23
      cli/src/cmdman.cpp

+ 3 - 3
cli/include/cmdman.h

@@ -93,10 +93,10 @@ private:
   map<string, string> helpmap;
 
   /**
-   * State used to internally format received json to allow easy handling using
-   * handlemap
+   * State used to internally format received json to allow easy handling using 
+   * handlemap and to disallow the use of certain commands when logged in/not logged in.
    */
-  bool dologin, dosignup, doversion;
+  bool doversion, loginpossible, dologin, dosignup;
 
   /**
    * Help strings and method prototypes for commands to be used by a user

+ 42 - 23
cli/src/cmdman.cpp

@@ -14,9 +14,11 @@ CmdMan::CmdMan(FileMan &fm, void (*dpf)(string)) : fileman(fm) {
   wbuilder.settings_["indentation"] = "";
   reader = rbuilder.newCharReader();
 
+  
+  doversion = false;
+  loginpossible = false;
   dologin = false;
   dosignup = false;
-  doversion = false;
 
   /* initialize execute command map */
   execmap["help"] = &CmdMan::cmdHelp;
@@ -87,7 +89,7 @@ CmdMan::CmdRet CmdMan::cmdDisconnect(vector<string> args) {
   DEBUGPRINT(string(__PRETTY_FUNCTION__) + " begin");
   Json::Value root;
   retval.type = send;
-  if(dologin) {
+  if(loginpossible) {
 	  // not logged in, send appropriate login message instead of normal close
 	  root["login"] = false;
 	  root["user"] = "";
@@ -230,7 +232,7 @@ CmdMan::CmdRet CmdMan::execute(string cmd, vector<string> args) {
 	  retval.msg = root;
 	  return retval;
   }
-  else if(dologin) {
+  else if(loginpossible || dologin || dosignup) {
 	  DEBUGPRINT("execute does login");
 	  DEBUGPRINT(string("comparison is ") + std::to_string(cmd.compare("login") && cmd.compare("signup") && cmd.compare("disconnect") && cmd.compare("help")));
 	  if(cmd.compare("login") && cmd.compare("signup") && cmd.compare("disconnect") && cmd.compare("help")) {
@@ -249,15 +251,23 @@ CmdMan::CmdRet CmdMan::cmdLogin(vector<string> args) {
   CmdRet retval;
   DEBUGPRINT(string(__PRETTY_FUNCTION__) + " begin");
   Json::Value root;
-  root["user"] = args[0];
-  root["pass"] = args[1];
-  root["login"] = true;
-  root["cancel"] = false;
-  retval.type = send;
+  
+  if(loginpossible) { 
+    dologin = true;
+    loginpossible = false;
+    root["user"] = args[0];
+    root["pass"] = args[1];
+    root["login"] = true;
+    root["cancel"] = false;
+    retval.type = send;
+  } else {
+    root["command"] = "login";
+    root["error"] = "Login not possible, because you already requested a login or you are logged in";
+    root["accept"] = false;
+	retval.type = error;
+  }
+  
   retval.msg = root;
-
-  // dologin already set by handleVersion, so no need here
-
   return retval;
 }
 
@@ -265,17 +275,23 @@ CmdMan::CmdRet CmdMan::cmdSignup(vector<string> args) {
   CmdRet retval;
   DEBUGPRINT(string(__PRETTY_FUNCTION__) + " begin");
   Json::Value root;
-  root["user"] = args[0];
-  root["pass"] = args[1];
-  root["login"] = false;
-  root["cancel"] = false;
-  retval.type = send;
+  
+  if(loginpossible) { 
+    dosignup = true;
+	loginpossible = false;
+    root["user"] = args[0];
+    root["pass"] = args[1];
+    root["login"] = true;
+    root["cancel"] = false;
+    retval.type = send;
+  } else {
+    root["command"] = "signup";
+    root["error"] = "Signup not possible, because you already requested a login or you are logged in";
+    root["accept"] = false;
+	retval.type = error;
+  }
+  
   retval.msg = root;
-
-  // set dosignin to differentiate from only logging in
-  // note: dologin was also set (by handleVersion)
-  dosignup = true;
-
   return retval;
 }
 
@@ -569,7 +585,7 @@ CmdMan::CmdRet CmdMan::handleVersion(Json::Value root) {
     retval.type = print | seton;
     output["accept"] = true;
     doversion = false;
-    dologin = true;
+    loginpossible = true;
   }
   retval.msg = output;
 
@@ -587,6 +603,8 @@ CmdMan::CmdRet CmdMan::handleLogin(Json::Value root) {
     retval.type = error;
     output["error"] = root["error"].asString();
     output["accept"] = false;
+	loginpossible = true;
+    dologin = false;
   } else {
     retval.type = print | seton;
     output["error"] = "";
@@ -609,11 +627,12 @@ CmdMan::CmdRet CmdMan::handleSignup(Json::Value root) {
     retval.type = error;
     output["error"] = root["error"].asString();
     output["accept"] = false;
+	loginpossible = true;
+    dosignup = false;
   } else {
     retval.type = print | seton;
     output["error"] = "";
     output["accept"] = true;
-    dologin = false;
 	dosignup = false;
   }
   retval.msg = output;