You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

44 lines
1.1 KiB

export default defineEventHandler(async (event) => {
const { username, password, remember } = await readValidatedBody(
event,
validateZod(credentialsType, event)
);
const users = await Database.user.findAll();
const user = users.find((user) => user.username == username);
if (!user)
throw createError({
statusCode: 400,
statusMessage: 'Incorrect credentials',
});
const userHashPassword = user.password;
const passwordValid = await isPasswordValid(password, userHashPassword);
if (!passwordValid) {
throw createError({
statusCode: 401,
statusMessage: 'Incorrect credentials',
});
}
const system = await Database.system.get();
const conf = { ...system.sessionConfig };
if (remember) {
conf.cookie = {
...(system.sessionConfig.cookie ?? {}),
maxAge: system.general.sessionTimeout,
};
}
const session = await useSession<WGSession>(event, conf);
const data = await session.update({
userId: user.id,
});
SERVER_DEBUG(`New Session: ${data.id}`);
return { success: true };
});