make Prettier

This commit is contained in:
AJ ONeal 2020-04-28 00:58:26 -06:00
parent ef34fefc39
commit 880da4d685
14 changed files with 786 additions and 682 deletions

18
.jshintrc Normal file
View File

@ -0,0 +1,18 @@
{ "node": true
, "browser": true
, "jquery": true
, "globals": { "angular": true, "Promise": true }
, "indent": 2
, "onevar": true
, "laxcomma": true
, "laxbreak": true
, "curly": true
, "nonbsp": true
, "eqeqeq": true
, "immed": true
, "undef": true
, "unused": true
, "latedef": true
}

7
.prettierrc Normal file
View File

@ -0,0 +1,7 @@
{
"bracketSpacing": true,
"printWidth": 120,
"tabWidth": 4,
"trailingComma": "none",
"useTabs": false
}

View File

@ -4,28 +4,33 @@
<title>Websock VPN Instrumentation</title> <title>Websock VPN Instrumentation</title>
</head> </head>
<body ng-app="vpnAdmin" ng-controller="vpnInstrumentationController"> <body ng-app="vpnAdmin" ng-controller="vpnInstrumentationController">
<div class="panel panel-default panel-primary"> <div class="panel panel-default panel-primary">
<div class="panel-heading">VPN Instrumentation</div> <div class="panel-heading">VPN Instrumentation</div>
<div class="panel-body"> <div class="panel-body">
<div class="panel panel-default panel-info"> <div class="panel panel-default panel-info">
<div class="panel-heading">Control Plane</div> <div class="panel-heading">Control Plane</div>
<div class="panel-body"> <div class="panel-body">
<div class="row">
<div class="row"> <!-- Auth --> <!-- Auth -->
<div class="col-lg-6"> <div class="col-lg-6">
<div class="input-group"> <div class="input-group">
<span class="input-group-btn"> <span class="input-group-btn">
<button class="btn btn-default" type="button" ng-click="startWebSocket()">Start WebSocket</button> <button class="btn btn-default" type="button" ng-click="startWebSocket()">
Start WebSocket
</button>
</span> </span>
<button class="btn btn-default" type="button" ng-class="conn == false && 'btn-danger' || 'btn-success'"> <button
class="btn btn-default"
type="button"
ng-class="conn == false && 'btn-danger' || 'btn-success'"
>
{[{ conn == false && 'False' || 'True' }]} {[{ conn == false && 'False' || 'True' }]}
</button> </button>
</div> </div>
</div> </div>
</div> </div>
<br> <br />
<div class="row"> <div class="row">
<div class="col-lg-6"> <div class="col-lg-6">
@ -33,7 +38,7 @@
<span class="input-group-btn"> <span class="input-group-btn">
<button class="btn btn-default" type="button">Auth</button> <button class="btn btn-default" type="button">Auth</button>
</span> </span>
<input type="text" class="form-control" placeholder="Enter auth data here"> <input type="text" class="form-control" placeholder="Enter auth data here" />
</div> </div>
</div> </div>
</div> </div>
@ -51,20 +56,34 @@
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> <link
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous"> rel="stylesheet"
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
crossorigin="anonymous"
/>
<link
rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css"
integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp"
crossorigin="anonymous"
/>
<script
src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"
integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
crossorigin="anonymous"
></script>
<script type="text/javascript"> <script type="text/javascript">
console.log("startup"); console.log("startup");
var vpnAdmin = angular.module('vpnAdmin',[]); var vpnAdmin = angular.module("vpnAdmin", []);
vpnAdmin.config(function ($interpolateProvider) { vpnAdmin.config(function ($interpolateProvider) {
console.log("vpnTest Config"); console.log("vpnTest Config");
$interpolateProvider.startSymbol('{[{'); $interpolateProvider.startSymbol("{[{");
$interpolateProvider.endSymbol('}]}'); $interpolateProvider.endSymbol("}]}");
}); });
vpnAdmin.controller('vpnInstrumentationController', function ($scope) { vpnAdmin.controller("vpnInstrumentationController", function ($scope) {
console.log("vpnInstrumentationController startup"); console.log("vpnInstrumentationController startup");
$scope.log_elements = []; $scope.log_elements = [];
@ -73,9 +92,9 @@ vpnAdmin.controller('vpnInstrumentationController', function ($scope) {
$scope.webSocketStatus = function () { $scope.webSocketStatus = function () {
if ($scope.conn == false) { if ($scope.conn == false) {
return "" return "";
}
} }
};
$scope.startWebSocket = function () { $scope.startWebSocket = function () {
console.log("Start webSocket {{$}}"); console.log("Start webSocket {{$}}");
@ -84,27 +103,22 @@ vpnAdmin.controller('vpnInstrumentationController', function ($scope) {
$scope.append_log("Websocket opened"); $scope.append_log("Websocket opened");
$scope.conn.onclose = function (evt) { $scope.conn.onclose = function (evt) {
$scope.append_log("Connection closed."); $scope.append_log("Connection closed.");
} };
$scope.conn.onmessage = function (evt) { $scope.conn.onmessage = function (evt) {
$scope.append_log(evt.data) $scope.append_log(evt.data);
} };
} } else {
else { appendLog($("<div><b>Your browser does not support WebSockets.</b></div>"));
appendLog($("<div><b>Your browser does not support WebSockets.</b></div>"))
} }
}; };
$scope.auth_click = function () { $scope.auth_click = function () {
$scope.append_log($scope.auth_key) $scope.append_log($scope.auth_key);
}; };
$scope.append_log = function (txt) { $scope.append_log = function (txt) {
$scope.log_elements.push(txt) $scope.log_elements.push(txt);
}; };
}); });
</script> </script>
</html> </html>

View File

@ -4,28 +4,33 @@
<title>Websock VPN Test Client</title> <title>Websock VPN Test Client</title>
</head> </head>
<body ng-app="vpnTest" ng-controller="vpnTestController"> <body ng-app="vpnTest" ng-controller="vpnTestController">
<div class="panel panel-default panel-primary"> <div class="panel panel-default panel-primary">
<div class="panel-heading">WebSocket Client Test</div> <div class="panel-heading">WebSocket Client Test</div>
<div class="panel-body"> <div class="panel-body">
<div class="panel panel-default panel-info"> <div class="panel panel-default panel-info">
<div class="panel-heading">Control Plane</div> <div class="panel-heading">Control Plane</div>
<div class="panel-body"> <div class="panel-body">
<div class="row">
<div class="row"> <!-- Auth --> <!-- Auth -->
<div class="col-lg-6"> <div class="col-lg-6">
<div class="input-group"> <div class="input-group">
<span class="input-group-btn"> <span class="input-group-btn">
<button class="btn btn-default" type="button" ng-click="startWebSocket()">Start WebSocket</button> <button class="btn btn-default" type="button" ng-click="startWebSocket()">
Start WebSocket
</button>
</span> </span>
<button class="btn btn-default" type="button" ng-class="conn == false && 'btn-danger' || 'btn-success'"> <button
class="btn btn-default"
type="button"
ng-class="conn == false && 'btn-danger' || 'btn-success'"
>
{[{ conn == false && 'False' || 'True' }]} {[{ conn == false && 'False' || 'True' }]}
</button> </button>
</div> </div>
</div> </div>
</div> </div>
<br> <br />
<div class="row"> <div class="row">
<div class="col-lg-6"> <div class="col-lg-6">
@ -33,25 +38,30 @@
<span class="input-group-btn"> <span class="input-group-btn">
<button class="btn btn-default" type="button">Auth</button> <button class="btn btn-default" type="button">Auth</button>
</span> </span>
<input type="text" class="form-control" placeholder="Enter auth data here"> <input type="text" class="form-control" placeholder="Enter auth data here" />
</div> </div>
</div> </div>
</div> </div>
<br> <br />
<div class="row"> <div class="row">
<div class="col-lg-6"> <div class="col-lg-6">
<div class="input-group"> <div class="input-group">
<span class="input-group-btn"> <span class="input-group-btn">
<button class="btn btn-default" ng-click="send_click()" type="button">Send</button> <button class="btn btn-default" ng-click="send_click()" type="button">
Send
</button>
</span> </span>
<input ng-model="send_data" type="text" class="form-control" placeholder="Enter send data here"> <input
ng-model="send_data"
type="text"
class="form-control"
placeholder="Enter send data here"
/>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="panel panel-default panel-danger"> <div class="panel panel-default panel-danger">
@ -66,32 +76,46 @@
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> <link
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous"> rel="stylesheet"
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
crossorigin="anonymous"
/>
<link
rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css"
integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp"
crossorigin="anonymous"
/>
<script
src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"
integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
crossorigin="anonymous"
></script>
<script type="text/javascript"> <script type="text/javascript">
console.log("startup"); console.log("startup");
var vpnTest = angular.module('vpnTest',[]); var vpnTest = angular.module("vpnTest", []);
vpnTest.config(function ($interpolateProvider) { vpnTest.config(function ($interpolateProvider) {
console.log("vpnTest Config"); console.log("vpnTest Config");
$interpolateProvider.startSymbol('{[{'); $interpolateProvider.startSymbol("{[{");
$interpolateProvider.endSymbol('}]}'); $interpolateProvider.endSymbol("}]}");
}); });
vpnTest.controller('vpnTestController', function ($scope) { vpnTest.controller("vpnTestController", function ($scope) {
console.log("vpnTestController startup"); console.log("vpnTestController startup");
$scope.log_elements = []; $scope.log_elements = [];
$scope.auth_key = ""; $scope.auth_key = "";
$scope.conn = false; $scope.conn = false;
$scope.send_data = "" $scope.send_data = "";
$scope.webSocketStatus = function () { $scope.webSocketStatus = function () {
if ($scope.conn == false) { if ($scope.conn == false) {
return "" return "";
}
} }
};
$scope.startWebSocket = function () { $scope.startWebSocket = function () {
console.log("Start webSocket {{$}}"); console.log("Start webSocket {{$}}");
@ -100,33 +124,28 @@ vpnTest.controller('vpnTestController', function ($scope) {
$scope.append_log("Websocket opened"); $scope.append_log("Websocket opened");
$scope.conn.onclose = function (evt) { $scope.conn.onclose = function (evt) {
$scope.append_log("Connection closed."); $scope.append_log("Connection closed.");
} };
$scope.conn.onmessage = function (evt) { $scope.conn.onmessage = function (evt) {
console.log(evt.data) console.log(evt.data);
$scope.append_log(evt.data) $scope.append_log(evt.data);
} };
} } else {
else { appendLog($("<div><b>Your browser does not support WebSockets.</b></div>"));
appendLog($("<div><b>Your browser does not support WebSockets.</b></div>"))
} }
}; };
$scope.auth_click = function () { $scope.auth_click = function () {
$scope.append_log($scope.auth_key) $scope.append_log($scope.auth_key);
}; };
$scope.send_click = function () { $scope.send_click = function () {
console.log("send_click") console.log("send_click");
$scope.conn.send($scope.send_data) $scope.conn.send($scope.send_data);
}; };
$scope.append_log = function (txt) { $scope.append_log = function (txt) {
$scope.log_elements.push(txt) $scope.log_elements.push(txt);
}; };
}); });
</script> </script>
</html> </html>

View File

@ -1,11 +1,10 @@
<!doctype html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8" />
<title>Page Not Found</title> <title>Page Not Found</title>
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style> <style>
* { * {
line-height: 1.2; line-height: 1.2;
margin: 0; margin: 0;
@ -38,8 +37,8 @@
} }
@media only screen and (max-width: 280px) { @media only screen and (max-width: 280px) {
body,
body, p { p {
width: 95%; width: 95%;
} }
@ -47,9 +46,7 @@
font-size: 1.5em; font-size: 1.5em;
margin: 0 0 0.3em; margin: 0 0 0.3em;
} }
} }
</style> </style>
</head> </head>
<body> <body>

