222 lines
7.6 KiB
JavaScript
222 lines
7.6 KiB
JavaScript
/* Main AngularJS openVPNConnectController */
|
|
registerController('openVPNConnectController', ['$api', '$scope', '$timeout', '$window', '$http', function($api, $scope, $timeout, $window, $http) {
|
|
|
|
|
|
// Workspace Variables. Each value is populated by the form or displays to the form.
|
|
$scope.workspace = {config: "",
|
|
pass: "",
|
|
flags: "",
|
|
sharedconnection: false,
|
|
setupcontent: "",
|
|
outputcontent: "",
|
|
availablecerts: [],
|
|
uploadstatusLabel: "",
|
|
uploadstatus: ""};
|
|
|
|
/* Other variables used to display content or assist the dependency installation and file upload
|
|
functions
|
|
*/
|
|
$scope.content = "";
|
|
$scope.installLabel = "default";
|
|
$scope.installLabelText = "Checking..."
|
|
$scope.selectedFiles = [];
|
|
$scope.uploading = false;
|
|
|
|
// Call a function to install/uninstall dependencies for the module
|
|
$scope.handleDependencies = function(){
|
|
|
|
$scope.workspace.setupcontent = "Handling dependencies please wait...";
|
|
|
|
$api.request({
|
|
module: 'OpenVPNConnect',
|
|
action: 'handleDependencies',
|
|
}, function(response) {
|
|
if (response.success === true) {
|
|
|
|
$scope.workspace.setupcontent = response.content;
|
|
|
|
checkDependencies();
|
|
|
|
$timeout(function() {$window.location.reload();}, 5000);
|
|
}
|
|
//console.log(response) //Log the response to the console, this is useful for debugging.
|
|
});
|
|
|
|
}
|
|
|
|
/* Checks the current status of the dependencies for the module and displays
|
|
it via the dependency install/uninstall button to the user.
|
|
This is checked each time the app is loaded or when the user
|
|
installs/uninstalls dependencies manually
|
|
*/
|
|
var checkDependencies = function(){
|
|
$api.request({
|
|
module: 'OpenVPNConnect',
|
|
action: 'checkDependencies',
|
|
}, function(response) {
|
|
if (response.success === true) {
|
|
$scope.installLabel = response.label;
|
|
$scope.installLabelText = response.text;
|
|
}
|
|
//console.log(response) //Log the response to the console, this is useful for debugging.
|
|
});
|
|
}
|
|
|
|
// Call the checkDependencies function on page load
|
|
checkDependencies();
|
|
|
|
/* Initializes module by creating necessary folder structures and scanning for uploaded certs
|
|
this function is called each time the app is loaded to make sure the module is set up correctly
|
|
*/
|
|
var initializeModule = function(){
|
|
$api.request({
|
|
module: 'OpenVPNConnect',
|
|
action: 'initializeModule',
|
|
}, function(response) {
|
|
if (response.success === true) {
|
|
$scope.workspace.setupcontent = response.content;
|
|
|
|
for(var i = 0; i <= response.certs.length - 1; i++){
|
|
$scope.workspace.availablecerts.push(response.certs[i].name);
|
|
}
|
|
}
|
|
//console.log(response) //Log the response to the console, this is useful for debugging.
|
|
});
|
|
}
|
|
|
|
// Call the initializeModule function on page load
|
|
initializeModule();
|
|
|
|
/* Just calls the initializeModule function to refresh the cert list when the
|
|
user clicks the drop down menu button
|
|
*/
|
|
$scope.refreshCertList = function(){
|
|
$scope.workspace.availablecerts = [];
|
|
initializeModule();
|
|
}
|
|
|
|
// Sets the current config to use for the VPN connection
|
|
$scope.setConfig = function(cert){
|
|
$scope.workspace.config = cert;
|
|
}
|
|
|
|
|
|
/* Calls the startVPN function, passes all the form params to the API to run the OpenVPN command
|
|
Users can pass a config, an option password, and optional command line flags to run with the
|
|
openvpn command line utility. Also the shared connection open lets the user share the
|
|
VPN connection with its clients
|
|
*/
|
|
$scope.startVPN = function() {
|
|
$api.request({
|
|
module: 'OpenVPNConnect',
|
|
action: 'startVPN',
|
|
data: [$scope.workspace.config,
|
|
$scope.workspace.pass,
|
|
$scope.workspace.flags,
|
|
$scope.workspace.sharedconnection]
|
|
}, function(response) {
|
|
if (response.success === true) {
|
|
$scope.workspace.outputcontent = response.content;
|
|
}
|
|
//console.log(response) //Log the response to the console, this is useful for debugging.
|
|
});
|
|
}
|
|
|
|
// This function calls the API to kill the openvpn process and stop the VPN
|
|
$scope.stopVPN = function() {
|
|
$api.request({
|
|
module: 'OpenVPNConnect',
|
|
action: 'stopVPN'
|
|
}, function(response) {
|
|
if (response.success === true) {
|
|
$scope.workspace.outputcontent = response.content;
|
|
}
|
|
//console.log(response) //Log the response to the console, this is useful for debugging.
|
|
});
|
|
}
|
|
|
|
//File Upload Code, the first two functions prep the files for upload in the modal
|
|
|
|
$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);
|
|
}
|
|
}
|
|
};
|
|
|
|
/* File upload function. Instaitates a FileReader object the makes a promise call to
|
|
doUpload once the async reader call is complete on each iteration
|
|
*/
|
|
$scope.uploadFile = function(){
|
|
|
|
$scope.uploading = true;
|
|
|
|
|
|
for (x = 0; x < $scope.selectedFiles.length; x++) {
|
|
|
|
var fileReader = new FileReader();
|
|
|
|
var fileName = $scope.selectedFiles[x].name;
|
|
|
|
var filesToUpload = $scope.selectedFiles.length;
|
|
|
|
readFile($scope.selectedFiles[x], fileName, filesToUpload);
|
|
|
|
}
|
|
};
|
|
|
|
|
|
// Read file function to handle a Promise for multiple file uploads using FilerReader
|
|
function readFile(file, file_name, files_to_upload){
|
|
return new Promise((resolve, reject) => {
|
|
var fr = new FileReader();
|
|
fr.onload = () => {
|
|
final_file = fr.result.split(',')[1]
|
|
resolve(doUpload(file_name, final_file, files_to_upload - 1));
|
|
};
|
|
fr.readAsDataURL(file);
|
|
});
|
|
}
|
|
|
|
|
|
/* Actually performs the upload request to the API. Passes the file name and a base64 encoded
|
|
file to be uploaded by the service
|
|
*/
|
|
var doUpload = function(file_name, file, files_to_upload){
|
|
|
|
$api.request({
|
|
module: 'OpenVPNConnect',
|
|
action: 'uploadFile',
|
|
file: [file_name,
|
|
file
|
|
]
|
|
}, function(response) {
|
|
|
|
if(response.success){
|
|
$scope.workspace.uploadstatusLabel = "Upload Success!";
|
|
$scope.workspace.uploadstatus = "success";
|
|
}else{
|
|
$scope.workspace.uploadstatusLabel = "One or more files failed to upload!";
|
|
$scope.workspace.uploadstatus = "danger";
|
|
}
|
|
|
|
if(files_to_upload === 0){
|
|
$scope.selectedFiles = [];
|
|
$scope.uploading = false;
|
|
}
|
|
|
|
//console.log(response) //Log the response to the console, this is useful for debugging.
|
|
});
|
|
|
|
};
|
|
|
|
}]); |