83 lines
3.8 KiB
JavaScript
83 lines
3.8 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.siteSettingsRouter = void 0;
|
|
const express_1 = require("express");
|
|
const client_1 = require("@prisma/client");
|
|
const settings_service_1 = require("./settings.service");
|
|
const settings_schemas_1 = require("./settings.schemas");
|
|
const validate_1 = require("../../middleware/validate");
|
|
const auth_middleware_1 = require("../../middleware/auth.middleware");
|
|
const rbac_middleware_1 = require("../../middleware/rbac.middleware");
|
|
const email_service_1 = require("../../services/email.service");
|
|
const router = (0, express_1.Router)();
|
|
exports.siteSettingsRouter = router;
|
|
// GET /api/settings — public (needed by login page + public pages), strips SMTP credentials
|
|
router.get('/', async (_req, res, next) => {
|
|
try {
|
|
const settings = await settings_service_1.siteSettingsService.getPublic();
|
|
res.json(settings);
|
|
}
|
|
catch (err) {
|
|
next(err);
|
|
}
|
|
});
|
|
// GET /api/settings/admin — SUPER_ADMIN only, returns full settings including SMTP
|
|
router.get('/admin', auth_middleware_1.authenticate, (0, rbac_middleware_1.requireRole)(client_1.UserRole.SUPER_ADMIN), async (_req, res, next) => {
|
|
try {
|
|
const settings = await settings_service_1.siteSettingsService.get();
|
|
res.json(settings);
|
|
}
|
|
catch (err) {
|
|
next(err);
|
|
}
|
|
});
|
|
// POST /api/settings/email/test-connection — SUPER_ADMIN only
|
|
router.post('/email/test-connection', auth_middleware_1.authenticate, (0, rbac_middleware_1.requireRole)(client_1.UserRole.SUPER_ADMIN), async (_req, res, next) => {
|
|
try {
|
|
const success = await email_service_1.emailService.testConnection();
|
|
res.json({ success, message: success ? 'SMTP connection verified' : 'SMTP connection failed' });
|
|
}
|
|
catch (err) {
|
|
next(err);
|
|
}
|
|
});
|
|
// POST /api/settings/email/test-send — SUPER_ADMIN only
|
|
router.post('/email/test-send', auth_middleware_1.authenticate, (0, rbac_middleware_1.requireRole)(client_1.UserRole.SUPER_ADMIN), async (req, res, next) => {
|
|
try {
|
|
const { to } = req.body;
|
|
const settings = await settings_service_1.siteSettingsService.get();
|
|
const recipient = to || settings.testEmailRecipient || 'admin@cmlite.org';
|
|
const result = await email_service_1.emailService.sendEmail({
|
|
to: recipient,
|
|
subject: 'Changemaker Lite — Test Email',
|
|
html: `<h2>SMTP Test Successful</h2><p>This email confirms that your SMTP configuration is working correctly.</p><p>Sent at: ${new Date().toISOString()}</p>`,
|
|
text: `SMTP Test Successful\n\nThis email confirms that your SMTP configuration is working correctly.\n\nSent at: ${new Date().toISOString()}`,
|
|
});
|
|
res.json({
|
|
success: result.success,
|
|
messageId: result.messageId,
|
|
testMode: result.testMode,
|
|
recipient,
|
|
});
|
|
}
|
|
catch (err) {
|
|
next(err);
|
|
}
|
|
});
|
|
// PUT /api/settings — SUPER_ADMIN only
|
|
router.put('/', auth_middleware_1.authenticate, (0, rbac_middleware_1.requireRole)(client_1.UserRole.SUPER_ADMIN), (0, validate_1.validate)(settings_schemas_1.updateSiteSettingsSchema), async (req, res, next) => {
|
|
try {
|
|
const settings = await settings_service_1.siteSettingsService.update(req.body);
|
|
// If SMTP-related fields were updated, rebuild the transporter
|
|
const smtpFields = ['smtpHost', 'smtpPort', 'smtpUser', 'smtpPass', 'smtpFromAddress', 'smtpActiveProvider', 'emailTestMode', 'testEmailRecipient'];
|
|
const hasSmtpChanges = smtpFields.some((f) => f in req.body);
|
|
if (hasSmtpChanges) {
|
|
await email_service_1.emailService.rebuildTransporter();
|
|
}
|
|
res.json(settings);
|
|
}
|
|
catch (err) {
|
|
next(err);
|
|
}
|
|
});
|
|
//# sourceMappingURL=settings.routes.js.map
|