42 lines
1.1 KiB
TypeScript
42 lines
1.1 KiB
TypeScript
import { env } from '$env/dynamic/private';
|
|
import { initRepos, users } from '$lib/server/db';
|
|
import { Guard } from '$lib/server/guard';
|
|
import { getUserFromSession } from '$lib/server/sessions';
|
|
import type { Handle, ServerInit } from '@sveltejs/kit';
|
|
import bcrypt from 'bcryptjs';
|
|
import { writeFileSync } from 'fs';
|
|
import { nanoid } from 'nanoid';
|
|
|
|
export const init: ServerInit = async () => {
|
|
await initRepos();
|
|
|
|
if (!(await users.any())) {
|
|
let pass = env.DEFAULT_ADMIN_PASS;
|
|
|
|
if (!pass) {
|
|
pass = nanoid();
|
|
|
|
console.log(`default admin password: ${pass}`);
|
|
console.log("saved to ./default_admin_pass.txt, don't share it and change it asap");
|
|
|
|
writeFileSync('./data/default_admin_pass.txt', pass);
|
|
}
|
|
|
|
await users.create({
|
|
name: 'admin',
|
|
password: bcrypt.hashSync(pass, 10),
|
|
admin: true,
|
|
groups: [],
|
|
devices: [],
|
|
});
|
|
}
|
|
};
|
|
|
|
export const handle: Handle = async ({ event, resolve }) => {
|
|
const { cookies, locals } = event;
|
|
|
|
locals.guard = new Guard(await getUserFromSession(cookies.get('session')));
|
|
|
|
return await resolve(event);
|
|
};
|