Added filterable stash pages.

This commit is contained in:
2024-03-15 00:08:24 +01:00
parent 7f00e31fc4
commit a1b45cb721
39 changed files with 649218 additions and 80 deletions

View File

@@ -8,7 +8,9 @@ import { shapes } from '@dicebear/collection';
import { knexOwner as knex } from './knex.js';
import { curateUser, fetchUser } from './users.js';
import { HttpError } from './errors.js';
import initLogger from './logger.js';
const logger = initLogger();
const scrypt = util.promisify(crypto.scrypt);
async function verifyPassword(password, storedPassword) {
@@ -32,22 +34,21 @@ async function generateAvatar(user) {
});
await fs.mkdir('media/avatars', { recursive: true });
await avatar.png().toFile(`media/avatars/${user.id}_${user.username}.png`);
logger.verbose(`Generated avatar for '${user.username}' (${user.id})`);
}
export async function login(credentials) {
export async function login(credentials, userIp) {
if (!config.auth.login) {
throw new HttpError('Logins are currently disabled', 405);
}
const user = await fetchUser(credentials.username.trim(), {
const { user, stashes } = await fetchUser(credentials.username.trim(), {
email: true,
raw: true,
});
console.log('login user', user);
if (!user) {
throw new HttpError('Username or password incorrect', 401);
}
@@ -58,15 +59,21 @@ export async function login(credentials) {
.update('last_login', 'NOW()')
.where('id', user.id);
if (!user.avatar) {
console.log('login user', user);
logger.verbose(`Login from '${user.username}' (${user.id}, ${userIp})`);
try {
await fs.access(`media/avatars/${user.id}_${user.username}.png`);
} catch (error) {
await generateAvatar(user);
}
// fetched the raw user for password verification, don't return directly to user
return curateUser(user);
return curateUser(user, { stashes });
}
export async function signup(credentials) {
export async function signup(credentials, userIp) {
if (!config.auth.signup) {
throw new HttpError('Sign-ups are currently disabled', 405);
}
@@ -126,6 +133,8 @@ export async function signup(credentials) {
primary: true,
});
logger.verbose(`Signup from '${curatedUsername}' (${userId}, ${credentials.email}, ${userIp})`);
await generateAvatar({
id: userId,
username: curatedUsername,