2025-05-16 23:22:14 +03:00
import sql from "../services/sql.js" ;
import session , { Store } from "express-session" ;
2024-07-18 21:35:17 +03:00
import sessionSecret from "../services/session_secret.js" ;
2025-02-10 08:35:01 +01:00
import config from "../services/config.js" ;
2025-05-16 23:36:56 +03:00
import log from "../services/log.js" ;
2025-03-26 00:04:55 +01:00
2025-05-16 23:22:14 +03:00
class SQLiteSessionStore extends Store {
get ( sid : string , callback : ( err : any , session? : session.SessionData | null ) = > void ) : void {
2025-05-16 23:36:56 +03:00
try {
const data = sql . getValue < string > ( /*sql*/ ` SELECT data FROM sessions WHERE id = ? ` , sid ) ;
let session = null ;
if ( data ) {
session = JSON . parse ( data ) ;
}
return callback ( null , session ) ;
} catch ( e : unknown ) {
log . error ( e ) ;
return callback ( e ) ;
2025-05-16 23:31:42 +03:00
}
2025-05-16 23:22:14 +03:00
}
set ( id : string , session : session.SessionData , callback ? : ( err? : any ) = > void ) : void {
2025-05-16 23:36:56 +03:00
try {
const expires = Date . now ( ) + 3600000 ; // Session expiration time (1 hour from now)
const data = JSON . stringify ( session ) ;
sql . upsert ( "sessions" , "id" , {
id ,
expires ,
data
} ) ;
callback ? . ( ) ;
} catch ( e ) {
log . error ( e ) ;
return callback ? . ( e ) ;
}
2025-05-16 23:22:14 +03:00
}
destroy ( sid : string , callback ? : ( err? : any ) = > void ) : void {
2025-05-16 23:36:56 +03:00
try {
sql . execute ( /*sql*/ ` DELETE FROM sessions WHERE id = ? ` , sid ) ;
callback ? . ( ) ;
} catch ( e ) {
log . error ( e ) ;
callback ? . ( e ) ;
}
2025-05-16 23:22:14 +03:00
}
}
2023-05-07 15:23:46 +02:00
const sessionParser = session ( {
secret : sessionSecret ,
resave : false , // true forces the session to be saved back to the session store, even if the session was never modified during the request.
saveUninitialized : false , // true forces a session that is "uninitialized" to be saved to the store. A session is uninitialized when it is new but not modified.
cookie : {
2025-04-12 12:08:26 +02:00
path : "/" ,
2023-05-07 15:23:46 +02:00
httpOnly : true ,
2025-02-13 09:07:25 +01:00
maxAge : config.Session.cookieMaxAge * 1000 // needs value in milliseconds
2023-05-07 15:23:46 +02:00
} ,
2025-01-09 18:07:02 +02:00
name : "trilium.sid" ,
2025-05-16 23:22:14 +03:00
store : new SQLiteSessionStore ( )
2023-05-07 15:23:46 +02:00
} ) ;
2025-03-26 00:50:37 +01:00
export default sessionParser ;