diff --git a/jstrr.js b/jstrr.js index 1b8da9a..3f27576 100644 --- a/jstrr.js +++ b/jstrr.js @@ -463,6 +463,7 @@ } } } else if (data.tmpkey) { + input.disabled = false; if (data.email) { loginhead.innerText = "Sent passcode to "+data.email; prompt.innerText = "Passcode" @@ -477,7 +478,7 @@ } else if ("step" in data) { finishTrr(data); } else if (data.fail) { - + input.disabled = false; switch (data.fail) { case "fail": loginhead.innerHTML = "Invalid passcode
Try again "; @@ -485,6 +486,10 @@ input.value = ""; input.focus(); break; + case "byebye": + loginhead.innerHTML = "Too many login failure... Reloading "; + setTimeout(logout, 2000); + break; case "nokey": // alert("Ooops - session forcibly been timeout") _reset(); @@ -616,6 +621,7 @@ input.value = "" sendJSONtoServer(j); + input.disabled = true; } }; tryLogin(); diff --git a/jtserv/jtserv.rb b/jtserv/jtserv.rb index cb1ddcb..0bb17a9 100755 --- a/jtserv/jtserv.rb +++ b/jtserv/jtserv.rb @@ -458,6 +458,7 @@ STDERR.printf("RECV%s: [%s]\n", user ? "("+user+")" : "", json.reject{|k,v|k=="Passcode"}.to_json) if skey then + userinfo["trial"] = 0 # Reset auth count if json["team"] then #team[json["team"]][json["name"]] ||= nil userinfo = {"team" => json["team"], "name" => json["name"]} @@ -516,6 +517,8 @@ ws_conn.send(JSON.generate({"yourtext" => r})) end else ########## Before authenticated + userinfo["trial"] ||= 0 + p userinfo["trial"] if json["Login"] user = json["Login"] email = db.email(user) @@ -551,6 +554,7 @@ p textDB.textfiles ws_conn.send(j) # Login success by skey else + ## Need too frequent trial barrier here? ws_conn.send(JSON.generate({"fail" => "nokey"})) end elsif json["Passcode"] @@ -569,6 +573,15 @@ j = JSON.generate(r) ws_conn.send(j) # Login success by token+tmpkey else + case userinfo["trial"]+=1 + when 0..3 + when 4..8 + sleep 3 + else + ws_conn.send(JSON.generate({"user"=>user, "fail"=>"byebye"})) + ws_conn.close + next + end j = JSON.generate({"user" => user, "fail" => "fail"}) ws_conn.send(j) # Login failure by token end