"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: `

SMTP Test Successful

This email confirms that your SMTP configuration is working correctly.

Sent at: ${new Date().toISOString()}

`, 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