alpha release

update v0.8.0
This commit is contained in:
2026-03-17 22:49:38 -04:00
commit 63a91931da
157 changed files with 10951 additions and 0 deletions

View File

@@ -0,0 +1,67 @@
import bcrypt from 'bcryptjs';
import Debug from 'debug';
import { env } from '../../lib/env.js';
import refreshTokensDB from '../../lib/refreshTokensDB.js';
import userDB from '../../lib/userDB.js';
import { generateAccessToken, generateEtag, generateRefreshToken, } from '../../lib/utils.js';
const debug = Debug('twtkpr:login');
/**
* Handles login request and (if successful) returns the JWT access token wile setting the refresh n the
*
* @param req
* @param res
* @returns
*/
export default async function loginHandler(req, res, config) {
const { accessSecret, privateDirectory, refreshSecret } = config;
debug('starting');
try {
const tokens = await refreshTokensDB(privateDirectory);
const users = await userDB(privateDirectory);
const { username, password, rememberToggle } = req.body;
if (!username || !password || !users.get(username)) {
debug('no values found', username);
res.status(401).end();
return;
}
const isMatch = await bcrypt.compare(password, users.get(username));
if (!isMatch) {
privateDirectory;
debug('no match');
res.status(401).end();
return;
}
debug('generating tokens');
const accessToken = generateAccessToken(username, accessSecret);
debug(`access token: ${accessToken}`);
const refreshToken = generateRefreshToken(username, refreshSecret, !!rememberToggle);
debug(`refresh token: ${refreshToken}`);
debug('setting tokens');
tokens.set(username, (tokens.get(username) || []).concat([refreshToken]));
debug('setting refreshToken cookie');
res.cookie('refreshToken', refreshToken, {
httpOnly: true,
secure: env.NODE_ENV === 'production',
sameSite: 'strict',
// 1 hour or 7 days
maxAge: (rememberToggle ? 1 : 7 * 24) * 60 * 60 * 1000,
});
if (rememberToggle) {
debug('setting accessToken cookie');
/*
res.cookie('accessToken', accessToken, {
httpOnly: false,
secure: env.NODE_ENV === 'production',
sameSite: 'strict',
});
*/
}
debug('setting response');
res.set('etag', generateEtag(accessToken)).status(200).send(accessToken);
}
catch (err) {
console.error(err);
res.status(500).end();
}
}
//# sourceMappingURL=login.js.map