listmonk sync

This commit is contained in:
2025-08-15 11:14:38 -06:00
parent e36610ceed
commit 6ac45f7adf
20 changed files with 3416 additions and 6 deletions

View File

@@ -67,4 +67,45 @@ router.get('/nocodb-urls', (req, res) => {
});
});
// Get Listmonk URLs for admin panel
router.get('/listmonk-urls', (req, res) => {
console.log('Admin Listmonk URLs endpoint called');
// Construct Listmonk URLs using the public domain
// Since this route is protected by requireAdmin middleware,
// we know the user is an admin
const domain = process.env.DOMAIN;
let listmonkBaseUrl = null;
if (domain) {
// Construct the public Listmonk URL using the domain
// Format: https://listmonk.{domain}
listmonkBaseUrl = `https://listmonk.${domain}`;
}
const listmonkUrls = {
baseUrl: listmonkBaseUrl,
adminUrl: listmonkBaseUrl ? `${listmonkBaseUrl}/admin` : null,
listsUrl: listmonkBaseUrl ? `${listmonkBaseUrl}/admin/lists` : null,
campaignsUrl: listmonkBaseUrl ? `${listmonkBaseUrl}/admin/campaigns` : null,
subscribersUrl: listmonkBaseUrl ? `${listmonkBaseUrl}/admin/subscribers` : null,
settingsUrl: listmonkBaseUrl ? `${listmonkBaseUrl}/admin/settings` : null
};
console.log('Returning Listmonk URLs for admin:', {
domain: domain,
baseUrl: listmonkBaseUrl,
hasAdminUrl: !!listmonkUrls.adminUrl,
hasListsUrl: !!listmonkUrls.listsUrl,
hasCampaignsUrl: !!listmonkUrls.campaignsUrl,
hasSubscribersUrl: !!listmonkUrls.subscribersUrl,
hasSettingsUrl: !!listmonkUrls.settingsUrl
});
res.json({
success: true,
listmonkUrls
});
});
module.exports = router;

View File

@@ -14,6 +14,7 @@ const geocodingRoutes = require('../routes/geocoding'); // Existing geocoding ro
const shiftsRoutes = require('./shifts');
const externalDataRoutes = require('./external');
const cutsRoutes = require('./cuts');
const listmonkRoutes = require('./listmonk');
module.exports = (app) => {
// Health check (no auth)
@@ -63,6 +64,9 @@ module.exports = (app) => {
// Cuts routes (add after other protected routes)
app.use('/api/cuts', requireAuth, cutsRoutes);
// Listmonk routes (authenticated)
app.use('/api/listmonk', requireAuth, listmonkRoutes);
// Admin routes
app.get('/admin.html', requireAdmin, (req, res) => {
res.sendFile(path.join(__dirname, '../public', 'admin.html'));

View File

@@ -0,0 +1,25 @@
const express = require('express');
const router = express.Router();
const listmonkController = require('../controllers/listmonkController');
const { requireAuth, requireAdmin } = require('../middleware/auth');
// Get sync status (available to all authenticated users)
router.get('/status', requireAuth, listmonkController.getSyncStatus);
// Test connection (admin only)
router.get('/test-connection', requireAdmin, listmonkController.testConnection);
// Get list statistics (admin only)
router.get('/stats', requireAdmin, listmonkController.getListStats);
// Bulk sync operations (admin only)
router.post('/sync/locations', requireAdmin, listmonkController.syncAllLocations);
router.post('/sync/users', requireAdmin, listmonkController.syncAllUsers);
router.post('/sync/all', requireAdmin, listmonkController.syncAll);
// Reinitialize lists (admin only)
router.post('/reinitialize', requireAdmin, listmonkController.reinitializeLists);
module.exports = router;