Mercurial > hg > rlgwebd
comparison rlgwebd.js @ 17:d3e3d6b4016b
rlgwebd: switch to dgamelaunch's SQLite database.
The quickrypt utility is replaced with sqlickrypt, which takes a username
and password pair and checks them against the SQLite password database
used by dgamelaunch. This will be more extensible to using rlgwebd to
register, change passwords, etc.
| author | John "Elwin" Edwards <elwin@sdf.org> |
|---|---|
| date | Sun, 20 May 2012 15:52:07 -0700 |
| parents | ef6127ed6da3 |
| children | 188bbd857124 |
comparison
equal
deleted
inserted
replaced
| 16:ef6127ed6da3 | 17:d3e3d6b4016b |
|---|---|
| 294 } | 294 } |
| 295 function checkit(code, signal) { | 295 function checkit(code, signal) { |
| 296 // check the password | 296 // check the password |
| 297 if (code != 0) { | 297 if (code != 0) { |
| 298 sendError(res, 3); | 298 sendError(res, 3); |
| 299 console.log("Password check failed for user " + username); | 299 if (code == 1) |
| 300 console.log("Password check failed for user " + username); | |
| 301 else if (code == 2) | |
| 302 console.log("Attempted login by nonexistent user " + username); | |
| 303 else | |
| 304 console.log("Login failed: sqlickrypt error " + code); | |
| 300 return; | 305 return; |
| 301 } | 306 } |
| 302 // check for an existing game | 307 // check for an existing game |
| 303 fs.readdir(progressdir, function(err, files) { | 308 fs.readdir(progressdir, function(err, files) { |
| 304 if (!err) { | 309 if (!err) { |
| 305 var fre = RegExp("^" + username + ":"); | 310 var fre = RegExp("^" + username + ":"); |
| 306 for (var i = 0; i < files.length; i++) { | 311 for (var i = 0; i < files.length; i++) { |
| 307 if (files[i].match(fre)) { | 312 if (files[i].match(fre)) { |
| 308 sendError(res, 4, null); | 313 sendError(res, 4, null); |
| 314 console.log(username + " is already playing " + gname); | |
| 309 return; | 315 return; |
| 310 } | 316 } |
| 311 } | 317 } |
| 312 } | 318 } |
| 313 // If progressdir isn't readable, start a new game anyway. | 319 // If progressdir isn't readable, start a new game anyway. |
| 314 startgame(); | 320 startgame(); |
| 315 }); | 321 }); |
| 316 } | 322 } |
| 317 /* Look for the user in the password file */ | 323 /* Launch the sqlickrypt utility to check the password. */ |
| 318 fs.readFile(passwdfile, "utf8", function(err, data) { | 324 var checker = require('child_process').spawn("/bin/sqlickrypt"); |
| 319 if (err) { | 325 checker.on("exit", checkit); |
| 320 sendError(res, 3); | 326 checker.stdin.end(username + '\n' + password + '\n', "utf8"); |
| 321 console.log("Can't authenticate: " + err.toString()); | |
| 322 return; | |
| 323 } | |
| 324 var dlines = data.split('\n'); | |
| 325 for (var n = 0; n < dlines.length; n++) { | |
| 326 var fields = dlines[n].split(':'); | |
| 327 if (fields[0] == username) { | |
| 328 // check the password with the quickrypt utility | |
| 329 checker = require('child_process').spawn("/bin/quickrypt") | |
| 330 checker.on("exit", checkit); | |
| 331 checker.stdin.end(password + '\n' + fields[2] + '\n', "utf8"); | |
| 332 return; | |
| 333 } | |
| 334 } | |
| 335 sendError(res, 3); | |
| 336 console.log("Attempted login by nonexistent user " + username); | |
| 337 }); | |
| 338 return; | 327 return; |
| 339 } | 328 } |
| 340 | 329 |
| 341 function logout(term, res) { | 330 function logout(term, res) { |
| 342 if (!term.alive) { | 331 if (!term.alive) { |