View File

@ -95,22 +95,6 @@ textarea {
Author's custom styles Author's custom styles
========================================================================== */ ========================================================================== */
/* ========================================================================== /* ==========================================================================
Helper classes Helper classes
========================================================================== */ ========================================================================== */
@ -195,10 +179,7 @@ textarea {
/* Style adjustments for viewports that meet the condition */ /* Style adjustments for viewports that meet the condition */
} }
@media print, @media print, (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 1.25dppx), (min-resolution: 120dpi) {
(-webkit-min-device-pixel-ratio: 1.25),
(min-resolution: 1.25dppx),
(min-resolution: 120dpi) {
/* Style adjustments for high resolution devices */ /* Style adjustments for high resolution devices */
} }

View File

@ -1,23 +1,26 @@
<!doctype html> <!DOCTYPE html>
<html class="no-js" lang=""> <html class="no-js" lang="">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge"> <meta http-equiv="x-ua-compatible" content="ie=edge" />
<title></title> <title></title>
<meta name="description" content=""> <meta name="description" content="" />
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="apple-touch-icon" href="apple-touch-icon.png"> <link rel="apple-touch-icon" href="apple-touch-icon.png" />
<!-- Place favicon.ico in the root directory --> <!-- Place favicon.ico in the root directory -->
<link rel="stylesheet" href="css/normalize.css"> <link rel="stylesheet" href="css/normalize.css" />
<link rel="stylesheet" href="css/main.css"> <link rel="stylesheet" href="css/main.css" />
<script src="js/vendor/modernizr-2.8.3.min.js"></script> <script src="js/vendor/modernizr-2.8.3.min.js"></script>
<base href="/"> <base href="/" />
</head> </head>
<body ng-app="rvpnApp"> <body ng-app="rvpnApp">
<!--[if lt IE 8]> <!--[if lt IE 8]>
<p class="browserupgrade">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p> <p class="browserupgrade">
You are using an <strong>outdated</strong> browser. Please
<a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.
</p>
<![endif]--> <![endif]-->
<!-- Admin GUI Begins Here --> <!-- Admin GUI Begins Here -->
@ -38,39 +41,57 @@
<li><a href="#">Help</a></li> <li><a href="#">Help</a></li>
<li><a href="#">Login</a></li> <li><a href="#">Login</a></li>
</ul> </ul>
</nav> </nav>
</div> </div>
</header> </header>
<div ng-view></div> <div ng-view></div>
<script src="https://code.jquery.com/jquery-1.12.0.min.js"></script> <script src="https://code.jquery.com/jquery-1.12.0.min.js"></script>
<script>window.jQuery || document.write('<script src="admin/js/vendor/jquery-1.12.0.min.js"><\/script>')</script> <script>
window.jQuery || document.write('<script src="admin/js/vendor/jquery-1.12.0.min.js"><\/script>');
</script>
<script src="admin/js/plugins.js"></script> <script src="admin/js/plugins.js"></script>
<script src="admin/js/main.js"></script> <script src="admin/js/main.js"></script>
<!-- Google Analytics: change UA-XXXXX-X to be your site's ID. --> <!-- Google Analytics: change UA-XXXXX-X to be your site's ID. -->
<script> <script>
(function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]= (function (b, o, i, l, e, r) {
function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date; b.GoogleAnalyticsObject = l;
e=o.createElement(i);r=o.getElementsByTagName(i)[0]; b[l] ||
e.src='https://www.google-analytics.com/analytics.js'; (b[l] = function () {
r.parentNode.insertBefore(e,r)}(window,document,'script','ga')); (b[l].q = b[l].q || []).push(arguments);
ga('create','UA-XXXXX-X','auto');ga('send','pageview'); });
b[l].l = +new Date();
e = o.createElement(i);
r = o.getElementsByTagName(i)[0];
e.src = "https://www.google-analytics.com/analytics.js";
r.parentNode.insertBefore(e, r);
})(window, document, "script", "ga");
ga("create", "UA-XXXXX-X", "auto");
ga("send", "pageview");
</script> </script>
</body> </body>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular-route.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular-route.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> <link
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous"> rel="stylesheet"
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
crossorigin="anonymous"
/>
<link
rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css"
integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp"
crossorigin="anonymous"
/>
<script
src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"
integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
crossorigin="anonymous"
></script>
<script src="/admin/js/vendor/filter.js"></script> <script src="/admin/js/vendor/filter.js"></script>
<script src="/admin/js/app.js"></script> <script src="/admin/js/app.js"></script>
</html> </html>

