Small fixes + add some debug traces
authorBenjamin Auder <benjamin.auder@somewhere>
Wed, 20 Mar 2019 16:20:22 +0000 (17:20 +0100)
committerBenjamin Auder <benjamin.auder@somewhere>
Wed, 20 Mar 2019 16:20:22 +0000 (17:20 +0100)
client/src/components/UpsertUser.vue
client/src/views/Hall.vue
server/config/parameters.js.dist
server/models/Challenge.js
server/routes/challenges.js
server/routes/users.js

index 5ea93a0..86f8558 100644 (file)
@@ -34,120 +34,129 @@ div
 
 <script>
 import { store } from "@/store";
+import { checkNameEmail } from "@/data/userCheck";
+import { ajax } from "@/utils/ajax";
 export default {
   name: 'my-upsert-user',
-       data: function() {
-               return {
-                       user: store.state.user, //initialized with global user object
-                       nameOrEmail: "", //for login
-                       stage: (!store.state.user.id ? "Login" : "Update"),
-                       infoMsg: "",
-                       enterTime: Number.MAX_SAFE_INTEGER, //for a basic anti-bot strategy
-               };
-       },
-       computed: {
-               submitMessage: function() {
-                       switch (this.stage)
-                       {
-                               case "Login":
-                                       return "Go";
-                               case "Register":
-                                       return "Send";
-                               case "Update":
-                                       return "Apply";
-                       }
-               },
-               displayInfo: function() {
-                       return (this.infoMsg.length > 0 ? "block" : "none");
-               },
-       },
-       methods: {
-               trySetEnterTime: function(event) {
-                       if (!!event.target.checked)
-                               this.enterTime = Date.now();
-               },
-               toggleStage: function() {
-                       // Loop login <--> register (update is for logged-in users)
-                       this.stage = (this.stage == "Login" ? "Register" : "Login");
-               },
-               ajaxUrl: function() {
-                       switch (this.stage)
-                       {
-                               case "Login":
-                                       return "/sendtoken";
-                               case "Register":
-                                       return "/register";
-                               case "Update":
-                                       return "/update";
-                       }
-               },
-               ajaxMethod: function() {
-                       switch (this.stage)
-                       {
-                               case "Login":
-                                       return "GET";
-                               case "Register":
-                                       return "POST";
-                               case "Update":
-                                       return "PUT";
-                       }
-               },
-               infoMessage: function() {
-                       switch (this.stage)
-                       {
-                               case "Login":
-                                       return "Connection token sent. Check your emails!";
-                               case "Register":
-                                       return "Registration complete! Please check your emails.";
-                               case "Update":
-                                       return "Modifications applied!";
-                       }
-               },
-               onSubmit: function() {
-                       // Basic anti-bot strategy:
-                       const exitTime = Date.now();
-                       if (this.stage == "Register" && exitTime - this.enterTime < 5000)
-                               return; //silently return, in (curious) case of it was legitimate
-                       let error = undefined;
-                       if (this.stage == 'Login')
-                       {
-                               const type = (this.nameOrEmail.indexOf('@') >= 0 ? "email" : "name");
-                               error = checkNameEmail({[type]: this.nameOrEmail});
-                       }
-                       else
-                               error = checkNameEmail(this.user);
-                       if (!!error)
-                               return alert(error);
-                       this.infoMsg = "Processing... Please wait";
-                       ajax(this.ajaxUrl(), this.ajaxMethod(),
-                               this.stage == "Login" ? { nameOrEmail: this.nameOrEmail } : this.user,
-                               res => {
-                                       this.infoMsg = this.infoMessage();
-                                       if (this.stage != "Update")
-                                       {
-                                               this.nameOrEmail = "";
-                                               this.user["email"] = "";
-                                               this.user["name"] = "";
-                                               // Store our identifiers in local storage (by little anticipation...)
-                                               localStorage["myid"] = res.id;
-                                               localStorage["myname"] = res.name;
+  data: function() {
+    return {
+      user: store.state.user, //initialized with global user object
+      nameOrEmail: "", //for login
+      stage: (!store.state.user.id ? "Login" : "Update"),
+      infoMsg: "",
+      enterTime: Number.MAX_SAFE_INTEGER, //for a basic anti-bot strategy
+    };
+  },
+  computed: {
+    submitMessage: function() {
+      switch (this.stage)
+      {
+        case "Login":
+          return "Go";
+        case "Register":
+          return "Send";
+        case "Update":
+          return "Apply";
+      }
+    },
+    displayInfo: function() {
+      return (this.infoMsg.length > 0 ? "block" : "none");
+    },
+  },
+  methods: {
+    trySetEnterTime: function(event) {
+      if (!!event.target.checked)
+        this.enterTime = Date.now();
+    },
+    toggleStage: function() {
+      // Loop login <--> register (update is for logged-in users)
+      this.stage = (this.stage == "Login" ? "Register" : "Login");
+    },
+    ajaxUrl: function() {
+      switch (this.stage)
+      {
+        case "Login":
+          return "/sendtoken";
+        case "Register":
+          return "/register";
+        case "Update":
+          return "/update";
+      }
+    },
+    ajaxMethod: function() {
+      switch (this.stage)
+      {
+        case "Login":
+          return "GET";
+        case "Register":
+          return "POST";
+        case "Update":
+          return "PUT";
+      }
+    },
+    infoMessage: function() {
+      switch (this.stage)
+      {
+        case "Login":
+          return "Connection token sent. Check your emails!";
+        case "Register":
+          return "Registration complete! Please check your emails.";
+        case "Update":
+          return "Modifications applied!";
+      }
+    },
+    onSubmit: function() {
+      // Basic anti-bot strategy:
+      const exitTime = Date.now();
+      if (this.stage == "Register" && exitTime - this.enterTime < 5000)
+        return; //silently return, in (curious) case of it was legitimate
+      let error = undefined;
+      if (this.stage == 'Login')
+      {
+        const type = (this.nameOrEmail.indexOf('@') >= 0 ? "email" : "name");
+        error = checkNameEmail({[type]: this.nameOrEmail});
+      }
+      else
+        error = checkNameEmail(this.user);
+      if (!!error)
+        return alert(error);
+      this.infoMsg = "Processing... Please wait";
+      ajax(this.ajaxUrl(), this.ajaxMethod(),
+        this.stage == "Login" ? { nameOrEmail: this.nameOrEmail } : this.user,
+        res => {
+
+          console.log("receive login infos");
+          console.log(res);
+
+          this.infoMsg = this.infoMessage();
+          if (this.stage != "Update")
+          {
+            this.nameOrEmail = "";
+            this.user["email"] = "";
+            this.user["name"] = "";
+            
+            debugger; //TODO: 2 passages ici au lieu d'1 lors du register
+            
+            // Store our identifiers in local storage (by little anticipation...)
+            localStorage["myid"] = res.id;
+            localStorage["myname"] = res.name;
             // Also in global object
-            this.$user.id = res.id;
-            this.$user.name = res.name;
-                                       }
-                                       setTimeout(() => {
-                                               this.infoMsg = "";
-                                               if (this.stage == "Register")
-                                                       this.stage = "Login";
-                                               document.getElementById("modalUser").checked = false;
-                                       }, 2000);
-                               },
-                               err => {
-                                       this.infoMsg = "";
-                                       alert(err);
-                               }
-                       );
-               },
-       },
+            this.st.user.id = res.id;
+            this.st.user.name = res.name;
+          }
+          setTimeout(() => {
+            this.infoMsg = "";
+            if (this.stage == "Register")
+              this.stage = "Login";
+            document.getElementById("modalUser").checked = false;
+          }, 2000);
+        },
+        err => {
+          this.infoMsg = "";
+          alert(err);
+        }
+      );
+    },
+  },
 };
 </script>
