mirror of
http://forgejo-oa09toasww4dgii9cj3gpzda.187.127.164.61.sslip.io/iamcoolvivek007/bharath.git
synced 2026-06-11 00:06:51 +00:00
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
22 lines
1.1 KiB
Text
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') %>
|