comparison rlgwebd.js @ 126:3e3824711791

RLG-Web server: allow changing e-mail and password. Logged-in users can change their e-mail addresses and passwords with a POST to the /uinfo interface.
author John "Elwin" Edwards <elwin@sdf.org>
date Sun, 26 Aug 2012 19:04:57 -0700
parents 5ad15380f851
children 823e878e5840
comparison
equal deleted inserted replaced
125:5ad15380f851 126:3e3824711791
1135 send404(res, urlobj.pathname, req.method == 'HEAD'); 1135 send404(res, urlobj.pathname, req.method == 'HEAD');
1136 return; 1136 return;
1137 } 1137 }
1138 } 1138 }
1139 1139
1140 function setuinfo(req, res, postdata) {
1141 var urlobj = url.parse(req.url, true);
1142 var query = urlobj.query;
1143 if (!("key" in query) || !(query["key"] in logins)) {
1144 sendError(res, 1);
1145 return;
1146 }
1147 var name = logins[query["key"]].name;
1148 var match = urlobj.pathname.match(/^\/[^\/]*\/(.*)/);
1149 if (!match || !match[1]) {
1150 send404(res, urlobj.pathname, true);
1151 return;
1152 }
1153 var which = match[1];
1154 if (!("v" in postdata)) {
1155 sendError(res, 2, "No value provided");
1156 return;
1157 }
1158 if (which == "email" || which == "pw") {
1159 var args;
1160 if (which == "email")
1161 args = ["setmail"];
1162 else
1163 args = ["setpw"];
1164 var child = child_process.execFile("/bin/sqlickrypt", args,
1165 function (err, stdout, stderr) {
1166 if (err) {
1167 tslog("Could not set %s: sqlickrypt error %d", which, err.code);
1168 sendError(res, 2);
1169 }
1170 else {
1171 tslog("User %s has changed %s", name, which);
1172 res.writeHead(200, { "Content-Type": "application/json" });
1173 res.end(JSON.stringify({"t": "t"}));
1174 }
1175 });
1176 child.stdin.end(name + "\n" + postdata.v + "\n", "utf8");
1177 }
1178 else {
1179 send404(res, urlobj.pathname, true);
1180 }
1181 }
1182
1140 var errorcodes = [ "Generic Error", "Not logged in", "Invalid data", 1183 var errorcodes = [ "Generic Error", "Not logged in", "Invalid data",
1141 "Login failed", "Already playing", "Game launch failed", 1184 "Login failed", "Already playing", "Game launch failed",
1142 "Server shutting down", "Game not in progress" ]; 1185 "Server shutting down", "Game not in progress" ];
1143 1186
1144 function sendError(res, ecode, msg, box) { 1187 function sendError(res, ecode, msg, box) {
1225 watch(req, res, formdata); 1268 watch(req, res, formdata);
1226 } 1269 }
1227 else if (target == "/quit") { 1270 else if (target == "/quit") {
1228 stopgame(res, formdata); 1271 stopgame(res, formdata);
1229 } 1272 }
1273 else if (target.match(/^\/uinfo\//)) {
1274 setuinfo(req, res, formdata);
1275 }
1230 else { 1276 else {
1231 res.writeHead(405, resheaders); 1277 res.writeHead(405, resheaders);
1232 res.end(); 1278 res.end();
1233 } 1279 }
1234 } 1280 }