__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
/**
* @param {ArrayBuffer} buffer
*
* @return {string}
*/
const arrayBufferToBase64 = buffer => {
const bytes = new Uint8Array(buffer);
let string = '';
for (const byte of bytes) {
string += String.fromCharCode(byte);
}
return window.btoa(string);
};
/**
* @param {string} string
*
* @return {Uint8Array}
*/
const base64ToUint8Array = string => {
return Uint8Array.from(window.atob(string), char => char.charCodeAt(0));
};
/**
* @param {JQuery<HTMLElement>} $input
*
* @return {void}
*/
const handleCreation = $input => {
const $form = $input.parents('form');
$form.find('input[type=submit]').hide();
const creationOptionsJson = $input.attr('data-creation-options');
const creationOptions = JSON.parse(creationOptionsJson);
const publicKey = creationOptions;
publicKey.challenge = base64ToUint8Array(creationOptions.challenge);
publicKey.user.id = base64ToUint8Array(creationOptions.user.id);
if (creationOptions.excludeCredentials) {
const excludedCredentials = [];
for (let value of creationOptions.excludeCredentials) {
let excludedCredential = value;
excludedCredential.id = base64ToUint8Array(value.id);
excludedCredentials.push(excludedCredential);
}
publicKey.excludeCredentials = excludedCredentials;
}
// eslint-disable-next-line compat/compat
navigator.credentials.create({
publicKey: publicKey
}).then(credential => {
const credentialJson = JSON.stringify({
id: credential.id,
rawId: arrayBufferToBase64(credential.rawId),
type: credential.type,
response: {
clientDataJSON: arrayBufferToBase64(credential.response.clientDataJSON),
attestationObject: arrayBufferToBase64(credential.response.attestationObject)
}
});
$input.val(credentialJson);
$form.trigger('submit');
}).catch(error => Functions.ajaxShowMessage(error, false, 'error'));
};
/**
* @param {JQuery<HTMLElement>} $input
*
* @return {void}
*/
const handleRequest = $input => {
const $form = $input.parents('form');
$form.find('input[type=submit]').hide();
const requestOptionsJson = $input.attr('data-request-options');
const requestOptions = JSON.parse(requestOptionsJson);
const publicKey = requestOptions;
publicKey.challenge = base64ToUint8Array(requestOptions.challenge);
if (requestOptions.allowCredentials) {
const allowedCredentials = [];
for (let value of requestOptions.allowCredentials) {
let allowedCredential = value;
allowedCredential.id = base64ToUint8Array(value.id);
allowedCredentials.push(allowedCredential);
}
publicKey.allowCredentials = allowedCredentials;
}
// eslint-disable-next-line compat/compat
navigator.credentials.get({
publicKey: publicKey
}).then(credential => {
const credentialJson = JSON.stringify({
id: credential.id,
rawId: arrayBufferToBase64(credential.rawId),
type: credential.type,
response: {
authenticatorData: arrayBufferToBase64(credential.response.authenticatorData),
clientDataJSON: arrayBufferToBase64(credential.response.clientDataJSON),
signature: arrayBufferToBase64(credential.response.signature),
userHandle: arrayBufferToBase64(credential.response.userHandle)
}
});
$input.val(credentialJson);
$form.trigger('submit');
}).catch(error => Functions.ajaxShowMessage(error, false, 'error'));
};
AJAX.registerOnload('webauthn.js', function () {
if (!navigator.credentials || !navigator.credentials.create || !navigator.credentials.get || !window.PublicKeyCredential) {
Functions.ajaxShowMessage(Messages.webAuthnNotSupported, false, 'error');
return;
}
const $creationInput = $('#webauthn_creation_response');
if ($creationInput.length > 0) {
handleCreation($creationInput);
}
const $requestInput = $('#webauthn_request_response');
if ($requestInput.length > 0) {
handleRequest($requestInput);
}
});| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| codemirror | Folder | 0755 |
|
|
| database | Folder | 0755 |
|
|
| designer | Folder | 0755 |
|
|
| jqplot | Folder | 0755 |
|
|
| server | Folder | 0755 |
|
|
| setup | Folder | 0755 |
|
|
| table | Folder | 0755 |
|
|
| transformations | Folder | 0755 |
|
|
| ajax.js | File | 29.25 KB | 0644 |
|
| chart.js | File | 16.66 KB | 0644 |
|
| common.js | File | 4.42 KB | 0644 |
|
| config.js | File | 23.5 KB | 0644 |
|
| console.js | File | 48.39 KB | 0644 |
|
| cross_framing_protection.js | File | 405 B | 0644 |
|
| doclinks.js | File | 17.85 KB | 0644 |
|
| drag_drop_import.js | File | 12.14 KB | 0644 |
|
| error_report.js | File | 9.05 KB | 0644 |
|
| export.js | File | 30.6 KB | 0644 |
|
| export_output.js | File | 364 B | 0644 |
|
| functions.js | File | 144.6 KB | 0644 |
|
| gis_data_editor.js | File | 13.26 KB | 0644 |
|
| home.js | File | 5.15 KB | 0644 |
|
| import.js | File | 5.5 KB | 0644 |
|
| indexes.js | File | 26.33 KB | 0644 |
|
| jquery.sortable-table.js | File | 9.27 KB | 0644 |
|
| keyhandler.js | File | 2.01 KB | 0644 |
|
| makegrid.js | File | 79.11 KB | 0644 |
|
| menu_resizer.js | File | 5.59 KB | 0644 |
|
| multi_column_sort.js | File | 1.25 KB | 0644 |
|
| name-conflict-fixes.js | File | 43 B | 0644 |
|
| navigation.js | File | 50.62 KB | 0644 |
|
| normalization.js | File | 23.54 KB | 0644 |
|
| ol.js | File | 1.41 KB | 0644 |
|
| page_settings.js | File | 1.78 KB | 0644 |
|
| replication.js | File | 3.46 KB | 0644 |
|
| shortcuts_handler.js | File | 3.23 KB | 0644 |
|
| sql.js | File | 34.71 KB | 0644 |
|
| u2f.js | File | 2.87 KB | 0644 |
|
| webauthn.js | File | 3.86 KB | 0644 |
|