Timotej Lazar
3c25cbe88a
Custom keys are created by admin and specify networks directly, bypassing AD permissions. They are intended to join managed devices into networks where users are not allowed to create keys themselves. Also comprehend a set directly.
93 lines
2.8 KiB
JavaScript
93 lines
2.8 KiB
JavaScript
function delKey(key) {
|
|
fetch('del', {
|
|
credentials: 'include',
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify({ pubkey: key })
|
|
})
|
|
.then(response => {
|
|
if (!response.ok)
|
|
throw new Error('deleting key failed');
|
|
return response.text();
|
|
})
|
|
.then(data => {
|
|
fetchKeys();
|
|
})
|
|
.catch(error => console.error(error));
|
|
}
|
|
|
|
function fetchKeys() {
|
|
fetch(endpoint, {
|
|
credentials: 'include'
|
|
})
|
|
.then(response => {
|
|
if (!response.ok)
|
|
throw new Error('fetching keys failed');
|
|
return response.json();
|
|
})
|
|
.then(data => {
|
|
update(Object.values(data));
|
|
})
|
|
.catch(error => console.error(error));
|
|
}
|
|
|
|
window.addEventListener('load', fetchKeys);
|
|
|
|
const form = document.querySelector('form#request');
|
|
form.addEventListener('submit', event => {
|
|
event.preventDefault();
|
|
|
|
const inputs = Array.from(document.querySelectorAll('form input'));
|
|
const settings = document.querySelector('section#settings');
|
|
const submit = document.querySelector('button#submit');
|
|
|
|
const key = wireguard.generateKeypair();
|
|
const options = Object.fromEntries(inputs.map(e => [e.name, e.type === 'checkbox' ? e.checked : e.value]));
|
|
const networks = Array.from(document.querySelectorAll('select#networks option:checked')).map(e => e.value);
|
|
|
|
submit.innerHTML = 'Obdelovanje…';
|
|
submit.disabled = true;
|
|
fetch('new', {
|
|
credentials: 'include',
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify({
|
|
pubkey: key.publicKey,
|
|
options: options,
|
|
networks: networks,
|
|
})
|
|
})
|
|
.then(response => {
|
|
if (!response.ok) {
|
|
response.text().then(text => {
|
|
settings.innerHTML = response.status + ' ' + response.statusText + ': ' + text;
|
|
});
|
|
} else {
|
|
return response.text();
|
|
}
|
|
})
|
|
.then(text => {
|
|
const config = text.replace(/PrivateKey = .*/, "PrivateKey = "+key.privateKey).trim();
|
|
document.querySelector('code#config').innerHTML = config;
|
|
|
|
const blob = new Blob([config], { type: 'text/plain;charset=utf-8' });
|
|
const link = document.getElementById('download');
|
|
link.download = 'wg-fri.conf';
|
|
link.href = window.URL.createObjectURL(blob);
|
|
|
|
const qr = qrcode(0, 'L');
|
|
qr.addData(config.replace(/#.*\n/g, ''));
|
|
qr.make();
|
|
document.getElementById('qr').innerHTML = qr.createSvgTag(3);
|
|
|
|
fetchKeys();
|
|
})
|
|
.catch(error => {
|
|
settings.innerHTML = error;
|
|
})
|
|
.finally(() => {
|
|
form.style.display = 'none';
|
|
settings.style.display = 'unset';
|
|
});
|
|
});
|