[Chore]: Update logging & bump version

This commit is contained in:
ClaraCrazy 2025-12-26 12:29:43 +01:00
parent 994ccb2dc3
commit fc1ed35856
No known key found for this signature in database
GPG key ID: EBBC896ACB497011
2 changed files with 39 additions and 15 deletions

View file

@ -1,10 +1,13 @@
const express = require('express') const express = require('express')
const router = express.Router() const router = express.Router()
const debug = require('debug')('48hr-email:lock')
router.post('/lock', async(req, res) => { router.post('/lock', async(req, res) => {
const { address, password } = req.body const { address, password } = req.body
debug(`Lock attempt for inbox: ${address}`);
if (!address || !password || password.length < 8) { if (!address || !password || password.length < 8) {
debug(`Lock error for ${address}: invalid input`);
if (req.session) req.session.lockError = 'invalid' if (req.session) req.session.lockError = 'invalid'
return res.redirect(`/inbox/${address}`) return res.redirect(`/inbox/${address}`)
} }
@ -16,20 +19,24 @@ router.post('/lock', async(req, res) => {
// Prevent locking the example inbox; allow UI but block DB insert // Prevent locking the example inbox; allow UI but block DB insert
if (config && config.email && config.email.examples && config.email.examples.account && address.toLowerCase() === config.email.examples.account.toLowerCase()) { if (config && config.email && config.email.examples && config.email.examples.account && address.toLowerCase() === config.email.examples.account.toLowerCase()) {
debug(`Lock error for ${address}: locking disabled for example inbox`);
if (req.session) req.session.lockError = 'locking_disabled_for_example' if (req.session) req.session.lockError = 'locking_disabled_for_example'
return res.redirect(`/inbox/${address}`) return res.redirect(`/inbox/${address}`)
} }
await inboxLock.lock(address, password) await inboxLock.lock(address, password)
debug(`Inbox locked: ${address}`);
// Clear cache for this inbox // Clear cache for this inbox
if (mailProcessingService.cachedFetchFullMail && mailProcessingService.cachedFetchFullMail.clear) { if (mailProcessingService.cachedFetchFullMail && mailProcessingService.cachedFetchFullMail.clear) {
debug(`Clearing lock cache for: ${address}`);
mailProcessingService.cachedFetchFullMail.clear() mailProcessingService.cachedFetchFullMail.clear()
} }
req.session.lockedInbox = address req.session.lockedInbox = address
res.redirect(`/inbox/${address}`) res.redirect(`/inbox/${address}`)
} catch (error) { } catch (error) {
debug(`Lock error for ${address}: ${error.message}`);
console.error('Lock error:', error) console.error('Lock error:', error)
if (req.session) req.session.lockError = 'server_error' if (req.session) req.session.lockError = 'server_error'
res.redirect(`/inbox/${address}`) res.redirect(`/inbox/${address}`)
@ -39,8 +46,10 @@ router.post('/lock', async(req, res) => {
router.post('/unlock', async(req, res) => { router.post('/unlock', async(req, res) => {
const { address, password, redirectTo } = req.body const { address, password, redirectTo } = req.body
const destination = redirectTo && redirectTo.startsWith('/') ? redirectTo : `/inbox/${address}` const destination = redirectTo && redirectTo.startsWith('/') ? redirectTo : `/inbox/${address}`
debug(`Unlock attempt for inbox: ${address}`);
if (!address || !password) { if (!address || !password) {
debug(`Unlock error for ${address}: missing fields`);
if (req.session) req.session.unlockError = 'missing_fields' if (req.session) req.session.unlockError = 'missing_fields'
return res.redirect(destination) return res.redirect(destination)
} }
@ -50,13 +59,16 @@ router.post('/unlock', async(req, res) => {
const inbox = await inboxLock.unlock(address, password) const inbox = await inboxLock.unlock(address, password)
if (!inbox) { if (!inbox) {
debug(`Unlock error for ${address}: invalid password`);
if (req.session) req.session.unlockError = 'invalid_password' if (req.session) req.session.unlockError = 'invalid_password'
return res.redirect(destination) return res.redirect(destination)
} }
debug(`Inbox unlocked: ${address}`);
req.session.lockedInbox = address req.session.lockedInbox = address
res.redirect(destination) res.redirect(destination)
} catch (error) { } catch (error) {
debug(`Unlock error for ${address}: ${error.message}`);
console.error('Unlock error:', error) console.error('Unlock error:', error)
if (req.session) req.session.unlockError = 'server_error' if (req.session) req.session.unlockError = 'server_error'
res.redirect(destination) res.redirect(destination)
@ -68,24 +80,30 @@ router.get('/logout', (req, res) => {
// Clear cache before logout // Clear cache before logout
if (mailProcessingService.cachedFetchFullMail && mailProcessingService.cachedFetchFullMail.clear) { if (mailProcessingService.cachedFetchFullMail && mailProcessingService.cachedFetchFullMail.clear) {
debug('Clearing lock cache for logout');
mailProcessingService.cachedFetchFullMail.clear() mailProcessingService.cachedFetchFullMail.clear()
} }
debug('Lock session destroyed (logout)');
req.session.destroy() req.session.destroy()
res.redirect('/') res.redirect('/')
}) })
router.post('/remove', async(req, res) => { router.post('/remove', async(req, res) => {
const { address } = req.body const { address } = req.body
debug(`Remove lock attempt for inbox: ${address}`);
if (!address) { if (!address) {
debug('Remove lock error: missing address');
return res.redirect('/') return res.redirect('/')
} }
// Check if user has access to this locked inbox // Check if user has access to this locked inbox
const hasAccess = req.session && req.session.lockedInbox === address.toLowerCase() const hasAccess = req.session && req.session.lockedInbox === address.toLowerCase()
debug(`Lock middleware: ${address} - hasAccess: ${hasAccess}`);
if (!hasAccess) { if (!hasAccess) {
debug(`Remove lock error: no access for ${address}`);
return res.redirect(`/inbox/${address}`) return res.redirect(`/inbox/${address}`)
} }
@ -94,15 +112,19 @@ router.post('/remove', async(req, res) => {
const mailProcessingService = req.app.get('mailProcessingService') const mailProcessingService = req.app.get('mailProcessingService')
await inboxLock.release(address) await inboxLock.release(address)
debug(`Lock removed for inbox: ${address}`);
// Clear cache when removing lock // Clear cache when removing lock
if (mailProcessingService.cachedFetchFullMail && mailProcessingService.cachedFetchFullMail.clear) { if (mailProcessingService.cachedFetchFullMail && mailProcessingService.cachedFetchFullMail.clear) {
debug(`Clearing lock cache for: ${address}`);
mailProcessingService.cachedFetchFullMail.clear() mailProcessingService.cachedFetchFullMail.clear()
} }
debug('Lock session destroyed (remove)');
req.session.destroy() req.session.destroy()
res.redirect(`/inbox/${address}`) res.redirect(`/inbox/${address}`)
} catch (error) { } catch (error) {
debug(`Remove lock error for ${address}: ${error.message}`);
console.error('Remove lock error:', error) console.error('Remove lock error:', error)
if (req.session) req.session.lockError = 'remove_failed' if (req.session) req.session.lockError = 'remove_failed'
res.redirect(`/inbox/${address}`) res.redirect(`/inbox/${address}`)

View file

@ -1,11 +1,15 @@
{ {
"name": "48hr.email", "name": "48hr.email",
"version": "1.6.3", "version": "1.7.0",
"private": false, "private": false,
"description": "48hr.email is your favorite open-source tempmail client. ", "description": "48hr.email is your favorite open-source tempmail client.",
"keywords": [ "keywords": [
"node",
"mail",
"email",
"tempmail", "tempmail",
"48hr.email", "48hr.email",
"temporary-email",
"disposable-email" "disposable-email"
], ],
"homepage": "https://48hr.email/", "homepage": "https://48hr.email/",
@ -71,17 +75,15 @@
} }
] ]
}, },
"overrides": [ "overrides": [{
{ "files": "public/javascripts/*.js",
"files": "public/javascripts/*.js", "esnext": false,
"esnext": false, "env": [
"env": [ "browser"
"browser" ],
], "globals": [
"globals": [ "io"
"io" ]
] }]
}
]
} }
} }