View File

@ -1,4 +1,4 @@
console.log("app.sh startup") console.log("app.sh startup");
var app = angular.module("rvpnApp", ["ngRoute", "angular-duration-format"]); var app = angular.module("rvpnApp", ["ngRoute", "angular-duration-format"]);
@ -27,93 +27,92 @@ app.config(function($routeProvider, $locationProvider) {
$locationProvider.html5Mode(true); $locationProvider.html5Mode(true);
}); });
app.filter('bytes', function() { app.filter("bytes", function () {
return function (bytes, precision) { return function (bytes, precision) {
if (isNaN(parseFloat(bytes)) || !isFinite(bytes)) return '-'; if (isNaN(parseFloat(bytes)) || !isFinite(bytes)) return "-";
if (typeof precision === 'undefined') precision = 1; if (typeof precision === "undefined") precision = 1;
var units = ['bytes', 'kB', 'MB', 'GB', 'TB', 'PB'], var units = ["bytes", "kB", "MB", "GB", "TB", "PB"],
number = Math.floor(Math.log(bytes) / Math.log(1024)); number = Math.floor(Math.log(bytes) / Math.log(1024));
return (bytes / Math.pow(1024, Math.floor(number))).toFixed(precision) + ' ' + units[number]; return (bytes / Math.pow(1024, Math.floor(number))).toFixed(precision) + " " + units[number];
} };
}); });
app.filter('hfcduration', function() { app.filter("hfcduration", function () {
return function (duration, precision) { return function (duration, precision) {
remain = duration remain = duration;
duration_day = 24*60*60 duration_day = 24 * 60 * 60;
duration_hour = 60*60 duration_hour = 60 * 60;
duration_minute = 60 duration_minute = 60;
duration_str = "" duration_str = "";
days = Math.floor(remain / duration_day) days = Math.floor(remain / duration_day);
if (days > 0) { if (days > 0) {
remain = remain - (days * duration_day) remain = remain - days * duration_day;
duration_str = duration_str + days + 'd' duration_str = duration_str + days + "d";
} }
hours = Math.floor(remain / duration_hour) hours = Math.floor(remain / duration_hour);
if (hours > 0) { if (hours > 0) {
remain = remain - (hours * duration_hour) remain = remain - hours * duration_hour;
duration_str = duration_str + hours + 'h' duration_str = duration_str + hours + "h";
} }
mins = Math.floor(remain / duration_minute) mins = Math.floor(remain / duration_minute);
if (mins > 0) { if (mins > 0) {
remain = remain - (mins * duration_minute) remain = remain - mins * duration_minute;
duration_str = duration_str + mins + 'm' duration_str = duration_str + mins + "m";
} }
secs = Math.floor(remain) secs = Math.floor(remain);
duration_str = duration_str + secs + 's' duration_str = duration_str + secs + "s";
return (duration_str); return duration_str;
} };
}); });
app.controller('statusController', function ($scope, $http) { app.controller("statusController", function ($scope, $http) {
console.log("statusController"); console.log("statusController");
$scope.status_search = ""; $scope.status_search = "";
var api = '/api/org.rootprojects.tunnel/status' var api = "/api/org.rootprojects.tunnel/status";
$scope.updateView = function () { $scope.updateView = function () {
$http.get(api).then(function (response) { $http.get(api).then(function (response) {
console.log(response); console.log(response);
data = response.data; data = response.data;
if (data.error == 'ok' ){ if (data.error == "ok") {
$scope.status = data.result; $scope.status = data.result;
} }
}); });
} };
$scope.updateView()
$scope.updateView();
}); });
app.controller('serverController', function ($scope, $http) { app.controller("serverController", function ($scope, $http) {
$scope.servers = []; $scope.servers = [];
$scope.servers_search = ""; $scope.servers_search = "";
$scope.servers_trigger_details = []; $scope.servers_trigger_details = [];
$scope.filtered $scope.filtered;
var api = '/api/org.rootprojects.tunnel/servers' var api = "/api/org.rootprojects.tunnel/servers";
$scope.updateView = function () { $scope.updateView = function () {
$http.get(api).then(function (response) { $http.get(api).then(function (response) {
//console.log(response); //console.log(response);
data = response.data; data = response.data;
if (data.error == 'ok' ){ if (data.error == "ok") {
$scope.servers = data.result.servers; $scope.servers = data.result.servers;
} }
}); });
} };
$scope.triggerDetail = function (id) { $scope.triggerDetail = function (id) {
//console.log("triggerDetail ", id, $scope.servers_trigger_details[id]) //console.log("triggerDetail ", id, $scope.servers_trigger_details[id])
if ($scope.servers_trigger_details[id] == true) { if ($scope.servers_trigger_details[id] == true) {
$scope.servers_trigger_details[id] = false; $scope.servers_trigger_details[id] = false;
} else { } else {
$scope.servers_trigger_details[id] = true $scope.servers_trigger_details[id] = true;
} }
}; };
@ -122,11 +121,9 @@ app.controller('serverController', function ($scope, $http) {
if ($scope.servers_trigger_details[id] == true) { if ($scope.servers_trigger_details[id] == true) {
return false; return false;
} else { } else {
return true return true;
} }
}; };
$scope.updateView() $scope.updateView();
}); });