index e499d7e..77ca771 100644 (file)
@@ -125,6 +125,8 @@ export default {
   created: function() {
     // Always add myself to players' list
     this.players.push(this.st.user);
+    if (this.st.user.id > 0)
+    {
     // Ask server for current corr games (all but mines)
 //    ajax(
 //      "/games",
@@ -134,17 +136,18 @@ export default {
 //        this.games = this.games.concat(response.games);
 //      }
 //    );
-    // Also ask for corr challenges (open + personal to me)
-    ajax(
-      "/challenges",
-      "GET",
-      {uid: this.st.user.id},
-      response => {
-        console.log(response.challenges);
-        // TODO: post-treatment on challenges ?
-        this.challenges = this.challenges.concat(response.challenges);
-      }
-    );
+    // Also ask for corr challenges (open + sent to me)
+      ajax(
+        "/challenges",
+        "GET",
+        {uid: this.st.user.id},
+        response => {
+          console.log(response.challenges);
+          // TODO: post-treatment on challenges ?
+          this.challenges = this.challenges.concat(response.challenges);
+        }
+      );
+    }
     // 0.1] Ask server for room composition:
     const socketOpenListener = () => {
       this.st.conn.send(JSON.stringify({code:"pollclients"}));
@@ -394,8 +397,8 @@ export default {
         {
           this.players.push({name:"", id:0, sid:data.sid});
           this.st.conn.send(JSON.stringify({code:"askidentity", target:data.sid}));
-          this.st.conn.send(JSON.stringify({code:"askchallenge", target:sid}));
-          this.st.conn.send(JSON.stringify({code:"askgame", target:sid}));
+          this.st.conn.send(JSON.stringify({code:"askchallenge", target:data.sid}));
+          this.st.conn.send(JSON.stringify({code:"askgame", target:data.sid}));
           break;
         }
         case "disconnect":
@@ -549,8 +552,7 @@ export default {
         }
       }
     },
-    // c.type == corr alors use id...sinon sid (figés)
-    // NOTE: only for live games ?
+    // NOTE: for live games only (corr games are launched on server)
     launchGame: async function(c) {
       // Just assign colors and pass the message
       const vname = this.getVname(c.vid);
index 2b0a6e7..14c100a 100644 (file)
@@ -1,7 +1,7 @@
 module.exports =
 {
        // For mail sending. NOTE: *no trailing slash*
-       siteURL: "http://localhost:3000",
+       siteURL: "http://localhost:8080",
 
        // To know in which environment the code run
        env: process.env.NODE_ENV || 'development',
index 6f8ba0b..a5fbf63 100644 (file)
@@ -78,12 +78,15 @@ const ChallengeModel =
                        db.get(query, (err,challengeInfo) => {
                                if (!!err)
                                        return cb(err);
+        let condition = "";
+        if (!!challengeInfo.to[0])
+          condition = " AND u.name in (" + challengeInfo.to.join(",") + ")";
                                query =
                                        "SELECT w.uid AS id, u.name " +
                                        "FROM WillPlay w " +
                                        "JOIN Users u " +
                                        "  ON w.uid = u.id " +
-                                       "WHERE w.cid = " + id;
+                                       "WHERE w.cid = " + id + condition;
                                db.run(query, (err2,players) => {
                                        if (!!err2)
                                                return cb(err2);
@@ -113,6 +116,7 @@ const ChallengeModel =
                        db.run(query, (err,challIds) => {
                                if (!!err)
                                        return cb(err);
+        challIds = challIds || [];
                                let challenges = [];
                                challIds.forEach(cidRow => {
                                        ChallengeModel.getOne(cidRow["cid"], (err2,chall) => {
index 84b2c83..3f6840c 100644 (file)
@@ -5,7 +5,7 @@ const access = require("../utils/access");
 const ChallengeModel = require("../models/Challenge");
 const UserModel = require("../models/User"); //for name check
 
-router.get("/challenges", access.logged, access.ajax, (req,res) => {
+router.get("/challenges", (req,res) => {
   ChallengeModel.getByUser(req.query["uid"], (err,challenges) => {
     res.json(err || {challenges:challenges});
   });
index 8df0c43..1d9b042 100644 (file)
@@ -21,7 +21,11 @@ function setAndSendLoginToken(subject, to, res)
                        params.siteURL + "/authenticate?token=" + token + "\\n" +
                        "Token will expire in " + params.token.expire/(1000*60) + " minutes."
                sendEmail(params.mail.noreply, to.email, subject, body, err => {
-                       // "id" is generally the only info missing on client side,
+                       
+      console.log("send login infos ::");
+      console.log(to);
+      
+      // "id" is generally the only info missing on client side,
                        // but the name is also unknown if log-in with the email.
                        res.json(err || {id: to.id, name: to.name});
                });