60 lines
1.9 KiB
JavaScript
60 lines
1.9 KiB
JavaScript
const router = require('express').Router();
|
|
const conf = require('@simpleworkjs/conf');
|
|
const permission = require('../utils/permission');
|
|
|
|
router.use(async (req, res, next) => {
|
|
try {
|
|
await permission.byGroup(req.user, ['app_sso_directory_admin', 'app_sso_admin']);
|
|
next();
|
|
} catch(err) {
|
|
next(err);
|
|
}
|
|
});
|
|
|
|
const Redis = require('ioredis');
|
|
const connection = new Redis(process.env.REDIS_URL || 'redis://127.0.0.1:6379', { maxRetriesPerRequest: null });
|
|
const { initScheduler } = require('../services/scheduler');
|
|
|
|
router.get('/', async (req, res) => {
|
|
const plugins = conf.discovery && conf.discovery.plugins ? conf.discovery.plugins : {};
|
|
let overrides = {};
|
|
try {
|
|
const data = await connection.hgetall('discovery_plugins');
|
|
for (const [k, v] of Object.entries(data)) {
|
|
overrides[k] = JSON.parse(v);
|
|
}
|
|
} catch(e) {}
|
|
|
|
// Mask secrets before sending
|
|
const masked = JSON.parse(JSON.stringify(plugins));
|
|
for (const name in masked) {
|
|
masked[name] = { ...masked[name], ...(overrides[name] || {}) };
|
|
if (masked[name].tokenSecret) masked[name].tokenSecret = '********';
|
|
if (masked[name].password) masked[name].password = '********';
|
|
}
|
|
res.json({ results: masked });
|
|
});
|
|
|
|
router.put('/:name', async (req, res) => {
|
|
const name = req.params.name;
|
|
const updates = req.body;
|
|
|
|
let current = {};
|
|
try {
|
|
const data = await connection.hget('discovery_plugins', name);
|
|
if (data) current = JSON.parse(data);
|
|
} catch(e) {}
|
|
|
|
if (updates.cron !== undefined) current.cron = updates.cron;
|
|
if (updates.enabled !== undefined) current.enabled = updates.enabled === true || updates.enabled === 'true';
|
|
|
|
await connection.hset('discovery_plugins', name, JSON.stringify(current));
|
|
|
|
// Re-init scheduler to apply changes
|
|
await initScheduler(conf.discovery).catch(console.error);
|
|
|
|
res.json({ success: true, message: 'Plugin updated' });
|
|
});
|
|
|
|
module.exports = router;
|