Files

61 lines
1.7 KiB
JavaScript

const { mkdir } = require('fs/promises')
const db = require('../models/db')
const User = require('../models/user')
const {
portalAdminInitialEmail,
portalAdminInitialPassword
} = require('../config/keys')
const { TEMP_EXPORT_PATH } = require('./settings')
const debug = require('debug')('termPortal:config/init')
exports.fsStructure = async () => {
await mkdir(TEMP_EXPORT_PATH, { recursive: true })
}
async function createPortalAdmin() {
const {
rows: [{ exists }]
} = await db.query(
"SELECT EXISTS (SELECT 1 FROM user_role WHERE role_name = 'portal admin')"
)
if (exists) return 'Skipping creation of portal admin (already exists)'
const ADMIN_BASE = 'admin'
const adminUser = {
username: ADMIN_BASE,
firstName: ADMIN_BASE,
lastName: ADMIN_BASE,
password: portalAdminInitialPassword,
email: portalAdminInitialEmail
}
const userId = await User.create(adminUser)
const assignAdminRole = db.query(
`INSERT INTO user_role (user_id, role_name)
VALUES
($1, 'portal admin'),
($1, 'dictionaries admin'),
($1, 'consultancy admin'),
($1, 'consultant')`,
[userId]
)
const activateAdminUser = db.query(
`UPDATE "user" SET status = 'active', time_activated = time_registered WHERE username = $1`,
[adminUser.username]
)
await Promise.all([assignAdminRole, activateAdminUser])
return `Successfully created portal admin (username: ${adminUser.username}, password: ${adminUser.password})`
}
exports.adminUser = async () => {
// Generate portal admin user in empty DB.
// TODO Replace with a more robust solution for production.
try {
const message = await createPortalAdmin()
debug(message)
} catch (error) {
debug('Portal admin not seeded.')
debug(error)
}
}