ohmyform-api/src/service/user/boot.service.ts
2020-06-08 14:54:10 +02:00

60 lines
1.7 KiB
TypeScript

import { Injectable, OnApplicationBootstrap } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { PinoLogger } from 'nestjs-pino/dist';
import { UserCreateService } from './user.create.service';
import { UserService } from './user.service';
@Injectable()
export class BootService implements OnApplicationBootstrap {
constructor(
private readonly createService: UserCreateService,
private readonly userService: UserService,
private readonly configService: ConfigService,
private readonly logger: PinoLogger,
) {
}
async onApplicationBootstrap(): Promise<void> {
const create = this.configService.get<string>('CREATE_ADMIN', 'false')
if (!create || ['false', '0', 'no', ''].includes(create.toLowerCase())) {
return
}
this.logger.warn('admin user check is still enabled! once your use has been created this should be disabled')
const username = this.configService.get<string>('ADMIN_USERNAME', 'root')
const email = this.configService.get<string>('ADMIN_EMAIL', 'admin@ohmyform.com')
const password = this.configService.get<string>('ADMIN_PASSWORD', 'root')
try {
await this.userService.findByUsername(username)
this.logger.info('username already exists, skip creating')
return
} catch (e) {}
try {
await this.userService.findByEmail(email)
this.logger.info('email already exists, skip creating')
return
} catch (e) {}
const user = await this.createService.create({
username,
email,
password,
})
user.set('roles', ['user', 'admin', 'superuser'])
try {
await user.save()
} catch (e) {
this.logger.error('could not create admin user')
}
this.logger.info('new root user created')
}
}