75 lines
No EOL
2 KiB
JavaScript
75 lines
No EOL
2 KiB
JavaScript
|
|
import crypto from "crypto";
|
|
|
|
import {
|
|
User
|
|
} from "../../lib/database/connect.mjs";
|
|
|
|
|
|
function sendAuthForm(response, errors=[]) {
|
|
response.render(`views/htmx/authForm.njk`, {
|
|
errors: errors
|
|
});
|
|
}
|
|
|
|
|
|
export const get = async function(request, response) {
|
|
sendAuthForm(response);
|
|
// response.set('HX-Redirect', '/profile').status(200).end();
|
|
}
|
|
|
|
export const post = async function(request, response) {
|
|
if (!request.body.username || !request.body.password) {
|
|
sendAuthForm(response, [{
|
|
title: 'Username and password are required',
|
|
detail: 'Username or Password was not received.'
|
|
}]);
|
|
return;
|
|
}
|
|
|
|
if (typeof request.body.username != 'string' || typeof request.body.password != 'string') {
|
|
sendAuthForm(response, [{
|
|
title: 'Invalid input types',
|
|
detail: 'Username and Password must be strings.'
|
|
}]);
|
|
return;
|
|
}
|
|
|
|
let username = request.body.username;
|
|
let password = crypto.createHash('sha256').update(request.body.password).digest('hex')
|
|
|
|
// let loginResult = await login(username, password)
|
|
let loginUser = await User.findOne({
|
|
where: {
|
|
name: username,
|
|
passsha256: password
|
|
}
|
|
});
|
|
|
|
if (loginUser == null) {
|
|
sendAuthForm(response, [{
|
|
title: 'Login failed',
|
|
detail: 'Invalid Username or Password.'
|
|
}]);
|
|
return;
|
|
}
|
|
|
|
if (loginUser.disabled == 1) {
|
|
sendAuthForm(response, [{
|
|
title: 'User disabled',
|
|
detail: 'This user account is disabled.'
|
|
}]);
|
|
return;
|
|
}
|
|
|
|
request.session.userid = loginUser.id;
|
|
request.session.save();
|
|
|
|
if (loginUser.otpsecret == '' || loginUser.otpsecret == null) {
|
|
request.setAuthState('authenticated');
|
|
response.set('HX-Redirect', '/profile').status(200).end();
|
|
} else {
|
|
request.setAuthState('totp-verfication');
|
|
response.redirect('/htmx/totpForm');
|
|
}
|
|
} |