Files
alibb-server/backend/src/services/auth.service.ts
T
2026-08-27 16:11:49 +08:00

31 lines
1003 B
TypeScript

import bcrypt from 'bcryptjs';
import jwt from 'jsonwebtoken';
import { getPrisma } from '../lib/prisma.js';
import { env } from '../config/env.js';
export async function bootstrapAdmin() {
const prisma = getPrisma();
if ((await prisma.user.count()) === 0) {
await prisma.user.create({
data: {
username: env.ADMIN_USERNAME,
passwordHash: await bcrypt.hash(env.ADMIN_PASSWORD, 10),
},
});
console.log(`seeded admin "${env.ADMIN_USERNAME}"`);
}
}
export async function login(username: string, password: string) {
const prisma = getPrisma();
const user = await prisma.user.findUnique({ where: { username } });
if (!user || !(await bcrypt.compare(password, user.passwordHash)))
throw Object.assign(new Error('invalid credentials'), { status: 401 });
return {
token: jwt.sign({ sub: String(user.id), u: user.username }, env.JWT_SECRET, {
expiresIn: env.JWT_EXPIRES_IN,
} as jwt.SignOptions),
expiresIn: env.JWT_EXPIRES_IN,
};
}