You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.1 KiB
JavaScript
74 lines
2.1 KiB
JavaScript
$(function () {
|
|
var errorDiv = $('<div>').addClass('error-message');
|
|
|
|
function error(msg) {
|
|
$('h1').after(errorDiv.text(msg));
|
|
}
|
|
|
|
$('#has-password').change(function () {
|
|
$('#password, #save-online').prop('disabled', !this.checked);
|
|
});
|
|
|
|
$('#create-csr').click(function () {
|
|
var name = $('#name').val();
|
|
|
|
if (name.length === 0) {
|
|
error("Name can't be empty");
|
|
return;
|
|
}
|
|
|
|
if (!/^[A-Za-z0-9\-]+$/.test(name)) {
|
|
error("Only alphanumeric and - allowed in name");
|
|
return;
|
|
}
|
|
|
|
var user = $('#user-input').val();
|
|
|
|
var keys = forge.pki.rsa.generateKeyPair(1024);
|
|
var csr = forge.pki.createCertificationRequest();
|
|
var commonName = name + '.' + user;
|
|
|
|
csr.publicKey = keys.publicKey;
|
|
csr.setSubject([{
|
|
name: 'commonName',
|
|
value: commonName
|
|
}]);
|
|
csr.sign(keys.privateKey);
|
|
var csrPem = forge.pki.certificationRequestToPem(csr);
|
|
|
|
var newCertParams = {
|
|
csr: csrPem,
|
|
name: name
|
|
};
|
|
|
|
var keyPem = "";
|
|
|
|
if ($('#has-password').prop('checked')) {
|
|
keyPem = forge.pki.encryptRsaPrivateKey(keys.privateKey, $('#password').val());
|
|
if ($('#save-online').prop('checked')) {
|
|
newCertParams.key = keyPem;
|
|
}
|
|
} else {
|
|
keyPem = forge.pki.privateKeyToPem(keys.privateKey);
|
|
}
|
|
|
|
$.post('/panel/certificates/new', newCertParams, function (data) {
|
|
if (data.success) {
|
|
var zip = new JSZip();
|
|
zip.file(commonName + '.key', keyPem);
|
|
|
|
for(var file in data.zip) {
|
|
if (!data.zip.hasOwnProperty(file)) continue;
|
|
zip.file(file, data.zip[file]);
|
|
}
|
|
|
|
var content = zip.generate({type:"blob"});
|
|
saveAs(content, commonName + '-vpn.zip');
|
|
location.href = '/panel';
|
|
} else {
|
|
error(data.error);
|
|
}
|
|
}, 'json');
|
|
});
|
|
});
|