View File

@ -3,10 +3,30 @@
var method; var method;
var noop = function () {}; var noop = function () {};
var methods = [ var methods = [
'assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error', "assert",
'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log', "clear",
'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd', "count",
'timeline', 'timelineEnd', 'timeStamp', 'trace', 'warn' "debug",
"dir",
"dirxml",
"error",
"exception",
"group",
"groupCollapsed",
"groupEnd",
"info",
"log",
"markTimeline",
"profile",
"profileEnd",
"table",
"time",
"timeEnd",
"timeline",
"timelineEnd",
"timeStamp",
"trace",
"warn"
]; ];
var length = methods.length; var length = methods.length;
var console = (window.console = window.console || {}); var console = (window.console = window.console || {});
@ -19,6 +39,6 @@
console[method] = noop; console[method] = noop;
} }
} }
}()); })();
// Place any jQuery/helper plugins in here. // Place any jQuery/helper plugins in here.

View File

@ -1,59 +1,67 @@
// ### filter.js >> // ### filter.js >>
angular angular.module("angular-duration-format.filter", []).filter("duration", function () {
.module('angular-duration-format.filter', [ ])
.filter('duration', function() {
var DURATION_FORMATS_SPLIT = /((?:[^ydhms']+)|(?:'(?:[^']|'')*')|(?:y+|d+|h+|m+|s+))(.*)/; var DURATION_FORMATS_SPLIT = /((?:[^ydhms']+)|(?:'(?:[^']|'')*')|(?:y+|d+|h+|m+|s+))(.*)/;
var DURATION_FORMATS = { var DURATION_FORMATS = {
y: { // years y: {
// years
// "longer" years are not supported // "longer" years are not supported
value: 365 * 24 * 60 * 60 * 1000, value: 365 * 24 * 60 * 60 * 1000
}, },
yy: { yy: {
value: 'y', value: "y",
pad: 2, pad: 2
}, },
d: { // days d: {
value: 24 * 60 * 60 * 1000, // days
value: 24 * 60 * 60 * 1000
}, },
dd: { dd: {
value: 'd', value: "d",
pad: 2, pad: 2
}, },
h: { // hours h: {
value: 60 * 60 * 1000, // hours
value: 60 * 60 * 1000
}, },
hh: { // padded hours hh: {
value: 'h', // padded hours
pad: 2, value: "h",
pad: 2
}, },
m: { // minutes m: {
value: 60 * 1000, // minutes
value: 60 * 1000
}, },
mm: { // padded minutes mm: {
value: 'm', // padded minutes
pad: 2, value: "m",
pad: 2
}, },
s: { // seconds s: {
value: 1000, // seconds
value: 1000
}, },
ss: { // padded seconds ss: {
value: 's', // padded seconds
pad: 2, value: "s",
pad: 2
}, },
sss: { // milliseconds sss: {
value: 1, // milliseconds
}, value: 1
ssss: { // padded milliseconds
value: 'sss',
pad: 4,
}, },
ssss: {
// padded milliseconds
value: "sss",
pad: 4
}
}; };
function _parseFormat(string) { function _parseFormat(string) {
// @inspiration AngularJS date filter // @inspiration AngularJS date filter
var parts = []; var parts = [];
var format = string ? string.toString() : ''; var format = string ? string.toString() : "";
while (format) { while (format) {
var match = DURATION_FORMATS_SPLIT.exec(format); var match = DURATION_FORMATS_SPLIT.exec(format);
@ -73,31 +81,46 @@ angular
} }
function _formatDuration(timestamp, format) { function _formatDuration(timestamp, format) {
var text = ''; var text = "";
var values = {}; var values = {};
format.filter(function(format) { // filter only value parts of format format
.filter(function (format) {
// filter only value parts of format
return DURATION_FORMATS.hasOwnProperty(format); return DURATION_FORMATS.hasOwnProperty(format);
}).map(function(format) { // get formats with values only })
.map(function (format) {
// get formats with values only
var config = DURATION_FORMATS[format]; var config = DURATION_FORMATS[format];
if (config.hasOwnProperty('pad')) { if (config.hasOwnProperty("pad")) {
return config.value; return config.value;
} else { } else {
return format; return format;
} }
}).filter(function(format, index, arr) { // remove duplicates })
return (arr.indexOf(format) === index); .filter(function (format, index, arr) {
}).map(function(format) { // get format configurations with values // remove duplicates
return angular.extend({ return arr.indexOf(format) === index;
name: format, })
}, DURATION_FORMATS[format]); .map(function (format) {
}).sort(function(a, b) { // sort formats descending by value // get format configurations with values
return angular.extend(
{
name: format
},
DURATION_FORMATS[format]
);
})
.sort(function (a, b) {
// sort formats descending by value
return b.value - a.value; return b.value - a.value;
}).forEach(function(format) { // create values for format parts })
var value = values[format.name] = Math.floor(timestamp / format.value); .forEach(function (format) {
// create values for format parts
var value = (values[format.name] = Math.floor(timestamp / format.value));
timestamp = timestamp - (value * format.value); timestamp = timestamp - value * format.value;
}); });
format.forEach(function (part) { format.forEach(function (part) {
@ -106,9 +129,11 @@ angular
if (format) { if (format) {
var value = values[format.value]; var value = values[format.value];
text += (format.hasOwnProperty('pad') ? _padNumber(value, Math.max(format.pad, value.toString().length)) : values[part]); text += format.hasOwnProperty("pad")
? _padNumber(value, Math.max(format.pad, value.toString().length))
: values[part];
} else { } else {
text += part.replace(/(^'|'$)/g, '').replace(/''/g, '\''); text += part.replace(/(^'|'$)/g, "").replace(/''/g, "'");
} }
}); });
@ -116,14 +141,14 @@ angular
} }
function _padNumber(number, len) { function _padNumber(number, len) {
return ((new Array(len + 1)).join('0') + number).slice(-len); return (new Array(len + 1).join("0") + number).slice(-len);
} }
return function (value, format) { return function (value, format) {
var parsedValue = parseFloat(value, 10); var parsedValue = parseFloat(value, 10);
var parsedFormat = _parseFormat(format); var parsedFormat = _parseFormat(format);
if (isNaN(parsedValue) || (parsedFormat.length === 0)) { if (isNaN(parsedValue) || parsedFormat.length === 0) {
return value; return value;
} else { } else {
return _formatDuration(parsedValue, parsedFormat); return _formatDuration(parsedValue, parsedFormat);
@ -131,18 +156,10 @@ angular
}; };
}); });
// ### << filter.js // ### << filter.js
// ### main.js >> // ### main.js >>
angular angular.module("angular-duration-format", ["angular-duration-format.filter"]);
.module('angular-duration-format', [
'angular-duration-format.filter',
]);
// ### << main.js // ### << main.js

View File

@ -9,10 +9,15 @@
<form class="form-inline pull-right"> <form class="form-inline pull-right">
<div class="form-group"> <div class="form-group">
<label for="search">Search:</label> <label for="search">Search:</label>
<input type="text" class="form-control" id="search" data-ng-model="servers_search"> <input type="text" class="form-control" id="search" data-ng-model="servers_search" />
</div> </div>
<button type="button" title="Refresh" class="btn btn-default" aria-label="Refresh"> <button type="button" title="Refresh" class="btn btn-default" aria-label="Refresh">
<span class="glyphicon glyphicon-refresh" title="Refresh" aria-hidden="false" ng-click="updateView()"></span> <span
class="glyphicon glyphicon-refresh"
title="Refresh"
aria-hidden="false"
ng-click="updateView()"
></span>
</button> </button>
</form> </form>
</div> </div>
@ -30,8 +35,9 @@
<th width="5%">Duration</th> <th width="5%">Duration</th>
<th width="5%">State</th> <th width="5%">State</th>
<th width="5%">Idle</th> <th width="5%">Idle</th>
<th width="1%"><center><span class="glyphicon glyphicon-option-vertical" aria-hidden="true"></span></center></th> <th width="1%">
<center><span class="glyphicon glyphicon-option-vertical" aria-hidden="true"></span></center>
</th>
<tr ng-repeat="s in servers | filter:servers_search | orderBy:'server_id'"> <tr ng-repeat="s in servers | filter:servers_search | orderBy:'server_id'">
<td>{{ s.server_id }}</td> <td>{{ s.server_id }}</td>
@ -68,22 +74,25 @@
<td>{{ s.server_state }}</td> <td>{{ s.server_state }}</td>
<td>{{ s.idle | hfcduration }}</td> <td>{{ s.idle | hfcduration }}</td>
<td> <td>
<span class="glyphicon glyphicon-zoom-in" title="Detail" aria-hidden="false" ng-click="triggerDetail(s.server_id)"></span> <span
class="glyphicon glyphicon-zoom-in"
title="Detail"
aria-hidden="false"
ng-click="triggerDetail(s.server_id)"
></span>
<div ng-hide="checkDetail(s.server_id)"> <div ng-hide="checkDetail(s.server_id)">
&nbsp &nbsp
<div ng-repeat="d in s.domains | orderBy:'domain_name'"> <div ng-repeat="d in s.domains | orderBy:'domain_name'">
<span class="glyphicon glyphicon-zoom-in" title="Detail" aria-hidden="false" ng-click="triggerDetail(s.server_id+d.domain_name)"></span> <span
class="glyphicon glyphicon-zoom-in"
title="Detail"
aria-hidden="false"
ng-click="triggerDetail(s.server_id+d.domain_name)"
></span>
</div> </div>
</div> </div>
</td> </td>
</tr> </tr>
</table> </table>
</div> </div>
</div> </div>

View File

@ -9,10 +9,15 @@
<form class="form-inline pull-right"> <form class="form-inline pull-right">
<div class="form-group"> <div class="form-group">
<label for="search">Search:</label> <label for="search">Search:</label>
<input type="text" class="form-control" id="search" data-ng-model="servers_search"> <input type="text" class="form-control" id="search" data-ng-model="servers_search" />
</div> </div>
<button type="button" title="Refresh" class="btn btn-default" aria-label="Refresh"> <button type="button" title="Refresh" class="btn btn-default" aria-label="Refresh">
<span class="glyphicon glyphicon-refresh" title="Refresh" aria-hidden="false" ng-click="updateView()"></span> <span
class="glyphicon glyphicon-refresh"
title="Refresh"
aria-hidden="false"
ng-click="updateView()"
></span>
</button> </button>
</form> </form>
</div> </div>
@ -38,9 +43,10 @@
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-4"></div> <div class="col-md-4"></div>
<div class="col-md-8">Deadtime: dwell:{{ status.dead_time.dwell}} idle:{{ status.dead_time.idle}} cancel:{{ status.dead_time.cancel_check}}</div> <div class="col-md-8">
Deadtime: dwell:{{ status.dead_time.dwell}} idle:{{ status.dead_time.idle}} cancel:{{
status.dead_time.cancel_check}}
</div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -10,6 +10,7 @@ docker-compose version 1.11.2, build dfed245
hcamacho@Hanks-MBP:rvpn-docker $ docker --version hcamacho@Hanks-MBP:rvpn-docker $ docker --version
Docker version 17.03.0-ce, build 60ccb22 Docker version 17.03.0-ce, build 60ccb22
``` ```
- checkout code into gopath - checkout code into gopath
```bash ```bash
@ -87,6 +88,3 @@ rvpn_1 | INFO: genericlistener: 2017/03/04 18:13:02.270281 connection.go:242: W
``` ```
The line "Connection Registration Accepted indicates a client WSS registered, was authenticated and registered its domains with the RVPN The line "Connection Registration Accepted indicates a client WSS registered, was authenticated and registered its domains with the RVPN