e7ed7006fd
- Disabled duplicate email service (emailService.js) that was creating redundant connections - Increased connection pool size from 10 to 25 for production environment - Extended session timeout cache from 5 to 30 minutes to reduce DB queries - Added connection retry logic with exponential backoff for transient failures - Fixed password validation to use retry wrapper and correct setting key - Updated public settings and gallery middleware to handle connection failures gracefully These changes address the "Connection terminated unexpectedly" errors in production by: 1. Reducing unnecessary database connections 2. Increasing available connection pool capacity 3. Implementing automatic retry for transient connection failures 4. Caching frequently accessed data for longer periods 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
38 lines
1.0 KiB
JavaScript
38 lines
1.0 KiB
JavaScript
const jwt = require('jsonwebtoken');
|
|
const { db, withRetry } = require('../database/db');
|
|
const { formatBoolean } = require('../utils/dbCompat');
|
|
|
|
// Middleware to verify gallery access
|
|
async function verifyGalleryAccess(req, res, next) {
|
|
try {
|
|
const token = req.headers.authorization?.split(' ')[1];
|
|
if (!token) {
|
|
return res.status(401).json({ error: 'No token provided' });
|
|
}
|
|
|
|
const decoded = jwt.verify(token, process.env.JWT_SECRET);
|
|
const event = await withRetry(async () => {
|
|
return await db('events')
|
|
.where({
|
|
id: decoded.eventId,
|
|
is_active: formatBoolean(true),
|
|
is_archived: formatBoolean(false)
|
|
})
|
|
.first();
|
|
});
|
|
|
|
if (!event) {
|
|
return res.status(404).json({ error: 'Gallery not found or expired' });
|
|
}
|
|
|
|
req.event = event;
|
|
next();
|
|
} catch (error) {
|
|
console.error('Error verifying gallery access:', error);
|
|
res.status(401).json({ error: 'Invalid token', details: error.message });
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
verifyGalleryAccess
|
|
}; |