QOL improvements
All checks were successful
Build Images and Deploy / Update-PROD-Stack (push) Successful in 28s

This commit is contained in:
2026-02-28 01:14:50 -05:00
parent 79ee7064a8
commit bdb6d5ee25
11 changed files with 264 additions and 4 deletions

View File

@@ -45,6 +45,36 @@ const Users = {
db.prepare('UPDATE users SET is_admin = 1 WHERE id = ?').run(userId);
},
setPassword(userId, newPassword) {
const hash = bcrypt.hashSync(newPassword, 12);
db.prepare('UPDATE users SET password_hash = ? WHERE id = ?').run(hash, userId);
},
createPasswordResetToken(userId) {
const token = crypto.randomBytes(32).toString('hex');
const expiresAt = new Date(Date.now() + 24 * 60 * 60 * 1000).toISOString(); // 24 hours
// Invalidate any existing tokens for this user
db.prepare('UPDATE password_reset_tokens SET used = 1 WHERE user_id = ?').run(userId);
db.prepare('INSERT INTO password_reset_tokens (user_id, token, expires_at) VALUES (?, ?, ?)').run(userId, token, expiresAt);
return token;
},
findByResetToken(token) {
return db.prepare(`
SELECT prt.*, u.username FROM password_reset_tokens prt
JOIN users u ON prt.user_id = u.id
WHERE prt.token = ? AND prt.used = 0 AND prt.expires_at > datetime('now')
`).get(token);
},
consumeResetToken(token) {
db.prepare('UPDATE password_reset_tokens SET used = 1 WHERE token = ?').run(token);
},
getAllUsers() {
return db.prepare('SELECT id, username, is_admin, created_at FROM users ORDER BY username ASC').all();
},
getTotalPoints(userId) {
const row = db.prepare('SELECT COALESCE(SUM(points_awarded), 0) as total FROM scans WHERE user_id = ?').get(userId);
return row.total;
@@ -233,6 +263,14 @@ const Packages = {
db.prepare('UPDATE packages SET first_scan_image = ? WHERE id = ?').run(imagePath, packageId);
},
removeFirstScanImage(packageId) {
db.prepare('UPDATE packages SET first_scan_image = NULL WHERE id = ?').run(packageId);
},
clearHint(packageId) {
db.prepare('UPDATE packages SET last_scan_hint = NULL WHERE id = ?').run(packageId);
},
updateLastScanHint(packageId, userId, hint) {
db.prepare('UPDATE packages SET last_scanned_by = ?, last_scan_hint = ? WHERE id = ?').run(userId, hint, packageId);
}