2023-05-30 00:38:38 +02:00
const Logger = require ( '../Logger' )
const SocketAuthority = require ( '../SocketAuthority' )
2023-07-05 01:14:44 +02:00
const Database = require ( '../Database' )
2023-05-30 00:38:38 +02:00
class EmailController {
constructor ( ) { }
getSettings ( req , res ) {
res . json ( {
2023-07-05 01:14:44 +02:00
settings : Database . emailSettings
2023-05-30 00:38:38 +02:00
} )
}
async updateSettings ( req , res ) {
2023-07-05 01:14:44 +02:00
const updated = Database . emailSettings . update ( req . body )
2023-05-30 00:38:38 +02:00
if ( updated ) {
2023-07-05 01:14:44 +02:00
await Database . updateSetting ( Database . emailSettings )
2023-05-30 00:38:38 +02:00
}
res . json ( {
2023-07-05 01:14:44 +02:00
settings : Database . emailSettings
2023-05-30 00:38:38 +02:00
} )
}
async sendTest ( req , res ) {
this . emailManager . sendTest ( res )
}
async updateEReaderDevices ( req , res ) {
if ( ! req . body . ereaderDevices || ! Array . isArray ( req . body . ereaderDevices ) ) {
return res . status ( 400 ) . send ( 'Invalid payload. ereaderDevices array required' )
}
const ereaderDevices = req . body . ereaderDevices
for ( const device of ereaderDevices ) {
if ( ! device . name || ! device . email ) {
return res . status ( 400 ) . send ( 'Invalid payload. ereaderDevices array items must have name and email' )
}
}
2023-07-05 01:14:44 +02:00
const updated = Database . emailSettings . update ( {
2023-05-30 00:38:38 +02:00
ereaderDevices
} )
if ( updated ) {
2023-07-05 01:14:44 +02:00
await Database . updateSetting ( Database . emailSettings )
2023-05-30 00:38:38 +02:00
SocketAuthority . adminEmitter ( 'ereader-devices-updated' , {
2023-07-05 01:14:44 +02:00
ereaderDevices : Database . emailSettings . ereaderDevices
2023-05-30 00:38:38 +02:00
} )
}
res . json ( {
2023-07-05 01:14:44 +02:00
ereaderDevices : Database . emailSettings . ereaderDevices
2023-05-30 00:38:38 +02:00
} )
}
2023-10-29 17:28:34 +01:00
/ * *
* Send ebook to device
* User must have access to device and library item
*
* @ param { import ( 'express' ) . Request } req
* @ param { import ( 'express' ) . Response } res
* /
2023-05-30 00:38:38 +02:00
async sendEBookToDevice ( req , res ) {
2023-10-29 17:28:34 +01:00
Logger . debug ( ` [EmailController] Send ebook to device requested by user " ${ req . user . username } " for libraryItemId= ${ req . body . libraryItemId } , deviceName= ${ req . body . deviceName } ` )
const device = Database . emailSettings . getEReaderDevice ( req . body . deviceName )
if ( ! device ) {
return res . status ( 404 ) . send ( 'Ereader device not found' )
}
// Check user has access to device
if ( ! Database . emailSettings . checkUserCanAccessDevice ( device , req . user ) ) {
return res . sendStatus ( 403 )
}
2023-05-30 00:38:38 +02:00
2023-09-04 23:33:55 +02:00
const libraryItem = await Database . libraryItemModel . getOldById ( req . body . libraryItemId )
2023-05-30 00:38:38 +02:00
if ( ! libraryItem ) {
return res . status ( 404 ) . send ( 'Library item not found' )
}
2023-10-29 17:28:34 +01:00
// Check user has access to library item
2023-05-30 00:38:38 +02:00
if ( ! req . user . checkCanAccessLibraryItem ( libraryItem ) ) {
return res . sendStatus ( 403 )
}
const ebookFile = libraryItem . media . ebookFile
if ( ! ebookFile ) {
2023-10-29 17:28:34 +01:00
return res . status ( 404 ) . send ( 'Ebook file not found' )
2023-05-30 00:38:38 +02:00
}
this . emailManager . sendEBookToDevice ( ebookFile , device , res )
}
2023-10-29 17:28:34 +01:00
adminMiddleware ( req , res , next ) {
2023-05-30 00:38:38 +02:00
if ( ! req . user . isAdminOrUp ) {
return res . sendStatus ( 404 )
}
next ( )
}
}
module . exports = new EmailController ( )