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