mirror of
https://github.com/getgrav/grav-plugin-admin.git
synced 2026-03-01 10:01:24 +01:00
fixes for scheduler-webhook plugin
Signed-off-by: Andy Miller <rhuk@mac.com>
This commit is contained in:
101
themes/grav/js/scheduler-admin.js
vendored
101
themes/grav/js/scheduler-admin.js
vendored
@@ -6,99 +6,20 @@
|
||||
(function() {
|
||||
'use strict';
|
||||
|
||||
// Wait for DOM to be ready
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
// Check if we're on the scheduler config page
|
||||
const healthStatusEl = document.getElementById('scheduler-health-status');
|
||||
const triggersEl = document.getElementById('scheduler-triggers');
|
||||
|
||||
if (!healthStatusEl && !triggersEl) {
|
||||
return; // Not on scheduler page
|
||||
}
|
||||
|
||||
// Load scheduler status
|
||||
loadSchedulerStatus();
|
||||
|
||||
// Refresh every 30 seconds if page is visible
|
||||
let refreshInterval = setInterval(function() {
|
||||
if (!document.hidden) {
|
||||
loadSchedulerStatus();
|
||||
}
|
||||
}, 30000);
|
||||
|
||||
// Clean up interval when leaving page
|
||||
window.addEventListener('beforeunload', function() {
|
||||
clearInterval(refreshInterval);
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* Load scheduler status via AJAX
|
||||
*/
|
||||
function loadSchedulerStatus() {
|
||||
const healthStatusEl = document.getElementById('scheduler-health-status');
|
||||
const triggersEl = document.getElementById('scheduler-triggers');
|
||||
|
||||
// Get the admin base URL
|
||||
const adminBase = GravAdmin ? GravAdmin.config.base_url_relative : '/admin';
|
||||
const nonce = GravAdmin ? GravAdmin.config.admin_nonce : '';
|
||||
|
||||
// Make AJAX request
|
||||
fetch(adminBase + '/scheduler/status', {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'Accept': 'application/json',
|
||||
'X-Requested-With': 'XMLHttpRequest',
|
||||
'Admin-Nonce': nonce
|
||||
},
|
||||
credentials: 'same-origin'
|
||||
})
|
||||
.then(response => {
|
||||
if (!response.ok) {
|
||||
throw new Error('Network response was not ok');
|
||||
}
|
||||
return response.json();
|
||||
})
|
||||
.then(data => {
|
||||
// Update health status
|
||||
if (healthStatusEl && data.health) {
|
||||
healthStatusEl.innerHTML = data.health;
|
||||
healthStatusEl.classList.remove('text-muted');
|
||||
}
|
||||
|
||||
// Update triggers
|
||||
if (triggersEl && data.triggers) {
|
||||
triggersEl.innerHTML = data.triggers;
|
||||
triggersEl.classList.remove('text-muted');
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('Error loading scheduler status:', error);
|
||||
|
||||
// Show error message
|
||||
if (healthStatusEl) {
|
||||
healthStatusEl.innerHTML = '<div class="alert alert-danger">Failed to load status</div>';
|
||||
}
|
||||
if (triggersEl) {
|
||||
triggersEl.innerHTML = '<div class="alert alert-danger">Failed to load triggers</div>';
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Test scheduler webhook
|
||||
*/
|
||||
window.testSchedulerWebhook = function() {
|
||||
const token = document.querySelector('input[name="data[scheduler][modern][webhook][token]"]')?.value;
|
||||
|
||||
|
||||
if (!token) {
|
||||
alert('Please set a webhook token first');
|
||||
return;
|
||||
}
|
||||
|
||||
const siteUrl = window.location.origin;
|
||||
const webhookUrl = siteUrl + '/scheduler/webhook';
|
||||
|
||||
|
||||
const baseUrl = window.schedulerBaseUrl || window.location.origin;
|
||||
const webhookUrl = baseUrl + '/scheduler/webhook';
|
||||
|
||||
fetch(webhookUrl, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
@@ -118,27 +39,27 @@
|
||||
alert('Webhook test error: ' + error.message);
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Generate secure token
|
||||
*/
|
||||
window.generateSchedulerToken = function() {
|
||||
const tokenField = document.querySelector('input[name="data[scheduler][modern][webhook][token]"]');
|
||||
|
||||
|
||||
if (!tokenField) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// Generate random token (32 bytes = 64 hex chars)
|
||||
const array = new Uint8Array(32);
|
||||
crypto.getRandomValues(array);
|
||||
const token = Array.from(array, byte => byte.toString(16).padStart(2, '0')).join('');
|
||||
|
||||
|
||||
tokenField.value = token;
|
||||
|
||||
|
||||
// Trigger change event
|
||||
const event = new Event('change', { bubbles: true });
|
||||
tokenField.dispatchEvent(event);
|
||||
};
|
||||
|
||||
|
||||
})();
|
||||
@@ -6,6 +6,12 @@
|
||||
{% set user = grav.scheduler.whoami() %}
|
||||
{% set webhook_enabled = grav.scheduler.isWebhookEnabled() %}
|
||||
{% set active_triggers = grav.scheduler.getActiveTriggers() %}
|
||||
{% set health_data = grav.scheduler.getHealthStatus() %}
|
||||
|
||||
<script>
|
||||
window.schedulerHealthData = {{ health_data|json_encode|raw }};
|
||||
window.schedulerBaseUrl = '{{ grav.base_url_absolute }}';
|
||||
</script>
|
||||
|
||||
{% if active_triggers|length > 0 %}
|
||||
{# We have at least one active trigger method #}
|
||||
|
||||
Reference in New Issue
Block a user