X-Git-Url: https://git.auder.net/?p=vchess.git;a=blobdiff_plain;f=public%2Fjavascripts%2Fcomponents%2FupsertUser.js;h=f996ea193b36a158580ea32f49237b0ceafbfb2a;hp=29444b46f67d8b8dcd5e6fca5dc5d2f88b6dd6bb;hb=8a477a7e1b781babc74d7935b80ac0b18ec04f86;hpb=0bd5933d97a90473233d0f90f465a43aba430ffa diff --git a/public/javascripts/components/upsertUser.js b/public/javascripts/components/upsertUser.js index 29444b46..f996ea19 100644 --- a/public/javascripts/components/upsertUser.js +++ b/public/javascripts/components/upsertUser.js @@ -1,41 +1,56 @@ // Logic to login, or create / update a user (and also logout) Vue.component('my-upsert-user', { - props: ["initUser"], //to find the game in storage (assumption: it exists) data: function() { return { - user: initUser, //initialized with prop value - stage: (!initUser.email ? "Login" : "Update"), + user: user, //initialized with global user object + nameOrEmail: "", //for login + stage: (!user.email ? "Login" : "Update"), infoMsg: "", + enterTime: Number.MAX_SAFE_INTEGER, //for a basic anti-bot strategy }; }, template: `
- +
-
`, @@ -56,7 +71,12 @@ Vue.component('my-upsert-user', { }, }, 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() { @@ -93,19 +113,28 @@ Vue.component('my-upsert-user', { } }, submit: function() { - // TODO: re-activate simple measures like this: (using time of click on modal) -// const exitTime = new Date(); -// if (this.stage=="Register" && exitTime.getTime() - enterTime.getTime() < 5000) -// return; - if (!this.user.name.match(/[a-z0-9_]+/i)) - return alert("User name: only alphanumerics and underscore"); + // 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" ? "PUT" : "POST", this.user, + 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"] = ""; } @@ -113,6 +142,10 @@ Vue.component('my-upsert-user', { this.infoMsg = ""; document.getElementById("modalUser").checked = false; }, 2000); + }, + err => { + this.infoMsg = ""; + alert(err); } ); },