2026-05-03 19:51:57 -05:00
const { getSessionUser , COOKIE _NAME , publicUser } = require ( '../services/authService' ) ;
const { getDb , getSetting } = require ( '../db/database' ) ;
function getSingleModeUser ( ) {
if ( getSetting ( 'auth_mode' ) !== 'single' ) return null ;
const userId = getSetting ( 'default_user_id' ) ;
if ( ! userId ) return null ;
const row = getDb ( ) . prepare (
2026-05-04 23:34:24 -05:00
"SELECT id, username, display_name, role, must_change_password, first_login, active, is_default_admin FROM users WHERE id = ? AND role = 'user' AND active = 1"
2026-05-03 19:51:57 -05:00
) . get ( userId ) ;
return row ? publicUser ( row ) : null ;
}
function requireAuth ( req , res , next ) {
// Single-user mode: bypass session entirely, auto-attach the default user
const singleUser = getSingleModeUser ( ) ;
if ( singleUser ) {
req . user = singleUser ;
req . singleUserMode = true ;
return next ( ) ;
}
const user = getSessionUser ( req . cookies ? . [ COOKIE _NAME ] ) ;
if ( ! user ) return res . status ( 401 ) . json ( { error : 'Not authenticated' } ) ;
req . user = user ;
next ( ) ;
}
function requireUser ( req , res , next ) {
2026-05-04 23:34:24 -05:00
if ( req . user ? . is _default _admin ) {
return res . status ( 403 ) . json ( { error : 'Default admin account does not have tracker access' } ) ;
}
2026-05-03 20:40:48 -05:00
if ( ! [ 'user' , 'admin' ] . includes ( req . user ? . role ) ) {
2026-05-03 19:51:57 -05:00
return res . status ( 403 ) . json ( { error : 'Access denied: user account required' } ) ;
}
next ( ) ;
}
function requireAdmin ( req , res , next ) {
// In single-user mode the auto-attached user is never admin,
// so admin routes naturally stay protected by session.
if ( req . user ? . role !== 'admin' ) {
return res . status ( 403 ) . json ( { error : 'Access denied: admin account required' } ) ;
}
next ( ) ;
}
module . exports = { requireAuth , requireUser , requireAdmin } ;