Mercurial > hg > rlgwebd
diff rlgwebd.js @ 124:fbeb0bf2b51d
Add a user information interface at /uinfo.
User information can be retrieved at /uinfo?key=<login key>&<prop>.
The only property currently retrievable is email; eventually these will
also be settable via POST.
author | John "Elwin" Edwards <elwin@sdf.org> |
---|---|
date | Mon, 13 Aug 2012 09:07:28 -0700 |
parents | 077adfeea038 |
children | 5ad15380f851 |
line wrap: on
line diff
--- a/rlgwebd.js Mon Aug 13 08:53:46 2012 -0700 +++ b/rlgwebd.js Mon Aug 13 09:07:28 2012 -0700 @@ -1092,6 +1092,46 @@ }); } +function getuinfo(req, res) { + var query = url.parse(req.url, true).query; + if (!("key" in query) || !(query["key"] in logins)) { + sendError(res, 1); + return; + } + var name = logins[query["key"]].name; + var reply = { "u": name }; + function send() { + res.writeHead(200, { "Content-Type": "application/json" }); + res.write(JSON.stringify(reply)); + res.end(); + } + if ("pw" in query) { + /* Don't actually divulge passwords. */ + reply["pw"] = ""; + } + if ("email" in query) { + var address; + function finish(code, signal) { + if (code != 0) { + tslog("sqlickrypt: %d with name %s", code, name); + sendError(res, 2); + } + else { + reply["email"] = address; + send(); + } + } + var subproc = child_process.spawn("/bin/sqlickrypt", ["getmail"]); + subproc.stdout.on("data", function (data) { + address = data.toString().replace(/\n/g, ""); + }); + subproc.on("exit", finish); + subproc.stdin.end(name + '\n', "utf8"); + } + else + send(); +} + var errorcodes = [ "Generic Error", "Not logged in", "Invalid data", "Login failed", "Already playing", "Game launch failed", "Server shutting down", "Game not in progress" ]; @@ -1112,7 +1152,6 @@ res.end(); } -// TODO new-objects done to here function webHandler(req, res) { /* default headers for the response */ var resheaders = {'Content-Type': 'text/html'}; @@ -1192,6 +1231,9 @@ else if (target == '/status') { statusmsg(req, res); } + else if (target == '/uinfo') { + getuinfo(req, res); + } else if (target.match(/^\/pstatus\//)) { pstatusmsg(req, res); }