X-Git-Url: https://git.auder.net/variants/Baroque/style.css?a=blobdiff_plain;f=public%2Fjavascripts%2Fcomponents%2FupsertUser.js;h=dde6708e5f5453f61641f8db9fb45ef8d60becfe;hb=b955c65b942d09d24b5c3bed0d755d4f2f8f71f1;hp=29444b46f67d8b8dcd5e6fca5dc5d2f88b6dd6bb;hpb=b57dbd126734b4398861292c611197c6991ed3eb;p=vchess.git
diff --git a/public/javascripts/components/upsertUser.js b/public/javascripts/components/upsertUser.js
index 29444b46..dde6708e 100644
--- a/public/javascripts/components/upsertUser.js
+++ b/public/javascripts/components/upsertUser.js
@@ -1,41 +1,58 @@
// 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)
+vv = Vue.component('my-upsert-user', {
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 +73,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() {
@@ -92,27 +114,42 @@ Vue.component('my-upsert-user', {
return "Modifications applied!";
}
},
- 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");
+ 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" ? "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"] = "";
}
setTimeout(() => {
this.infoMsg = "";
+ if (this.stage == "Register")
+ this.stage = "Login";
document.getElementById("modalUser").checked = false;
}, 2000);
+ },
+ err => {
+ this.infoMsg = "";
+ alert(err);
}
);
},