forked from Shiloh/githaven
8fe26fb314
This pattern comes of often during review, so let's fix it once and for all. Did not test, but changes are trivial enough imho.
221 lines
8.0 KiB
JavaScript
221 lines
8.0 KiB
JavaScript
import $ from 'jquery';
|
|
import {checkAppUrl} from '../common-global.js';
|
|
import {hideElem, showElem, toggleElem} from '../../utils/dom.js';
|
|
import {POST} from '../../modules/fetch.js';
|
|
|
|
const {appSubUrl} = window.config;
|
|
|
|
export function initAdminCommon() {
|
|
if (!$('.page-content.admin').length) return;
|
|
|
|
// check whether appUrl(ROOT_URL) is correct, if not, show an error message
|
|
checkAppUrl();
|
|
|
|
// New user
|
|
if ($('.admin.new.user').length > 0 || $('.admin.edit.user').length > 0) {
|
|
$('#login_type').on('change', function () {
|
|
if ($(this).val().substring(0, 1) === '0') {
|
|
$('#user_name').removeAttr('disabled');
|
|
$('#login_name').removeAttr('required');
|
|
hideElem($('.non-local'));
|
|
showElem($('.local'));
|
|
$('#user_name').trigger('focus');
|
|
|
|
if ($(this).data('password') === 'required') {
|
|
$('#password').attr('required', 'required');
|
|
}
|
|
} else {
|
|
if ($('.admin.edit.user').length > 0) {
|
|
$('#user_name').attr('disabled', 'disabled');
|
|
}
|
|
$('#login_name').attr('required', 'required');
|
|
showElem($('.non-local'));
|
|
hideElem($('.local'));
|
|
$('#login_name').trigger('focus');
|
|
|
|
$('#password').removeAttr('required');
|
|
}
|
|
});
|
|
}
|
|
|
|
function onSecurityProtocolChange() {
|
|
if ($('#security_protocol').val() > 0) {
|
|
showElem($('.has-tls'));
|
|
} else {
|
|
hideElem($('.has-tls'));
|
|
}
|
|
}
|
|
|
|
function onUsePagedSearchChange() {
|
|
if (document.getElementById('use_paged_search').checked) {
|
|
showElem('.search-page-size');
|
|
$('.search-page-size').find('input').attr('required', 'required');
|
|
} else {
|
|
hideElem('.search-page-size');
|
|
$('.search-page-size').find('input').removeAttr('required');
|
|
}
|
|
}
|
|
|
|
function onOAuth2Change(applyDefaultValues) {
|
|
hideElem($('.open_id_connect_auto_discovery_url, .oauth2_use_custom_url'));
|
|
$('.open_id_connect_auto_discovery_url input[required]').removeAttr('required');
|
|
|
|
const provider = $('#oauth2_provider').val();
|
|
switch (provider) {
|
|
case 'openidConnect':
|
|
$('.open_id_connect_auto_discovery_url input').attr('required', 'required');
|
|
showElem($('.open_id_connect_auto_discovery_url'));
|
|
break;
|
|
default:
|
|
if ($(`#${provider}_customURLSettings`).data('required')) {
|
|
$('#oauth2_use_custom_url').attr('checked', 'checked');
|
|
}
|
|
if ($(`#${provider}_customURLSettings`).data('available')) {
|
|
showElem($('.oauth2_use_custom_url'));
|
|
}
|
|
}
|
|
onOAuth2UseCustomURLChange(applyDefaultValues);
|
|
}
|
|
|
|
function onOAuth2UseCustomURLChange(applyDefaultValues) {
|
|
const provider = $('#oauth2_provider').val();
|
|
hideElem($('.oauth2_use_custom_url_field'));
|
|
$('.oauth2_use_custom_url_field input[required]').removeAttr('required');
|
|
|
|
if (document.getElementById('oauth2_use_custom_url')?.checked) {
|
|
for (const custom of ['token_url', 'auth_url', 'profile_url', 'email_url', 'tenant']) {
|
|
if (applyDefaultValues) {
|
|
$(`#oauth2_${custom}`).val($(`#${provider}_${custom}`).val());
|
|
}
|
|
if ($(`#${provider}_${custom}`).data('available')) {
|
|
$(`.oauth2_${custom} input`).attr('required', 'required');
|
|
showElem($(`.oauth2_${custom}`));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function onEnableLdapGroupsChange() {
|
|
toggleElem($('#ldap-group-options'), $('.js-ldap-group-toggle')[0].checked);
|
|
}
|
|
|
|
// New authentication
|
|
if ($('.admin.new.authentication').length > 0) {
|
|
$('#auth_type').on('change', function () {
|
|
hideElem($('.ldap, .dldap, .smtp, .pam, .oauth2, .has-tls, .search-page-size, .sspi'));
|
|
|
|
$('.ldap input[required], .binddnrequired input[required], .dldap input[required], .smtp input[required], .pam input[required], .oauth2 input[required], .has-tls input[required], .sspi input[required]').removeAttr('required');
|
|
$('.binddnrequired').removeClass('required');
|
|
|
|
const authType = $(this).val();
|
|
switch (authType) {
|
|
case '2': // LDAP
|
|
showElem($('.ldap'));
|
|
$('.binddnrequired input, .ldap div.required:not(.dldap) input').attr('required', 'required');
|
|
$('.binddnrequired').addClass('required');
|
|
break;
|
|
case '3': // SMTP
|
|
showElem($('.smtp'));
|
|
showElem($('.has-tls'));
|
|
$('.smtp div.required input, .has-tls').attr('required', 'required');
|
|
break;
|
|
case '4': // PAM
|
|
showElem($('.pam'));
|
|
$('.pam input').attr('required', 'required');
|
|
break;
|
|
case '5': // LDAP
|
|
showElem($('.dldap'));
|
|
$('.dldap div.required:not(.ldap) input').attr('required', 'required');
|
|
break;
|
|
case '6': // OAuth2
|
|
showElem($('.oauth2'));
|
|
$('.oauth2 div.required:not(.oauth2_use_custom_url,.oauth2_use_custom_url_field,.open_id_connect_auto_discovery_url) input').attr('required', 'required');
|
|
onOAuth2Change(true);
|
|
break;
|
|
case '7': // SSPI
|
|
showElem($('.sspi'));
|
|
$('.sspi div.required input').attr('required', 'required');
|
|
break;
|
|
}
|
|
if (authType === '2' || authType === '5') {
|
|
onSecurityProtocolChange();
|
|
onEnableLdapGroupsChange();
|
|
}
|
|
if (authType === '2') {
|
|
onUsePagedSearchChange();
|
|
}
|
|
});
|
|
$('#auth_type').trigger('change');
|
|
$('#security_protocol').on('change', onSecurityProtocolChange);
|
|
$('#use_paged_search').on('change', onUsePagedSearchChange);
|
|
$('#oauth2_provider').on('change', () => onOAuth2Change(true));
|
|
$('#oauth2_use_custom_url').on('change', () => onOAuth2UseCustomURLChange(true));
|
|
$('.js-ldap-group-toggle').on('change', onEnableLdapGroupsChange);
|
|
}
|
|
// Edit authentication
|
|
if ($('.admin.edit.authentication').length > 0) {
|
|
const authType = $('#auth_type').val();
|
|
if (authType === '2' || authType === '5') {
|
|
$('#security_protocol').on('change', onSecurityProtocolChange);
|
|
$('.js-ldap-group-toggle').on('change', onEnableLdapGroupsChange);
|
|
onEnableLdapGroupsChange();
|
|
if (authType === '2') {
|
|
$('#use_paged_search').on('change', onUsePagedSearchChange);
|
|
}
|
|
} else if (authType === '6') {
|
|
$('#oauth2_provider').on('change', () => onOAuth2Change(true));
|
|
$('#oauth2_use_custom_url').on('change', () => onOAuth2UseCustomURLChange(false));
|
|
onOAuth2Change(false);
|
|
}
|
|
}
|
|
|
|
if ($('.admin.authentication').length > 0) {
|
|
$('#auth_name').on('input', function () {
|
|
// appSubUrl is either empty or is a path that starts with `/` and doesn't have a trailing slash.
|
|
$('#oauth2-callback-url').text(`${window.location.origin}${appSubUrl}/user/oauth2/${encodeURIComponent($(this).val())}/callback`);
|
|
}).trigger('input');
|
|
}
|
|
|
|
// Notice
|
|
if ($('.admin.notice')) {
|
|
const $detailModal = $('#detail-modal');
|
|
|
|
// Attach view detail modals
|
|
$('.view-detail').on('click', function () {
|
|
$detailModal.find('.content pre').text($(this).parents('tr').find('.notice-description').text());
|
|
$detailModal.find('.sub.header').text($(this).parents('tr').find('relative-time').attr('title'));
|
|
$detailModal.modal('show');
|
|
return false;
|
|
});
|
|
|
|
// Select actions
|
|
const $checkboxes = $('.select.table .ui.checkbox');
|
|
$('.select.action').on('click', function () {
|
|
switch ($(this).data('action')) {
|
|
case 'select-all':
|
|
$checkboxes.checkbox('check');
|
|
break;
|
|
case 'deselect-all':
|
|
$checkboxes.checkbox('uncheck');
|
|
break;
|
|
case 'inverse':
|
|
$checkboxes.checkbox('toggle');
|
|
break;
|
|
}
|
|
});
|
|
$('#delete-selection').on('click', async function (e) {
|
|
e.preventDefault();
|
|
const $this = $(this);
|
|
$this.addClass('is-loading disabled');
|
|
const data = new FormData();
|
|
$checkboxes.each(function () {
|
|
if ($(this).checkbox('is checked')) {
|
|
data.append('ids[]', $(this).data('id'));
|
|
}
|
|
});
|
|
await POST($this.data('link'), {data});
|
|
window.location.href = $this.data('redirect');
|
|
});
|
|
}
|
|
}
|