Release 2.16.2
This commit is contained in:
1 parent
8ce8228091
commit
49df51d92f
32 files changed
+390
-172
No files matched your search
@@ -49,7 +49,7 @@ function buildApiSourceFormViewModel(apiSource, message, currentUser, options, i
|
||||
const viewApiSource = normalizeApiSourceForForm(apiSource);
|
||||
const viewOptions = options || {};
|
||||
function requestModel(request) {
|
||||
return Object.assign({ name: 'Request 1', api_url: '', request_method: 'GET', request_body_json: '', items_path: '', enabled: 1, update_interval_value: viewApiSource.updateIntervalValue, update_interval_unit: viewApiSource.updateIntervalUnit }, request, {
|
||||
return Object.assign({ name: 'Request 1', api_url: '', request_method: 'GET', request_body_json: '', items_path: '', enabled: 1, source_enabled: viewApiSource.enabled, update_interval_value: viewApiSource.updateIntervalValue, update_interval_unit: viewApiSource.updateIntervalUnit }, request, {
|
||||
lastResponseJson: typeof request.last_response_json === 'object' && request.last_response_json ? JSON.stringify(request.last_response_json, null, 2) : request.last_response_json || '',
|
||||
lastPulledAtValue: request.last_pulled_at ? new Date(request.last_pulled_at).toISOString() : ''
|
||||
});
|
||||
|
||||
@@ -16,7 +16,7 @@ module.exports = function registerApiSourceRoutes(app, deps) {
|
||||
function syncSchedules(group, removed, actorId) {
|
||||
(removed || []).forEach(function (id) { dataSourceTasks.removeRecurringRefresh('api-source', id); });
|
||||
group.requests.forEach(function (request) {
|
||||
if (!request.enabled) return dataSourceTasks.removeRecurringRefresh('api-source', request.id);
|
||||
if (group.enabled === 0 || group.enabled === false || !request.enabled) return dataSourceTasks.removeRecurringRefresh('api-source', request.id);
|
||||
dataSourceTasks.registerRecurringRefresh('api-source', request.id, group.name + ' / ' + request.name, request.update_interval_value || request.updateIntervalValue, request.update_interval_unit || request.updateIntervalUnit, function () {
|
||||
return dataSourceTasks.refreshApiSourceInBackground(request.id, actorId);
|
||||
});
|
||||
@@ -97,15 +97,15 @@ module.exports = function registerApiSourceRoutes(app, deps) {
|
||||
if (req.body.data_source_action === 'toggle') {
|
||||
const group = await fetchApiGroupById(pool, id);
|
||||
if (!group) return res.status(404).send('API source not found');
|
||||
const enabled = group.requests.some(function (request) { return request.enabled; }) ? 0 : 1;
|
||||
await pool.query('UPDATE i_api_sources SET enabled = ?, modified_by = ? WHERE auth_source_id = ?', [enabled, getAuditUserId(req), id]);
|
||||
group.requests.forEach(function (request) { request.enabled = enabled; });
|
||||
const enabled = group.enabled === 0 || group.enabled === false ? 1 : 0;
|
||||
await pool.query('UPDATE i_api_source_groups SET enabled = ?, modified_by = ? WHERE id = ?', [enabled, getAuditUserId(req), id]);
|
||||
group.enabled = enabled;
|
||||
syncSchedules(group, [], getAuditUserId(req));
|
||||
return res.redirect(base + '/' + id + '/edit?message=' + encodeURIComponent(enabled ? 'API requests enabled.' : 'API requests disabled.'));
|
||||
return res.redirect(base + '/' + id + '/edit?message=' + encodeURIComponent(enabled ? 'API source enabled.' : 'API source disabled.'));
|
||||
}
|
||||
const payload = buildApiGroupPayload(req.body);
|
||||
const result = await saveApiGroup(pool, id, payload, getAuditUserId(req), hasPermission(req.currentUser, 'api-sources.delete'));
|
||||
syncSchedules({ name: payload.name, requests: result.requests }, result.removed, getAuditUserId(req));
|
||||
syncSchedules({ name: payload.name, enabled: result.enabled, requests: result.requests }, result.removed, getAuditUserId(req));
|
||||
if (!id) {
|
||||
for (const request of result.requests) { if (request.enabled) await enqueue(request, payload, getAuditUserId(req)); }
|
||||
}
|
||||
@@ -119,15 +119,38 @@ module.exports = function registerApiSourceRoutes(app, deps) {
|
||||
try {
|
||||
const group = await fetchApiGroupById(pool, Number(req.params.id));
|
||||
if (!group) return res.status(404).send('API source not found');
|
||||
if (group.enabled === 0 || group.enabled === false) return res.status(409).json({ error: 'API source is disabled.' });
|
||||
const requests = req.params.requestId ? group.requests.filter(function (request) { return Number(request.id) === Number(req.params.requestId); }) : group.requests;
|
||||
if (!requests.length) return res.status(404).send('API request not found');
|
||||
for (const request of requests) { if (request.enabled) await enqueue(request, group, getAuditUserId(req)); }
|
||||
const tasks = [];
|
||||
for (const request of requests) { if (request.enabled) tasks.push(await enqueue(request, group, getAuditUserId(req))); }
|
||||
if (req.params.requestId && req.get('Accept') === 'application/json') {
|
||||
if (!tasks.length) return res.status(409).json({ error: 'API request is disabled.' });
|
||||
return res.status(202).json({
|
||||
taskId: tasks[0].id,
|
||||
stateUrl: base + '/' + group.id + '/requests/' + Number(req.params.requestId) + '/state',
|
||||
message: 'Refreshing saved API request. Unsaved changes are kept.'
|
||||
});
|
||||
}
|
||||
res.redirect(base + '/' + group.id + '/edit?message=' + encodeURIComponent('Enabled API request refreshes queued.'));
|
||||
} catch (error) { next(error); }
|
||||
}
|
||||
app.post(base + '/:id/refresh', requirePermission('api-sources.allow'), refresh);
|
||||
app.post(base + '/:id/requests/:requestId/refresh', requirePermission('api-sources.allow'), refresh);
|
||||
|
||||
app.get(base + '/:id/requests/:requestId/state', requirePermission('api-sources.allow'), async function (req, res, next) {
|
||||
res.set('Cache-Control', 'no-store');
|
||||
try {
|
||||
const taskId = Number(req.query.refresh_task_id);
|
||||
if (!Number.isSafeInteger(taskId) || taskId <= 0) return res.status(400).json({ error: 'Missing refresh task id.' });
|
||||
const [requests] = await pool.query('SELECT id FROM i_api_sources WHERE id = ? AND auth_source_id = ?', [Number(req.params.requestId), Number(req.params.id)]);
|
||||
if (!requests.length) return res.status(404).json({ error: 'API request not found.' });
|
||||
const task = await dataSourceTasks.getTaskStatusById(taskId);
|
||||
if (!task || task.key !== 'api-source-refresh:' + Number(req.params.requestId)) return res.status(404).json({ error: 'Refresh task not found.' });
|
||||
res.json(task);
|
||||
} catch (error) { next(error); }
|
||||
});
|
||||
|
||||
app.post(base + '/:id/delete', requirePermission('api-sources.delete'), async function (req, res, next) {
|
||||
const connection = await pool.getConnection();
|
||||
try {
|
||||
|
||||
Reference in new issue
Block a user