bharath/webapp/src/views/pages/403.ejs
iamcoolvivek007 e9025a71eb v2.0: Major improvements - Security, Code Quality, UI/UX, Features
Security:
- Add CSRF protection on all forms
- Fix session config (resave:false, saveUninitialized:false)
- Secure cookie settings for production
- Input sanitization middleware
- Request logging middleware
- Security headers via Helmet

Code Quality:
- Async error handling on ALL route handlers
- Proper HTTP status codes (400, 401, 403, 404, 409, 500)
- Input validation on all forms (server-side)
- Username validation (3-30 chars, alphanumeric+underscore)
- Password min length increased to 6
- Generic error messages (no info leakage)
- Graceful shutdown on SIGTERM

UI/UX:
- Dark mode toggle with persistence
- Toast notifications for success/error
- Loading states on form submit
- Improved CSS with CSS variables
- Better desktop responsive design
- New 403 Forbidden page
- Pagination controls
- Improved header with desktop nav

Features:
- Pagination on all list pages (loads, trips, users, messages, etc.)
- Admin stats JSON endpoint
- Admin user delete route
- Load cancel route
- Mark invoice as paid route
- Search/filter preserved on loadboard

Database:
- Additional composite indexes for performance
- Updated timestamps trigger on trips
- Improved FULL migration script

DevEx:
- Development seed script (seed.js)
- Improved Dockerfile (non-root, healthcheck)
- Comprehensive .gitignore
- Updated README v2.0
2026-05-31 18:08:01 +00:00

22 lines
1.1 KiB
Text

<%- include('../partials/header') %>
<div class="tricolor-strip"><div class="tricolor-saffron"></div><div class="tricolor-white"></div><div class="tricolor-green"></div></div>
<section class="error-page">
<div class="container">
<h1 style="color: var(--saffron);">🚫 403</h1>
<h2>Access Forbidden</h2>
<p>आपके पास इस पेज को देखने की अनुमति नहीं है।</p>
<p style="font-size: 0.85rem; color: var(--gray-500);">You don't have permission to access this page.</p>
<% if (typeof requiredRoles !== 'undefined' && requiredRoles) { %>
<p style="font-size: 0.8rem; color: var(--gray-500); margin-top: var(--space-sm);">
Required role: <%= requiredRoles.join(' or ') %>
</p>
<% } %>
<div style="margin-top: var(--space-lg); display: flex; gap: var(--space-sm); justify-content: center;">
<a href="javascript:history.back()" class="btn btn-outline btn-sm">← Go Back</a>
<a href="/" class="btn btn-primary btn-sm">🏠 Home</a>
</div>
</div>
</section>
<%- include('../partials/footer') %>