2026-04-02 17:48:27 +02:00
|
|
|
/**
|
|
|
|
|
* Helpdesk settings page — auth mode toggle and connection test.
|
|
|
|
|
*/
|
2026-04-02 21:05:54 +02:00
|
|
|
import { showAsyncFlash } from '/js/components/app-async-flash.js';
|
2026-04-02 17:48:27 +02:00
|
|
|
|
|
|
|
|
// Toggle OAuth2 vs Basic Auth field visibility
|
|
|
|
|
const authModeSelect = document.getElementById('auth_mode');
|
|
|
|
|
const basicFields = document.getElementById('helpdesk-basic-auth-fields');
|
|
|
|
|
const oauth2Fields = document.getElementById('helpdesk-oauth2-fields');
|
|
|
|
|
|
|
|
|
|
const toggleAuthFields = () => {
|
|
|
|
|
if (!authModeSelect || !basicFields || !oauth2Fields) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
const isOAuth2 = authModeSelect.value === 'oauth2';
|
|
|
|
|
basicFields.style.display = isOAuth2 ? 'none' : '';
|
|
|
|
|
oauth2Fields.style.display = isOAuth2 ? '' : 'none';
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if (authModeSelect) {
|
|
|
|
|
authModeSelect.addEventListener('change', toggleAuthFields);
|
|
|
|
|
toggleAuthFields();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Connection test button
|
|
|
|
|
const testButton = document.getElementById('helpdesk-test-connection-button');
|
|
|
|
|
|
2026-04-02 21:05:54 +02:00
|
|
|
if (testButton) {
|
2026-04-02 17:48:27 +02:00
|
|
|
testButton.addEventListener('click', async () => {
|
|
|
|
|
testButton.disabled = true;
|
2026-04-02 21:05:54 +02:00
|
|
|
testButton.setAttribute('aria-busy', 'true');
|
2026-04-02 17:48:27 +02:00
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
const csrfMeta = document.querySelector('meta[name="csrf-token"]');
|
|
|
|
|
const csrfInput = document.querySelector('input[name="csrf_token"]');
|
|
|
|
|
const csrfToken = csrfInput?.value || csrfMeta?.content || '';
|
|
|
|
|
|
|
|
|
|
const formData = new FormData();
|
|
|
|
|
if (csrfToken) {
|
|
|
|
|
formData.append('csrf_token', csrfToken);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const response = await fetch(
|
|
|
|
|
new URL('helpdesk/settings/test-connection-data', document.baseURI).href,
|
|
|
|
|
{
|
|
|
|
|
method: 'POST',
|
|
|
|
|
body: formData,
|
|
|
|
|
credentials: 'same-origin',
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
const data = await response.json();
|
|
|
|
|
|
|
|
|
|
if (data.ok) {
|
2026-04-02 21:05:54 +02:00
|
|
|
showAsyncFlash('success', data.message || 'Connection successful');
|
2026-04-02 17:48:27 +02:00
|
|
|
} else {
|
|
|
|
|
let msg = data.error || 'Connection failed';
|
|
|
|
|
if (data.debug?.http_code) {
|
|
|
|
|
msg += ' (HTTP ' + data.debug.http_code + ')';
|
|
|
|
|
}
|
2026-04-02 21:05:54 +02:00
|
|
|
showAsyncFlash('error', msg);
|
2026-04-02 17:48:27 +02:00
|
|
|
}
|
|
|
|
|
} catch {
|
2026-04-02 21:05:54 +02:00
|
|
|
showAsyncFlash('error', 'Connection failed');
|
2026-04-02 17:48:27 +02:00
|
|
|
} finally {
|
|
|
|
|
testButton.disabled = false;
|
2026-04-02 21:05:54 +02:00
|
|
|
testButton.removeAttribute('aria-busy');
|
2026-04-02 17:48:27 +02:00
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|