mirror of
https://github.com/hak5/nano-tetra-modules.git
synced 2025-10-29 16:58:09 +00:00
Add OpenVPNConnect Module (#11)
This commit is contained in:
committed by
Sebastian Kinne
parent
abe6d3060c
commit
194526857f
222
OpenVPNConnect/js/module.js
Normal file
222
OpenVPNConnect/js/module.js
Normal file
@@ -0,0 +1,222 @@
|
||||
/* 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.
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
}]);
|
||||
Reference in New Issue
Block a user