Mercurial > hg > rlgwebd
comparison rlgwebd.js @ 125:5ad15380f851
Improve the /uinfo interface.
Change the URL scheme to /uinfo/<property>?key=<key> because that makes
more sense.
| author | John "Elwin" Edwards <elwin@sdf.org> | 
|---|---|
| date | Sat, 25 Aug 2012 19:33:31 -0700 | 
| parents | fbeb0bf2b51d | 
| children | 3e3824711791 | 
   comparison
  equal
  deleted
  inserted
  replaced
| 124:fbeb0bf2b51d | 125:5ad15380f851 | 
|---|---|
| 989 res.end(); | 989 res.end(); | 
| 990 } | 990 } | 
| 991 }); | 991 }); | 
| 992 } | 992 } | 
| 993 else { | 993 else { | 
| 994 res.writeHead(404, resheaders); | 994 send404(res, nname, req.method == 'HEAD'); | 
| 995 if (req.method != 'HEAD') { | |
| 996 res.write("<html><head><title>" + nname + "</title></head>\n<body><h1>" | |
| 997 + nname + " Not Found</h1></body></html>\n"); | |
| 998 } | |
| 999 res.end(); | |
| 1000 } | 995 } | 
| 1001 }); | 996 }); | 
| 1002 return; | 997 return; | 
| 1003 } | 998 } | 
| 1004 | 999 | 
| 1091 res.end(); | 1086 res.end(); | 
| 1092 }); | 1087 }); | 
| 1093 } | 1088 } | 
| 1094 | 1089 | 
| 1095 function getuinfo(req, res) { | 1090 function getuinfo(req, res) { | 
| 1096 var query = url.parse(req.url, true).query; | 1091 var urlobj = url.parse(req.url, true); | 
| 1092 var query = urlobj.query; | |
| 1097 if (!("key" in query) || !(query["key"] in logins)) { | 1093 if (!("key" in query) || !(query["key"] in logins)) { | 
| 1098 sendError(res, 1); | 1094 sendError(res, 1); | 
| 1099 return; | 1095 return; | 
| 1100 } | 1096 } | 
| 1097 var match = urlobj.pathname.match(/^\/[^\/]*\/(.*)/); | |
| 1098 if (!match || !match[1]) { | |
| 1099 send404(res, urlobj.pathname, req.method == 'HEAD'); | |
| 1100 return; | |
| 1101 } | |
| 1102 var which = match[1]; | |
| 1101 var name = logins[query["key"]].name; | 1103 var name = logins[query["key"]].name; | 
| 1102 var reply = { "u": name }; | 1104 var reply = { "u": name }; | 
| 1103 function send() { | 1105 function send() { | 
| 1104 res.writeHead(200, { "Content-Type": "application/json" }); | 1106 res.writeHead(200, { "Content-Type": "application/json" }); | 
| 1105 res.write(JSON.stringify(reply)); | 1107 res.write(JSON.stringify(reply)); | 
| 1106 res.end(); | 1108 res.end(); | 
| 1107 } | 1109 } | 
| 1108 if ("pw" in query) { | 1110 if (which == "pw") { | 
| 1109 /* Don't actually divulge passwords. */ | 1111 /* Don't actually divulge passwords. */ | 
| 1110 reply["pw"] = ""; | 1112 reply["pw"] = ""; | 
| 1111 } | 1113 send(); | 
| 1112 if ("email" in query) { | 1114 } | 
| 1115 else if (which == "email") { | |
| 1113 var address; | 1116 var address; | 
| 1114 function finish(code, signal) { | 1117 function finish(code, signal) { | 
| 1115 if (code != 0) { | 1118 if (code != 0) { | 
| 1116 tslog("sqlickrypt: %d with name %s", code, name); | 1119 tslog("sqlickrypt: %d with name %s", code, name); | 
| 1117 sendError(res, 2); | 1120 sendError(res, 2); | 
| 1126 address = data.toString().replace(/\n/g, ""); | 1129 address = data.toString().replace(/\n/g, ""); | 
| 1127 }); | 1130 }); | 
| 1128 subproc.on("exit", finish); | 1131 subproc.on("exit", finish); | 
| 1129 subproc.stdin.end(name + '\n', "utf8"); | 1132 subproc.stdin.end(name + '\n', "utf8"); | 
| 1130 } | 1133 } | 
| 1131 else | 1134 else { | 
| 1132 send(); | 1135 send404(res, urlobj.pathname, req.method == 'HEAD'); | 
| 1136 return; | |
| 1137 } | |
| 1133 } | 1138 } | 
| 1134 | 1139 | 
| 1135 var errorcodes = [ "Generic Error", "Not logged in", "Invalid data", | 1140 var errorcodes = [ "Generic Error", "Not logged in", "Invalid data", | 
| 1136 "Login failed", "Already playing", "Game launch failed", | 1141 "Login failed", "Already playing", "Game launch failed", | 
| 1137 "Server shutting down", "Game not in progress" ]; | 1142 "Server shutting down", "Game not in progress" ]; | 
| 1147 edict["s"] += ": " + msg; | 1152 edict["s"] += ": " + msg; | 
| 1148 if (box) | 1153 if (box) | 
| 1149 res.write(JSON.stringify([edict])); | 1154 res.write(JSON.stringify([edict])); | 
| 1150 else | 1155 else | 
| 1151 res.write(JSON.stringify(edict)); | 1156 res.write(JSON.stringify(edict)); | 
| 1157 res.end(); | |
| 1158 } | |
| 1159 | |
| 1160 function send404(res, path, nopage) { | |
| 1161 res.writeHead(404, {"Content-Type": "text/html; charset=utf-8"}); | |
| 1162 if (!nopage) { | |
| 1163 res.write("<html><head><title>" + path + "</title></head>\n<body><h1>" | |
| 1164 + path + " Not Found</h1></body></html>\n"); | |
| 1165 } | |
| 1152 res.end(); | 1166 res.end(); | 
| 1153 } | 1167 } | 
| 1154 | 1168 | 
| 1155 function webHandler(req, res) { | 1169 function webHandler(req, res) { | 
| 1156 /* default headers for the response */ | 1170 /* default headers for the response */ | 
| 1229 return; | 1243 return; | 
| 1230 } | 1244 } | 
| 1231 else if (target == '/status') { | 1245 else if (target == '/status') { | 
| 1232 statusmsg(req, res); | 1246 statusmsg(req, res); | 
| 1233 } | 1247 } | 
| 1234 else if (target == '/uinfo') { | 1248 else if (target.match(/^\/uinfo\//)) { | 
| 1235 getuinfo(req, res); | 1249 getuinfo(req, res); | 
| 1236 } | 1250 } | 
| 1237 else if (target.match(/^\/pstatus\//)) { | 1251 else if (target.match(/^\/pstatus\//)) { | 
| 1238 pstatusmsg(req, res); | 1252 pstatusmsg(req, res); | 
| 1239 } | 1253 } | 
