Roughly completed Users logic; untested
[vchess.git] / models / User.js
CommitLineData
8d7e2786
BA
1var db = require("../utils/database");
2var maild = require("../utils/mailer.js");
0bd5933d 3var TokenGen = require("../utils/tokenGenerator");
8d7e2786
BA
4
5/*
6 * Structure:
7 * _id: integer
8 * name: varchar
9 * email: varchar
10 * loginToken: token on server only
11 * loginTime: datetime (validity)
12 * sessionToken: token in cookies for authentication
13 * notify: boolean (send email notifications for corr games)
14 */
15
16// User creation
17exports.create = function(name, email, notify, callback)
18{
19 if (!notify)
20 notify = false; //default
21 db.serialize(function() {
22 db.run(
23 "INSERT INTO Users " +
24 "(name, email, notify) VALUES " +
25 "(" + name + "," + email + "," + notify + ")");
26 });
27}
28
29// Find one user (by id, name, email, or token)
30exports.getOne = function(by, value, cb)
31{
32 const delimiter = (typeof value === "string" ? "'" : "");
33 db.serialize(function() {
34 db.get(
35 "SELECT * FROM Users " +
0bd5933d 36 "WHERE " + by + " = " + delimiter + value + delimiter,
8d7e2786
BA
37 callback);
38 });
39}
40
41/////////
42// MODIFY
43
44exports.setLoginToken = function(token, uid, cb)
45{
46 db.serialize(function() {
47 db.run(
48 "UPDATE Users " +
49 "SET loginToken = " + token + " AND loginTime = " + Date.now() + " " +
50 "WHERE id = " + uid);
51 });
52}
53
0bd5933d
BA
54// Set session token only if empty (first login)
55// TODO: weaker security (but avoid to re-login everywhere after each logout)
56exports.trySetSessionToken = function(uid, cb)
8d7e2786
BA
57{
58 // Also empty the login token to invalidate future attempts
59 db.serialize(function() {
0bd5933d
BA
60 db.get(
61 "SELECT sessionToken " +
62 "FROM Users " +
63 "WHERE id = " + uid, (err,token) => {
64 if (!!err)
65 return cb(err);
66 const newToken = token || TokenGen.generate(params.token.length);
67 db.run(
68 "UPDATE Users " +
69 "SET loginToken = NULL " +
70 (!token ? "AND sessionToken = " + newToken + " " : "") +
71 "WHERE id = " + uid);
72 cb(null, newToken);
73 });
8d7e2786
BA
74 });
75}
76
0bd5933d 77exports.updateSettings = function(user, cb)
8d7e2786
BA
78{
79 db.serialize(function() {
80 db.run(
81 "UPDATE Users " +
0bd5933d
BA
82 "SET name = " + user.name +
83 " AND email = " + user.email +
84 " AND notify = " + user.notify + " " +
85 "WHERE id = " + user._id);
8d7e2786
BA
86 });
87}