mirror of
https://github.com/Crazyco-xyz/48hr.email.git
synced 2026-01-10 03:29:36 +01:00
[Chore]: Update logging & bump version
This commit is contained in:
parent
994ccb2dc3
commit
fc1ed35856
2 changed files with 39 additions and 15 deletions
|
|
@ -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}`)
|
||||||
|
|
|
||||||
30
package.json
30
package.json
|
|
@ -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"
|
]
|
||||||
]
|
}]
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Add table
Reference in a new issue