Next major version 2 with PHP 8.1, Symfony 6, Tabler UI, 2FA ... (#2902)
This commit is contained in:
80
assets/js/plugins/KimaiFetch.js
Normal file
80
assets/js/plugins/KimaiFetch.js
Normal file
@@ -0,0 +1,80 @@
|
||||
/*
|
||||
* This file is part of the Kimai time-tracking app.
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
/*!
|
||||
* [KIMAI] KimaiEscape: sanitize strings
|
||||
*/
|
||||
|
||||
import KimaiPlugin from "../KimaiPlugin";
|
||||
|
||||
export default class KimaiFetch extends KimaiPlugin {
|
||||
|
||||
getId() {
|
||||
return 'fetch';
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} url
|
||||
* @param {object} options
|
||||
* @returns {Promise<Response>}
|
||||
*/
|
||||
fetch(url, options = {}) {
|
||||
if (options.headers === undefined) {
|
||||
options.headers = new Headers();
|
||||
}
|
||||
options.headers.append('X-Requested-With', 'Kimai');
|
||||
|
||||
options = {...{
|
||||
redirect: 'follow',
|
||||
}, ...options};
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
fetch(url, options).then(response => {
|
||||
if (response.ok) {
|
||||
if (response.status === 201 && response.headers.has('x-modal-redirect')) {
|
||||
window.location = response.headers.get('x-modal-redirect');
|
||||
return;
|
||||
}
|
||||
|
||||
// "ok" is only in status code range of 2xx
|
||||
resolve(response);
|
||||
return;
|
||||
}
|
||||
|
||||
let stopPropagation = false;
|
||||
switch (response.status) {
|
||||
case 403: {
|
||||
if (response.headers.has('login-required')) {
|
||||
const loginUrl = this.getConfiguration('login').toString();
|
||||
/** @type {KimaiAlert} alert */
|
||||
const alert = this.getContainer().getPlugin('alert');
|
||||
alert.question(this.translate('login.required'), (result) => {
|
||||
if (result === true) {
|
||||
window.location.replace(loginUrl);
|
||||
}
|
||||
});
|
||||
stopPropagation = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
console.log('Some error occurred');
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!stopPropagation) {
|
||||
reject(response);
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
console.log('Error occurred while talking to Kimai backend', error);
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user