Skip to content

Commit bce8efd

Browse files
authored
Add description for registerID and add exists fn
1 parent c46a4f9 commit bce8efd

File tree

1 file changed

+46
-1
lines changed

1 file changed

+46
-1
lines changed

backend/SessionIDManager.js

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ const {
22
randomBytes
33
} = require("crypto");
44
/**
5+
* Registers a session ID
56
*
67
* @param {object} database The database object (must have a run method - recommended sql client: sqlite)
78
* @param {string} username The username (does not need to be escaped)
@@ -28,11 +29,55 @@ exports.registerID = (database, username, session, expires) => {
2829
}).catch(error => {
2930
if (error.toString().includes("no such table: sessionids")) {
3031
database.run("CREATE TABLE sessionids (`username` TEXT, `sessionid` TEXT, `expires` TEXT)").catch(reject);
31-
reject({ toString: () => "Table was not present at execution. It has been created now." });
32+
reject({
33+
toString: () => "Table was not present at execution. It has been created now."
34+
});
3235
} else console.log(error);
3336
});
3437
} catch (e) {
3538
reject(e);
3639
}
3740
});
3841
}
42+
43+
/**
44+
* Checks if a session ID exists
45+
*
46+
* @param {object} database The database object (must have a run method - recommended sql client: sqlite)
47+
* @param {object} data An object with both a type property (search keyword, either: session, username or expiresAt) and a value property
48+
* @returns {promise<boolean|object>} Whether the session ID exists or not (or an object with error information)
49+
*/
50+
exports.exists = (database, data) => {
51+
return new Promise((resolve, reject) => {
52+
try {
53+
switch (data.type) {
54+
case "session":
55+
database.prepare("SELECT * FROM sessionids WHERE sessionid = ?").then(prepare => {
56+
prepare.get([data.value]).then(result => {
57+
if (typeof result === "undefined") resolve(false);
58+
else resolve(true);
59+
});
60+
}).catch(reject);
61+
break;
62+
case "username":
63+
database.prepare("SELECT * FROM sessionids WHERE username = ?").then(prepare => {
64+
prepare.get([data.value]).then(result => {
65+
if (typeof result === "undefined") resolve(false);
66+
else resolve(true);
67+
});
68+
}).catch(reject);
69+
break;
70+
case "expiresAt":
71+
database.prepare("SELECT * FROM sessionids WHERE expires = ?").then(prepare => {
72+
prepare.get([data.value]).then(result => {
73+
if (typeof result === "undefined") resolve(false);
74+
else resolve(true);
75+
});
76+
}).catch(reject);
77+
break;
78+
}
79+
} catch (e) {
80+
reject(e)
81+
}
82+
});
83+
}

0 commit comments

Comments
 (0)