You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
181 lines
4.6 KiB
JavaScript
181 lines
4.6 KiB
JavaScript
'use strict';
|
|
|
|
define('admin/settings/api', ['settings', 'clipboard', 'bootbox', 'benchpress', 'api', 'alerts'], function (settings, clipboard, bootbox, Benchpress, api, alerts) {
|
|
const ACP = {};
|
|
|
|
ACP.init = function () {
|
|
settings.load('core.api', $('.core-api-settings'));
|
|
$('#save').on('click', () => {
|
|
settings.save('core.api', $('.core-api-settings'));
|
|
});
|
|
|
|
// Click to copy
|
|
const copyEls = document.querySelectorAll('[data-component="acp/tokens"] [data-action="copy"]');
|
|
new clipboard(copyEls);
|
|
|
|
$('[data-action="create"]').on('click', handleTokenCreation);
|
|
|
|
handleActions();
|
|
};
|
|
|
|
function handleActions() {
|
|
const formEl = document.querySelector('#content form');
|
|
if (!formEl) {
|
|
return;
|
|
}
|
|
|
|
formEl.addEventListener('click', (e) => {
|
|
const subselector = e.target.closest('[data-action]');
|
|
if (subselector) {
|
|
const action = subselector.getAttribute('data-action');
|
|
|
|
switch (action) {
|
|
case 'edit':
|
|
handleTokenUpdate(subselector);
|
|
break;
|
|
|
|
case 'delete':
|
|
handleTokenDeletion(subselector);
|
|
break;
|
|
|
|
case 'roll':
|
|
handleTokenRolling(subselector);
|
|
break;
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
async function handleTokenCreation() {
|
|
const html = await Benchpress.render('admin/partials/edit-token-modal', {});
|
|
const parseForm = async function () {
|
|
const modal = this;
|
|
const formEl = this.get(0).querySelector('form');
|
|
const tokensTableBody = document.querySelector('[data-component="acp/tokens"] tbody');
|
|
const valid = formEl.reportValidity();
|
|
if (formEl && valid) {
|
|
const formData = new FormData(formEl);
|
|
const uid = formData.get('uid');
|
|
const description = formData.get('description');
|
|
|
|
try {
|
|
const tokenObj = await api.post('/admin/tokens', { uid, description });
|
|
if (!tokensTableBody) {
|
|
modal.modal('hide');
|
|
return ajaxify.refresh();
|
|
}
|
|
|
|
ajaxify.data.tokens.push(tokenObj);
|
|
const rowEl = (await app.parseAndTranslate(ajaxify.data.template.name, 'tokens', {
|
|
tokens: [tokenObj],
|
|
})).get(0);
|
|
|
|
tokensTableBody.append(rowEl);
|
|
$(rowEl).find('.timeago').timeago();
|
|
modal.modal('hide');
|
|
} catch (e) {
|
|
alerts.error(e);
|
|
}
|
|
}
|
|
|
|
return false;
|
|
};
|
|
|
|
bootbox.dialog({
|
|
title: '[[admin/settings/api:create-token]]',
|
|
message: html,
|
|
buttons: {
|
|
submit: {
|
|
label: '[[modules:bootbox.submit]]',
|
|
className: 'btn-primary',
|
|
callback: parseForm,
|
|
},
|
|
},
|
|
});
|
|
}
|
|
|
|
async function handleTokenUpdate(el) {
|
|
const rowEl = el.closest('[data-token]');
|
|
const token = rowEl.getAttribute('data-token');
|
|
const { uid, description } = await api.get(`/admin/tokens/${token}`);
|
|
const parseForm = async function () {
|
|
const modal = this;
|
|
const formEl = this.get(0).querySelector('form');
|
|
const valid = formEl.reportValidity();
|
|
if (formEl && valid) {
|
|
const formData = new FormData(formEl);
|
|
const uid = formData.get('uid');
|
|
const description = formData.get('description');
|
|
|
|
try {
|
|
const tokenObj = await api.put(`/admin/tokens/${token}`, { uid, description });
|
|
const newEl = (await app.parseAndTranslate(ajaxify.data.template.name, 'tokens', {
|
|
tokens: [tokenObj],
|
|
})).get(0);
|
|
|
|
rowEl.replaceWith(newEl);
|
|
$(newEl).find('.timeago').timeago();
|
|
modal.modal('hide');
|
|
} catch (e) {
|
|
alerts.error(e);
|
|
}
|
|
}
|
|
|
|
return false;
|
|
};
|
|
|
|
const html = await Benchpress.render('admin/partials/edit-token-modal', { uid, description });
|
|
bootbox.dialog({
|
|
title: '[[admin/settings/api:update-token]]',
|
|
message: html,
|
|
buttons: {
|
|
submit: {
|
|
label: '[[modules:bootbox.submit]]',
|
|
className: 'btn-primary',
|
|
callback: parseForm,
|
|
},
|
|
},
|
|
});
|
|
}
|
|
|
|
async function handleTokenDeletion(el) {
|
|
const rowEl = el.closest('[data-token]');
|
|
const token = rowEl.getAttribute('data-token');
|
|
|
|
bootbox.confirm('[[admin/settings/api:delete-confirm]]', async (ok) => {
|
|
if (ok) {
|
|
try {
|
|
await api.del(`/admin/tokens/${token}`);
|
|
} catch (e) {
|
|
alerts.error(e);
|
|
}
|
|
|
|
rowEl.remove();
|
|
}
|
|
});
|
|
}
|
|
|
|
async function handleTokenRolling(el) {
|
|
const rowEl = el.closest('[data-token]');
|
|
const token = rowEl.getAttribute('data-token');
|
|
|
|
bootbox.confirm('[[admin/settings/api:roll-confirm]]', async (ok) => {
|
|
if (ok) {
|
|
try {
|
|
const tokenObj = await api.post(`/admin/tokens/${token}/roll`);
|
|
const newEl = (await app.parseAndTranslate(ajaxify.data.template.name, 'tokens', {
|
|
tokens: [tokenObj],
|
|
})).get(0);
|
|
|
|
rowEl.replaceWith(newEl);
|
|
$(newEl).find('.timeago').timeago();
|
|
} catch (e) {
|
|
alerts.error(e);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
return ACP;
|
|
});
|