Files
sap-erp/routes/passwordReset.js
T
John 69b4e68baf
SAP-ERP Portal CI/CD / build (push) Failing after 5m20s
first commit
2026-09-23 17:31:02 +05:30

42 lines
1.9 KiB
JavaScript

'use strict';
// routes/passwordReset.js — "Forgot password" request queue (see
// services/passwordResetStore.js for why this is a request queue rather
// than an email-based reset flow).
const express = require('express');
const router = express.Router();
const { verifyToken, verifyUserAdmin } = require('../middleware/auth');
const store = () => require('../services/passwordResetStore');
// Submit a request — public, no auth (the whole point is the user is locked out)
router.post('/', async (req, res) => {
try {
const username = (req.body?.username || '').trim();
const note = (req.body?.note || '').trim();
if (!username) return res.status(400).json({ success: false, message: 'Username is required' });
if (username.length > 50) return res.status(400).json({ success: false, message: 'Username too long' });
if (note.length > 500) return res.status(400).json({ success: false, message: 'Note too long' });
await store().createRequest(username, note);
res.json({ success: true, message: 'Request submitted — an admin will reset your password shortly.' });
} catch (err) { res.status(500).json({ success: false, message: err.message }); }
});
// List requests — admin only
router.get('/', verifyToken, verifyUserAdmin, async (req, res) => {
try {
const data = await store().listRequests(req.query.status || null);
res.json({ success: true, data });
} catch (err) { res.status(500).json({ success: false, message: err.message }); }
});
// Mark a request resolved/dismissed — admin only
router.post('/:id/resolve', verifyToken, verifyUserAdmin, async (req, res) => {
try {
const status = req.body?.status === 'DISMISSED' ? 'DISMISSED' : 'RESOLVED';
await store().resolveRequest(req.params.id, status, req.user.username);
res.json({ success: true });
} catch (err) { res.status(500).json({ success: false, message: err.message }); }
});
module.exports = router;