This commit is contained in:
alex-sviridov 2025-11-18 20:11:56 +01:00 committed by GitHub
commit 096ddfd160
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 33 additions and 1 deletions

View File

@ -6,5 +6,8 @@ module.exports.config = {
MetadataPath: Path.resolve('metadata'), MetadataPath: Path.resolve('metadata'),
FFmpegPath: '/usr/bin/ffmpeg', FFmpegPath: '/usr/bin/ffmpeg',
FFProbePath: '/usr/bin/ffprobe', FFProbePath: '/usr/bin/ffprobe',
SkipBinariesCheck: false SkipBinariesCheck: false,
// Auto-create root user during initial setup
// InitUserName: 'admin',
// InitUserPassword: 'password'
} }

View File

@ -31,6 +31,8 @@ if (isDev || options['prod-with-dev-env']) {
if (devEnv.AllowIframe) process.env.ALLOW_IFRAME = '1' if (devEnv.AllowIframe) process.env.ALLOW_IFRAME = '1'
if (devEnv.BackupPath) process.env.BACKUP_PATH = devEnv.BackupPath if (devEnv.BackupPath) process.env.BACKUP_PATH = devEnv.BackupPath
if (devEnv.ReactClientPath) process.env.REACT_CLIENT_PATH = devEnv.ReactClientPath if (devEnv.ReactClientPath) process.env.REACT_CLIENT_PATH = devEnv.ReactClientPath
if (devEnv.InitUserName) process.env.INIT_USER_NAME = devEnv.InitUserName
if (devEnv.InitUserPassword) process.env.INIT_USER_PASSWORD = devEnv.InitUserPassword
process.env.SOURCE = 'local' process.env.SOURCE = 'local'
process.env.ROUTER_BASE_PATH = devEnv.RouterBasePath ?? '/audiobookshelf' process.env.ROUTER_BASE_PATH = devEnv.RouterBasePath ?? '/audiobookshelf'
} }

View File

@ -160,6 +160,9 @@ class Server {
// Create or set JWT secret in token manager // Create or set JWT secret in token manager
await this.auth.tokenManager.initTokenSecret() await this.auth.tokenManager.initTokenSecret()
// Auto-create root user if environment variables are set and no root user exists
await this.autoCreateRootUser()
await Logger.logManager.init() await Logger.logManager.init()
await this.cleanUserData() // Remove invalid user item progress await this.cleanUserData() // Remove invalid user item progress
@ -428,6 +431,30 @@ class Server {
SocketAuthority.initialize(this) SocketAuthority.initialize(this)
} }
async autoCreateRootUser() {
if (!Database.hasRootUser && process.env.INIT_USER_NAME) {
const initUsername = process.env.INIT_USER_NAME
const initPassword = process.env.INIT_USER_PASSWORD || ''
Logger.info(`[Server] Auto-creating root user "${initUsername}" from environment variables`)
try {
const hashedPassword = initPassword ? await this.auth.localAuthStrategy.hashPassword(initPassword) : ''
if (!hashedPassword && initPassword) {
Logger.warn(`[Server] Failed to hash password for auto-created root user`)
} else if (!initPassword) {
Logger.warn(`[Server] Creating root user with no password`)
}
await Database.createRootUser(initUsername, hashedPassword, this.auth)
Logger.info(`[Server] Successfully auto-created root user "${initUsername}"`)
} catch (error) {
Logger.error(`[Server] Failed to auto-create root user:`, error)
}
}
}
async initializeServer(req, res) { async initializeServer(req, res) {
Logger.info(`[Server] Initializing new server`) Logger.info(`[Server] Initializing new server`)
const newRoot = req.body.newRoot const newRoot = req.body.newRoot