1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00
jellyfin-web/src/controllers/dashboard/apikeys.js

90 lines
3.4 KiB
JavaScript
Raw Normal View History

import datetime from 'datetime';
import loading from 'loading';
import dom from 'dom';
import globalize from 'globalize';
import 'emby-button';
/* eslint-disable indent */
2018-10-23 01:05:09 +03:00
function revoke(page, key) {
import('confirm').then(({default: confirm}) => {
2020-05-04 12:44:12 +02:00
confirm(globalize.translate('MessageConfirmRevokeApiKey'), globalize.translate('HeaderConfirmRevokeApiKey')).then(function () {
2019-06-10 15:25:07 -07:00
loading.show();
ApiClient.ajax({
2020-05-04 12:44:12 +02:00
type: 'DELETE',
url: ApiClient.getUrl('Auth/Keys/' + key)
}).then(function () {
2019-06-10 15:25:07 -07:00
loadData(page);
});
});
});
2018-10-23 01:05:09 +03:00
}
function renderKeys(page, keys) {
2020-07-11 11:56:57 +01:00
const rows = keys.map(function (item) {
let html = '';
html += '<tr class="detailTableBodyRow detailTableBodyRow-shaded">';
html += '<td class="detailTableBodyCell">';
2020-05-04 12:44:12 +02:00
html += '<button type="button" is="emby-button" data-token="' + item.AccessToken + '" class="raised raised-mini btnRevoke" data-mini="true" title="' + globalize.translate('ButtonRevoke') + '" style="margin:0;">' + globalize.translate('ButtonRevoke') + '</button>';
html += '</td>';
html += '<td class="detailTableBodyCell" style="vertical-align:middle;">';
html += item.AccessToken;
2020-05-04 12:44:12 +02:00
html += '</td>';
html += '<td class="detailTableBodyCell" style="vertical-align:middle;">';
2020-05-04 12:44:12 +02:00
html += item.AppName || '';
html += '</td>';
html += '<td class="detailTableBodyCell" style="vertical-align:middle;">';
2020-07-11 11:56:57 +01:00
const date = datetime.parseISO8601Date(item.DateCreated, true);
2020-05-04 12:44:12 +02:00
html += datetime.toLocaleDateString(date) + ' ' + datetime.getDisplayTime(date);
html += '</td>';
return html += '</tr>';
}).join('');
page.querySelector('.resultBody').innerHTML = rows;
2019-06-10 15:25:07 -07:00
loading.hide();
2018-10-23 01:05:09 +03:00
}
function loadData(page) {
2019-06-10 15:25:07 -07:00
loading.show();
2020-05-04 12:44:12 +02:00
ApiClient.getJSON(ApiClient.getUrl('Auth/Keys')).then(function (result) {
2019-06-10 15:25:07 -07:00
renderKeys(page, result.Items);
});
2018-10-23 01:05:09 +03:00
}
function showNewKeyPrompt(page) {
import('prompt').then(({default: prompt}) => {
2018-10-23 01:05:09 +03:00
prompt({
2020-05-04 12:44:12 +02:00
title: globalize.translate('HeaderNewApiKey'),
label: globalize.translate('LabelAppName'),
description: globalize.translate('LabelAppNameExample')
}).then(function (value) {
2018-10-23 01:05:09 +03:00
ApiClient.ajax({
2020-05-04 12:44:12 +02:00
type: 'POST',
url: ApiClient.getUrl('Auth/Keys', {
2018-10-23 01:05:09 +03:00
App: value
})
}).then(function () {
loadData(page);
});
});
});
2018-10-23 01:05:09 +03:00
}
2020-05-04 12:44:12 +02:00
pageIdOn('pageinit', 'apiKeysPage', function () {
2020-07-11 11:56:57 +01:00
const page = this;
2020-05-04 12:44:12 +02:00
page.querySelector('.btnNewKey').addEventListener('click', function () {
showNewKeyPrompt(page);
2019-06-10 15:25:07 -07:00
});
2020-05-04 12:44:12 +02:00
page.querySelector('.tblApiKeys').addEventListener('click', function (e) {
2020-07-11 11:56:57 +01:00
const btnRevoke = dom.parentWithClass(e.target, 'btnRevoke');
if (btnRevoke) {
2020-05-04 12:44:12 +02:00
revoke(page, btnRevoke.getAttribute('data-token'));
}
2019-06-10 15:25:07 -07:00
});
});
2020-05-04 12:44:12 +02:00
pageIdOn('pagebeforeshow', 'apiKeysPage', function () {
2019-06-10 15:25:07 -07:00
loadData(this);
});
/* eslint-enable indent */