2018-12-28 23:45:33 -05:00

537 lines
13 KiB
JavaScript
Executable File

registerController('PapersController', ['$api', '$scope', '$sce', '$http', function($api, $scope, $sce, $http) {
$scope.certKeyType = "tls_ssl";
$scope.certKeyComment = "";
$scope.certBitSize = "2048";
$scope.certDaysValid = "365";
$scope.certSigAlgo = "sha256";
$scope.certSANs = "";
$scope.certKeyName = "";
$scope.modifyCertInfo = false;
$scope.certInfoCountry = "";
$scope.certInfoState = "";
$scope.certInfoLocality = "";
$scope.certInfoOrganization = "";
$scope.certInfoSection = "";
$scope.certInfoCN = "";
$scope.certEncryptKeysBool = false;
$scope.certEncryptAlgo = "aes256";
$scope.certEncryptPassword = "";
$scope.certExportPKCS12 = false;
$scope.certEncryptPKCS12Algo = "aes256";
$scope.certContainerPassword = "";
$scope.certificates = "";
$scope.SSLStatus = ['Loading...'];
$scope.showCertThrobber = false;
$scope.showBuildThrobber = false;
$scope.showRemoveSSLButton = true;
$scope.showUnSSLThrobber = false;
$scope.logs = "";
$scope.changelogs = "";
$scope.currentLogTitle = "";
$scope.currentLogData = "";
$scope.dependsInstalled = true;
$scope.dependsProcessing = false;
$scope.selectedFiles = [];
$scope.uploading = false;
$scope.selectedKey = '';
$scope.certDecryptPassword = '';
$scope.encrypting = false;
$scope.decrypting = false;
$scope.viewCert = '';
$scope.selectedCert = '';
$scope.loadingCert = false;
$scope.checkDepends = (function(){
$api.request({
module: 'Papers',
action: 'checkDepends'
},function(response){
if (response.success === true) {
$scope.dependsInstalled = true;
} else {
$scope.dependsInstalled = false;
}
});
});
$scope.installDepends = (function(){
$scope.dependsProcessing = true;
$api.request({
module: 'Papers',
action: 'installDepends'
},function(response){
$scope.checkDepends();
if (response.success === false) {
alert("Failed to install dependencies. Make sure you are connected to the internet.");
}
$scope.dependsProcessing = false;
});
});
$scope.removeDepends = (function(){
$scope.dependsProcessing = true;
$api.request({
module: 'Papers',
action: 'removeDepends'
},function(response){
$scope.checkDepends();
$scope.dependsProcessing = false;
});
});
$scope.buildCertificate = (function() {
var params = {};
if ($scope.certKeyName != ''){
params['keyName'] = $scope.certKeyName;
} else {
alert("You must enter a name for the keys!");
return;
}
params['bitSize'] = $scope.certBitSize;
if ($scope.certKeyType == "ssh") {
if ($scope.certEncryptKeysBool) {
if (!$scope.certEncryptPassword) {
alert("You must enter a password for the private key");
return;
}
params['pass'] = $scope.certEncryptPassword;
}
if ($scope.certKeyComment != "") {
params['comment'] = $scope.certKeyComment;
}
$scope.showBuildThrobber = true;
$api.request({
module: 'Papers',
action: 'genSSHKeys',
parameters: params
},function(response){
$scope.getLogs();
$scope.showBuildThrobber = false;
$scope.loadCertificates();
$api.reloadNavbar();
});
} else if ($scope.certKeyType == "tls_ssl") {
params['sigalgo'] = $scope.certSigAlgo;
if ($scope.certInfoCountry != ''){
params['country'] = $scope.certInfoCountry;
}
if ($scope.certInfoState != '') {
params['state'] = $scope.certInfoState;
}
if ($scope.certInfoLocality != ''){
params['city'] = $scope.certInfoLocality;
}
if ($scope.certInfoOrganization != ''){
params['organization'] = $scope.certInfoOrganization;
}
if ($scope.certInfoSection != ''){
params['section'] = $scope.certInfoSection;
}
if ($scope.certInfoCN != ''){
params['commonName'] = $scope.certInfoCN;
}
if ($scope.certDaysValid != ''){
params['days'] = $scope.certDaysValid;
}
if ($scope.certSANs != '') {
params['sans'] = $scope.certSANs;
}
if ($scope.certEncryptKeysBool === true) {
params['encrypt'] = "";
params['algo'] = $scope.certEncryptAlgo;
if (!$scope.certEncryptPassword) {
alert("You must set a password for the private key!");
return;
}
params['pkey_pass'] = $scope.certEncryptPassword;
}
if ($scope.certExportPKCS12 === true) {
params['container'] = "pkcs12";
params['c_algo'] = $scope.certEncryptPKCS12Algo;
if (!$scope.certContainerPassword) {
alert("You must enter a password for the exported container!");
return;
}
params['c_pass'] = $scope.certContainerPassword;
}
$scope.showBuildThrobber = true;
$api.request({
module: 'Papers',
action: 'buildCert',
parameters: params
},function(response) {
$scope.certKeyName = '';
$scope.getLogs();
$scope.showBuildThrobber = false;
$scope.loadCertificates();
$api.reloadNavbar();
});
}
});
$scope.loadCertProps = (function(cert){
$scope.loadingCert = true;
$scope.viewCert = '';
$scope.selectedCert = cert;
$api.request({
module: 'Papers',
action: 'loadCertProps',
certName: cert
},function(response){
$scope.loadingCert = false;
if (response === false) {
$('#viewCert').modal('hide');
return;
}
$scope.viewCert = response.data;
});
});
$scope.selectKey = (function(key, type) {
$scope.certEncryptAlgo = "aes256";
$scope.certEncryptPassword = '';
$scope.selectedKey = key;
$scope.selectedKeyType = type;
});
$scope.encryptKey = (function(name, type, algo, pass) {
if (pass.length == 0) {
return;
}
$scope.encrypting = true;
$api.request({
module: 'Papers',
action: 'encryptKey',
keyName: name,
keyType: type,
keyAlgo: algo,
keyPass: pass
},function(response){
$scope.encrypting = false;
$scope.certEncryptPassword = '';
if (response.success === false) {
alert("Failed to encrypt key. Check the logs for more info.");
$scope.getLogs();
return;
}
$scope.loadCertificates();
$('#encryptModal').modal('hide');
});
});
$scope.decryptKey = (function(name, type, pass) {
if (pass.length == 0) {
return;
}
$scope.decrypting = true;
$api.request({
module: 'Papers',
action: 'decryptKey',
keyName: name,
keyType: type,
keyPass: pass
},function(response){
$scope.decrypting = false;
$scope.certDecryptPassword = '';
if (response.success === false) {
alert("Failed to decrypt key. Ensure you have entered the password correctly.");
$scope.getLogs();
return;
}
$scope.loadCertificates();
$('#decryptModal').modal('hide');
});
});
$scope.clearForm = (function() {
$scope.certKeyType = "tls_ssl";
$scope.certDaysValid = "365";
$scope.certBitSize = "2048";
$scope.certSigAlgo = "sha256";
$scope.certSANs = "";
$scope.certKeyName = "";
$scope.certInfoCountry = "";
$scope.certInfoState = "";
$scope.certInfoLocality = "";
$scope.certInfoOrganization = "";
$scope.certInfoSection = "";
$scope.certInfoCN = "";
$scope.certEncryptKeysBool = false;
$scope.certEncryptAlgo = "aes256";
$scope.certEncryptPassword = "";
$scope.certExportPKCS12 = false;
$scope.certEncryptPKCS12Algo = "aes256";
$scope.certContainerPassword = "";
});
$scope.loadCertificates = (function() {
$api.request({
module: 'Papers',
action: 'loadCertificates'
},function(response){
if (response.success === true) {
// Display certificate information
$scope.certificates = response.data;
} else {
// Display error
console.log("Failed to load certificates.");
}
});
});
$scope.downloadKeys = (function(name,type) {
$scope.showCertThrobber = true;
$api.request({
module: 'Papers',
action: 'downloadKeys',
parameters: {name,type}
},function(response){
$scope.showCertThrobber = false;
if (response.success === true) {
window.location = '/api/?download=' + response.data;
} else {
console.log(response.message);
}
// Clear the download archive to keep things clean
//$scope.clearDownloadArchive();
});
});
$scope.clearDownloadArchive = (function(){
$api.request({
module: 'Papers',
action: 'clearDownloadArchive'
},function(response) {
if (response.success === false) {
console.log(response.message);
}
});
});
$scope.deleteKeys = (function(cert,type) {
if (confirm("Confirm key deletion by pressing OK") == false) {return;}
$scope.showCertThrobber = true;
$api.request({
module: 'Papers',
action: 'removeCertificate',
params: {cert,type}
},function(response){
$scope.showCertThrobber = false;
$scope.getLogs();
if (response.success === true) {
$scope.loadCertificates();
}
});
});
$scope.securePineapple = (function(cert,type) {
$scope.showCertThrobber = true;
$api.request({
module: 'Papers',
action: 'securePineapple',
params: {cert,type}
},function(response) {
$scope.showCertThrobber = false;
if (response.error === "HTTP Error") {
// Redirect if key type is TLS/SSL
if (type == "TLS/SSL") {
$scope.redirect("https");
}
} else {
// Alert error
}
$scope.loadCertificates();
});
});
$scope.revokeSSHKey = (function(name){
$api.request({
module: 'Papers',
action: 'revokeSSHKey',
key: name
},function(response) {
$scope.loadCertificates();
});
});
$scope.redirect = (function(proto){
loc = window.location.href.split(":");
if (loc[0] == proto) {
alert("Success! Refreshing your browser now!");
window.location.reload();
} else {
loc[0] = proto;
alert("Success! Redirecting to " + loc.join(":") + "!");
window.location = loc.join(":");
}
});
$scope.unSSLPineapple = (function(){
$scope.showRemoveSSLButton = false;
$scope.showUnSSLThrobber = true;
$api.request({
module: 'Papers',
action: 'unSSLPineapple'
},function(response){
$scope.showUnSSLThrobber = false;
$scope.showRemoveSSLButton = true;
$scope.refresh();
if (response.error === "HTTP Error") {
$scope.redirect("http");
} else {
}
});
});
$scope.getNginxSSLCerts = (function(){
$api.request({
module: 'Papers',
action: 'getNginxSSLCerts'
},function(response){
if (response.success === true) {
$scope.SSLStatus = response.data;
} else {
$scope.SSLStatus = response.message;
}
});
});
$scope.getLogs = (function(){
$api.request({
module: 'Papers',
action: 'getLogs',
type: 'error'
},function(response){
$scope.logs = response.data;
});
});
$scope.getChangeLogs = (function(){
$api.request({
module: 'Papers',
action: 'getLogs',
type: 'changelog'
},function(response){
$scope.changelogs = response.data;
});
});
$scope.readLog = (function(log,type){
$scope.currentLogTitle = log;
$api.request({
module: 'Papers',
action: 'readLog',
parameters: log,
type: type
},function(response){
console.log(response);
if (response.success === true) {
$scope.currentLogData = $sce.trustAsHtml(response.data);
}
});
});
$scope.deleteLog = (function(log){
$api.request({
module: 'Papers',
action: 'deleteLog',
parameters: log
},function(response){
$scope.getLogs();
if (response === false) {
alert(response.message);
}
});
});
$scope.refresh = (function(){
$scope.getLogs();
$scope.getChangeLogs();
$scope.clearDownloadArchive();
$scope.getNginxSSLCerts();
$scope.loadCertificates();
});
// Upload functions
$scope.setSelectedFiles = (function(){
files = document.getElementById("selectedFiles").files;
for (var x = 0; x < files.length; x++) {
$scope.selectedFiles.push(files[x]);
}
});
$scope.removeSelectedFile = (function(file){
var x = $scope.selectedFiles.length;
while (x--) {
if ($scope.selectedFiles[x] === file) {
$scope.selectedFiles.splice(x,1);
}
}
});
$scope.uploadFile = (function(){
$scope.uploading = true;
var fd = new FormData();
for (x = 0; x < $scope.selectedFiles.length; x++) {
fd.append($scope.selectedFiles[x].name, $scope.selectedFiles[x]);
}
$http.post("/modules/Papers/api/module.php", fd, {
transformRequest: angular.identity,
headers: {'Content-Type': undefined}
}).then(function(response) {
for (var key in response) {
if (response.hasOwnProperty(key)) {
if (response.key == "Failed") {
alert("Failed to upload " + key);
}
}
}
$scope.selectedFiles = [];
$scope.refresh();
$scope.uploading = false;
});
});
$scope.init = (function(){
$api.request({
module: 'Papers',
action: 'init'
},function(response){
if (response.success == false) {
if (response.message != '') {
$scope.getLogs();
} else {
alert(response.message);
}
}
});
});
// Init
$scope.init();
$scope.checkDepends();
$scope.refresh();
}])