mirror of
https://github.com/Crazyco-xyz/48hr.email.git
synced 2026-01-09 11:19:36 +01:00
40 lines
1.4 KiB
JavaScript
40 lines
1.4 KiB
JavaScript
const templateContext = require('../template-context')
|
|
|
|
function checkLockAccess(req, res, next) {
|
|
const inboxLock = req.app.get('inboxLock')
|
|
const address = req.params.address
|
|
const userId = req.session && req.session.userId
|
|
const isAuthenticated = req.session && req.session.isAuthenticated
|
|
|
|
if (!address || !inboxLock) {
|
|
return next()
|
|
}
|
|
|
|
const isLocked = inboxLock.isLocked(address)
|
|
|
|
// For authenticated users, check database ownership
|
|
// Also allow session-based access for immediate unlock after locking
|
|
const hasAccess = isAuthenticated && userId ?
|
|
(inboxLock.isLockedByUser(address, userId) || req.session.lockedInbox === address.toLowerCase()) :
|
|
(req.session && req.session.lockedInbox === address.toLowerCase())
|
|
|
|
// Block access to locked inbox without proper authentication
|
|
if (isLocked && !hasAccess) {
|
|
const unlockError = req.session ? req.session.unlockError : undefined
|
|
if (req.session) delete req.session.unlockError
|
|
|
|
return res.render('error', templateContext.build(req, {
|
|
title: 'Access Denied',
|
|
message: 'This inbox is locked by another user. Only the owner can access it.'
|
|
}))
|
|
}
|
|
|
|
// Update last access if they have access and are authenticated
|
|
if (isLocked && hasAccess && isAuthenticated && userId) {
|
|
inboxLock.updateAccess(userId, address)
|
|
}
|
|
|
|
next()
|
|
}
|
|
|
|
module.exports = { checkLockAccess }
|