diff --git a/jstrr.js b/jstrr.js index 779af59..1d2c0ec 100644 --- a/jstrr.js +++ b/jstrr.js @@ -455,13 +455,17 @@ lbl.classList.remove("disabled"); } } - } else if (data.email) { - loginhead.innerText = "Sent passcode to "+data.email; - prompt.innerText = "Passcode" - tmpkey = data.tmpkey; // Don't save tmp-skey - mystate.user = data.user; - input.value = ""; - input.setAttribute("type", "password"); + } else if (data.tmpkey) { + if (data.email) { + loginhead.innerText = "Sent passcode to "+data.email; + prompt.innerText = "Passcode" + tmpkey = data.tmpkey; // Don't save tmp-skey + mystate.user = data.user; + input.value = ""; + input.setAttribute("type", "password"); + } else { + loginhead.innerText = "Input Your Login ID"; + } input.focus(); } else if ("step" in data) { finishTrr(data); @@ -478,6 +482,9 @@ // alert("Ooops - session forcibly been timeout") _reset(); break; + case "overlimit": + alert(data.message); + break; } } else if (data.user && data.skey) { console.log("You are "+data.user); diff --git a/jtserv/jtserv.rb b/jtserv/jtserv.rb index 52de6da..b0bddd9 100755 --- a/jtserv/jtserv.rb +++ b/jtserv/jtserv.rb @@ -6,6 +6,7 @@ require 'sqlite3' PORT = 8814 +WARNMAX = 3 # Interchange of Information is done in JSON form. # (IN) {"cmd": Command, OtherArgs...} @@ -367,6 +368,10 @@ c.send(JSON.generate(hash)) end } +countUser = lambda{|user| + connections.values.select{|c| c["user"] == user}.length +} + EM::WebSocket.start({:host => "0.0.0.0", :port => PORT}) do |ws_conn| Thread.new { while cmd = gets @@ -454,13 +459,24 @@ if json["Login"] user = json["Login"] email = db.email(user) - token = db.genToken(user, email) - tmpkey = db.storeTmpKey(user, token) - j = JSON.generate({"email" => email, "tmpkey" => tmpkey, "user" => user}) + if email + token = db.genToken(user, email) + tmpkey = db.storeTmpKey(user, token) + j = JSON.generate({"email" => email, "tmpkey" => tmpkey, "user" => user}) + else + j = JSON.generate("tmpley" => "notregistered") + end p token ws_conn.send(j) elsif json["skey"] user, skey = json["user"], json["skey"] + if countUser.call(user) >= WARNMAX + msg = "いったい何回繋いだら気が済むの?\n"+ + "限度をわきまえなさい。" + ws_conn.send(JSON.generate({"fail" => "overlimit", + "message" => msg})) + next + end skey = db.authKey(user, json["skey"]) STDERR.printf("SKey=%s", skey) userinfo["skey"] = skey # Cache skey