mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-10-27 11:18:14 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			104 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const Logger = require('../../Logger')
 | |
| const { areEquivalent, copyValue, isNullOrNaN } = require('../../utils')
 | |
| 
 | |
| // REF: https://nodemailer.com/smtp/
 | |
| class EmailSettings {
 | |
|   constructor(settings = null) {
 | |
|     this.id = 'email-settings'
 | |
|     this.host = null
 | |
|     this.port = 465
 | |
|     this.secure = true
 | |
|     this.user = null
 | |
|     this.pass = null
 | |
|     this.testAddress = null
 | |
|     this.fromAddress = null
 | |
| 
 | |
|     // Array of { name:String, email:String }
 | |
|     this.ereaderDevices = []
 | |
| 
 | |
|     if (settings) {
 | |
|       this.construct(settings)
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   construct(settings) {
 | |
|     this.host = settings.host
 | |
|     this.port = settings.port
 | |
|     this.secure = !!settings.secure
 | |
|     this.user = settings.user
 | |
|     this.pass = settings.pass
 | |
|     this.testAddress = settings.testAddress
 | |
|     this.fromAddress = settings.fromAddress
 | |
|     this.ereaderDevices = settings.ereaderDevices?.map(d => ({ ...d })) || []
 | |
|   }
 | |
| 
 | |
|   toJSON() {
 | |
|     return {
 | |
|       id: this.id,
 | |
|       host: this.host,
 | |
|       port: this.port,
 | |
|       secure: this.secure,
 | |
|       user: this.user,
 | |
|       pass: this.pass,
 | |
|       testAddress: this.testAddress,
 | |
|       fromAddress: this.fromAddress,
 | |
|       ereaderDevices: this.ereaderDevices.map(d => ({ ...d }))
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   update(payload) {
 | |
|     if (!payload) return false
 | |
| 
 | |
|     if (payload.port !== undefined) {
 | |
|       if (isNullOrNaN(payload.port)) payload.port = 465
 | |
|       else payload.port = Number(payload.port)
 | |
|     }
 | |
|     if (payload.secure !== undefined) payload.secure = !!payload.secure
 | |
| 
 | |
|     if (payload.ereaderDevices !== undefined && !Array.isArray(payload.ereaderDevices)) payload.ereaderDevices = undefined
 | |
| 
 | |
|     let hasUpdates = false
 | |
| 
 | |
|     const json = this.toJSON()
 | |
|     for (const key in json) {
 | |
|       if (key === 'id') continue
 | |
| 
 | |
|       if (payload[key] !== undefined && !areEquivalent(payload[key], json[key])) {
 | |
|         this[key] = copyValue(payload[key])
 | |
|         hasUpdates = true
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     return hasUpdates
 | |
|   }
 | |
| 
 | |
|   getTransportObject() {
 | |
|     const payload = {
 | |
|       host: this.host,
 | |
|       secure: this.secure
 | |
|     }
 | |
|     if (this.port) payload.port = this.port
 | |
|     if (this.user && this.pass !== undefined) {
 | |
|       payload.auth = {
 | |
|         user: this.user,
 | |
|         pass: this.pass
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     return payload
 | |
|   }
 | |
| 
 | |
|   getEReaderDevices(user) {
 | |
|     // Only accessible to admin or up
 | |
|     if (!user.isAdminOrUp) {
 | |
|       return []
 | |
|     }
 | |
| 
 | |
|     return this.ereaderDevices.map(d => ({ ...d }))
 | |
|   }
 | |
| 
 | |
|   getEReaderDevice(deviceName) {
 | |
|     return this.ereaderDevices.find(d => d.name === deviceName)
 | |
|   }
 | |
| }
 | |
| module.exports = EmailSettings |