diff --git a/app/options.py b/app/options.py index ed47b848..5a8cf88b 100644 --- a/app/options.py +++ b/app/options.py @@ -23,7 +23,7 @@ if act == "checkrestart": sys.exit() sys.exit() -if form.getvalue('token') is None: +if not sql.check_token_exists(form.getvalue('token')): print("What the fuck?! U r hacker Oo?!") sys.exit() diff --git a/app/sql.py b/app/sql.py index 09f296a9..bb357631 100644 --- a/app/sql.py +++ b/app/sql.py @@ -1369,18 +1369,54 @@ def select_keep_alive(**kwargs): return cur.fetchall() cur.close() con.close() + + +def check_token_exists(token): + try: + import http.cookies + import os + cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) + user_id = cookie.get('uuid') + if get_token(user_id.value) == token: + return True + else: + try: + funct.logging('localhost', ' tried do action with wrong token', haproxywi=1, login=1) + except: + funct.logging('localhost', ' An action with wrong token', haproxywi=1) + return False + except: + try: + funct.logging('localhost', ' cannot check token', haproxywi=1, login=1) + except: + funct.logging('localhost', ' Cannot check token', haproxywi=1) + return False + form = cgi.FieldStorage() error_mess = 'All fields must be completed X' def check_token(): - if form.getvalue('token') is None: + if not check_token_exists(form.getvalue('token')): print('Content-type: text/html\n') - print("What the fuck?! U r hacker Oo?!") + print("What the fuck?! U r hacker Oo?!") import sys sys.exit() - + + +def check_group(group): + import http.cookies + import os + cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) + user_id = cookie.get('uuid') + user_group = get_user_group_by_uuid(user_id.value) + if user_group == group or user_group == '1': + return True + else: + funct.logging(new_user, ' tried to change user group', haproxywi=1, login=1) + return False + if form.getvalue('newuser') is not None: email = form.getvalue('newemail') @@ -1394,13 +1430,16 @@ if form.getvalue('newuser') is not None: if password is None or role is None or group is None: print(error_mess) else: - role_id = get_role_id_by_name(role) - if funct.is_admin(level=role_id): - if add_user(new_user, email, password, role, group, activeuser): - show_update_user(new_user, page) - else: - funct.logging(new_user, ' tried to do privilege escalation', haproxywi=1, login=1) - + if check_group(group): + role_id = get_role_id_by_name(role) + if funct.is_admin(level=role_id): + if add_user(new_user, email, password, role, group, activeuser): + show_update_user(new_user, page) + else: + funct.logging(new_user, ' tried to privilege escalation', haproxywi=1, login=1) + + + if form.getvalue('updateuser') is not None: email = form.getvalue('email') role = form.getvalue('role') @@ -1412,12 +1451,14 @@ if form.getvalue('updateuser') is not None: check_token() if new_user is None or role is None or group is None: print(error_mess) - else: - role_id = get_role_id_by_name(role) - if funct.is_admin(level=role_id): - update_user(new_user, email, role, group, id, activeuser) - else: - funct.logging(new_user, ' tried to do privilege escalation', haproxywi=1, login=1) + else: + if check_group(group): + role_id = get_role_id_by_name(role) + if funct.is_admin(level=role_id): + update_user(new_user, email, role, group, id, activeuser) + else: + funct.logging(new_user, ' tried to privilege escalation', haproxywi=1, login=1) + if form.getvalue('updatepassowrd') is not None: @@ -1437,6 +1478,7 @@ if form.getvalue('userdel') is not None: check_token() if delete_user(form.getvalue('userdel')): print("Ok") + if form.getvalue('newserver') is not None: hostname = form.getvalue('servername') @@ -1460,6 +1502,7 @@ if form.getvalue('newserver') is not None: else: if add_server(hostname, ip, group, typeip, enable, master, cred, alert, metrics, port, desc, active): show_update_server(ip, page) + if form.getvalue('serverdel') is not None: print('Content-type: text/html\n') @@ -1467,6 +1510,7 @@ if form.getvalue('serverdel') is not None: if delete_server(form.getvalue('serverdel')): delete_waf_server(form.getvalue('serverdel')) print("Ok") + if form.getvalue('newgroup') is not None: newgroup = form.getvalue('groupname') @@ -1479,11 +1523,13 @@ if form.getvalue('newgroup') is not None: if add_group(newgroup, desc): show_update_group(newgroup) + if form.getvalue('groupdel') is not None: print('Content-type: text/html\n') check_token() if delete_group(form.getvalue('groupdel')): print("Ok") + if form.getvalue('updategroup') is not None: name = form.getvalue('updategroup') @@ -1495,6 +1541,7 @@ if form.getvalue('updategroup') is not None: print(error_mess) else: update_group(name, descript, id) + if form.getvalue('updateserver') is not None: name = form.getvalue('updateserver') @@ -1516,6 +1563,7 @@ if form.getvalue('updateserver') is not None: print(error_mess) else: update_server(name, ip, group, typeip, enable, master, id, cred, alert, metrics, port, desc, active) + if form.getvalue('updatessh'): id = form.getvalue('id') @@ -1544,7 +1592,8 @@ if form.getvalue('updatessh'): except: pass update_ssh(id, name, enable, group, username, password) - + + if form.getvalue('new_ssh'): name = form.getvalue('new_ssh') enable = form.getvalue('ssh_enable') @@ -1560,6 +1609,7 @@ if form.getvalue('new_ssh'): else: if insert_new_ssh(name, enable, group, username, password): show_update_ssh(name, page) + if form.getvalue('sshdel') is not None: import funct @@ -1580,6 +1630,7 @@ if form.getvalue('sshdel') is not None: if delete_ssh(form.getvalue('sshdel')): print("Ok") + if form.getvalue('newtelegram'): token = form.getvalue('newtelegram') chanel = form.getvalue('chanel') @@ -1593,12 +1644,14 @@ if form.getvalue('newtelegram'): else: if insert_new_telegram(token, chanel, group): show_update_telegram(token, page) + if form.getvalue('telegramdel') is not None: print('Content-type: text/html\n') check_token() if delete_telegram(form.getvalue('telegramdel')): print("Ok") + if form.getvalue('getoption'): group = form.getvalue('getoption') @@ -1626,7 +1679,8 @@ if form.getvalue('newtoption'): else: if insert_new_option(option, group): show_update_option(option) - + + if form.getvalue('updateoption') is not None: option = form.getvalue('updateoption') id = form.getvalue('id') @@ -1636,6 +1690,7 @@ if form.getvalue('updateoption') is not None: print(error_mess) else: update_options(option, id) + if form.getvalue('optiondel') is not None: print('Content-type: text/html\n') @@ -1675,7 +1730,8 @@ if form.getvalue('newsavedserver'): else: if insert_new_savedserver(savedserver, description, group): show_update_savedserver(savedserver) - + + if form.getvalue('updatesavedserver') is not None: savedserver = form.getvalue('updatesavedserver') description = form.getvalue('description') @@ -1686,12 +1742,14 @@ if form.getvalue('updatesavedserver') is not None: print(error_mess) else: update_savedserver(savedserver, description, id) - + + if form.getvalue('savedserverdel') is not None: print('Content-type: text/html\n') check_token() if delete_savedserver(form.getvalue('savedserverdel')): print("Ok") + if form.getvalue('updatetoken') is not None: token = form.getvalue('updatetoken') @@ -1703,7 +1761,8 @@ if form.getvalue('updatetoken') is not None: print(error_mess) else: update_telegram(token, chanel, group, id) - + + if form.getvalue('updatesettings') is not None: print('Content-type: text/html\n') check_token() diff --git a/app/templates/add.html b/app/templates/add.html index d5a0790f..541c37aa 100644 --- a/app/templates/add.html +++ b/app/templates/add.html @@ -823,6 +823,12 @@ h3 {
 ')
+		},
+		type: "GET",
+        success: function (data) {   
+           $( "#table_metrics" ).html( data );
+        }
+    });
 }
 
 
diff --git a/inc/script.js b/inc/script.js
index 2d10d8af..6c4d8bf6 100644
--- a/inc/script.js
+++ b/inc/script.js
@@ -198,6 +198,9 @@ function showOverview() {
 			act: "overview",
 			token: $('#token').val()
 		},
+		beforeSend: function() {
+			$('#ajaxstatus').html('
')
+		},
+		type: "GET",
+        success: function (data) {   
+           $( "#table_metrics" ).html( data );
+        }
+    });
 }
 
 
diff --git a/inc/script.js b/inc/script.js
index 2d10d8af..6c4d8bf6 100644
--- a/inc/script.js
+++ b/inc/script.js
@@ -198,6 +198,9 @@ function showOverview() {
 			act: "overview",
 			token: $('#token').val()
 		},
+		beforeSend: function() {
+			$('#ajaxstatus').html(' ')
+		},
 		type: "GET",
 		success: function( data ) {
 			$("#ajaxstatus").empty();
@@ -218,6 +221,9 @@ function showOverviewServer(name,ip,id) {
 			page: 'hapservers.py',
 			token: $('#token').val()
 		},
+		beforeSend: function() {
+			$("#ajax-server-"+id).html('
')
+		},
 		type: "GET",
 		success: function( data ) {
 			$("#ajaxstatus").empty();
@@ -218,6 +221,9 @@ function showOverviewServer(name,ip,id) {
 			page: 'hapservers.py',
 			token: $('#token').val()
 		},
+		beforeSend: function() {
+			$("#ajax-server-"+id).html(' ')
+		},
 		type: "GET",
 		success: function( data ) {
 			$("#ajax-server-"+id).empty();
@@ -255,6 +261,14 @@ function showOverviewWaf() {
 			page: cur_url[0],
 			token: $('#token').val()
 		},
+		beforeSend: function() {
+			if (cur_url[0] == "waf.py") {
+				var load_class = 'loading_full_page'
+			} else {
+				var load_class = 'loading'
+			}
+			$('#ajaxwafstatus').html('
')
+		},
 		type: "GET",
 		success: function( data ) {
 			$("#ajax-server-"+id).empty();
@@ -255,6 +261,14 @@ function showOverviewWaf() {
 			page: cur_url[0],
 			token: $('#token').val()
 		},
+		beforeSend: function() {
+			if (cur_url[0] == "waf.py") {
+				var load_class = 'loading_full_page'
+			} else {
+				var load_class = 'loading'
+			}
+			$('#ajaxwafstatus').html(' ')
+		},
 		type: "GET",
 		success: function( data ) {
 			$("#ajaxwafstatus").empty();
@@ -277,6 +291,9 @@ function showOverviewServers() {
 			act: "overviewServers",
 			token: $('#token').val()
 		},
+		beforeSend: function() {
+			$('#ajaxservers').html('
')
+		},
 		type: "GET",
 		success: function( data ) {
 			$("#ajaxwafstatus").empty();
@@ -277,6 +291,9 @@ function showOverviewServers() {
 			act: "overviewServers",
 			token: $('#token').val()
 		},
+		beforeSend: function() {
+			$('#ajaxservers').html(' ')
+		},
 		type: "GET",
 		success: function( data ) {
 			$("#ajaxservers").html(data);
@@ -290,6 +307,9 @@ function showOverviewHapWI() {
 			act: "overviewHapwi",
 			token: $('#token').val()
 		},
+		beforeSend: function() {
+			$('#ajaxHapwi').html('
')
+		},
 		type: "GET",
 		success: function( data ) {
 			$("#ajaxservers").html(data);
@@ -290,6 +307,9 @@ function showOverviewHapWI() {
 			act: "overviewHapwi",
 			token: $('#token').val()
 		},
+		beforeSend: function() {
+			$('#ajaxHapwi').html(' ')
+		},
 		type: "GET",
 		success: function( data ) {
 			$("#ajaxHapwi").html(data);
@@ -307,7 +327,7 @@ function showStats() {
 		type: "GET",
 		success: function( data ) {
 			$("#ajax").html(data);			
-			// window.history.pushState("Stats", "Stats", cur_url[0]+"?serv="+$("#serv").val());
+			window.history.pushState("Stats", "Stats", cur_url[0]+"?serv="+$("#serv").val());
 			wait();
 		}					
 	} );
diff --git a/inc/style.css b/inc/style.css
index f9daf602..c80b6bfd 100644
--- a/inc/style.css
+++ b/inc/style.css
@@ -309,7 +309,7 @@ pre {
 	font-size: 13px !important;
 }
 .advance-show  a{
-	color: #9d9d9d !important;
+	color: #23527c !important;
 }
 .addButton {
 	padding-top: 15px;
@@ -810,6 +810,10 @@ label {
   #logo_span {
 	margin-left: 17%;
 	}	
+	.chart-container {
+		height: 290px;
+		width: 32.4%;
+	}
 }
 @media (max-width: 1080px) {
 	#logo_span {
@@ -869,3 +873,23 @@ label {
 		max-width: 95%;
 	}
 }
+.loading, .loading_full_page, .loading_hapwi_overview {
+	width: 100px;
+	height: 100px;
+	margin-left: 100%;
+}
+.loading_full_page {
+	margin-left: 45%;
+}
+.loading_hapwi_overview{
+	margin-left: 40%;
+}
+.tooltip {
+	font-size: 12px; 
+	padding-bottom: 10px;
+}
+.tooltipTop {
+	margin-bottom: -20px; 
+	padding-top: 10px;
+	color: #9d9d9d;
+}
diff --git a/inc/users.js b/inc/users.js
index 75ec2ad7..946fae3c 100644
--- a/inc/users.js
+++ b/inc/users.js
@@ -770,7 +770,8 @@ function cloneServer(id) {
 	$('#slavefor').selectmenu("refresh");
 	$('#credentials').val($('#credentials-'+id+' option:selected').val()).change()
 	$('#credentials').selectmenu("refresh");
-	if (cur_url[0] == 'users.py') {
+	cur_url = cur_url[0].split('#')[0]
+	if (cur_url == 'users.py') {
 		$('#new-server-group-add').val($('#servergroup-'+id+' option:selected').val()).change()
 		$('#new-server-group-add').selectmenu("refresh");
 	}
@@ -785,7 +786,8 @@ function cloneUser(id) {
 	$('#activeuser').checkboxradio("refresh");
 	$('#new-role').val($('#role-'+id+' option:selected').val()).change()
 	$('#new-role').selectmenu("refresh");
-	if (cur_url[0] == 'users.py') {
+	cur_url = cur_url[0].split('#')[0]
+	if (cur_url == 'users.py') {
 		$('#new-group').val($('#usergroup-'+id+' option:selected').val()).change();
 		$('#new-group').selectmenu("refresh");
 	}
@@ -1191,7 +1193,6 @@ function changeUserPasswordDialog(id) {
 				effect: "fade",
 				duration: 200
 			},
-			// beforeClose: function( event, ui ) {return changeUserPassword(id);},
 			buttons: {
 				"Change": function() {	
 					changeUserPassword(id, $(this));
')
+		},
 		type: "GET",
 		success: function( data ) {
 			$("#ajaxHapwi").html(data);
@@ -307,7 +327,7 @@ function showStats() {
 		type: "GET",
 		success: function( data ) {
 			$("#ajax").html(data);			
-			// window.history.pushState("Stats", "Stats", cur_url[0]+"?serv="+$("#serv").val());
+			window.history.pushState("Stats", "Stats", cur_url[0]+"?serv="+$("#serv").val());
 			wait();
 		}					
 	} );
diff --git a/inc/style.css b/inc/style.css
index f9daf602..c80b6bfd 100644
--- a/inc/style.css
+++ b/inc/style.css
@@ -309,7 +309,7 @@ pre {
 	font-size: 13px !important;
 }
 .advance-show  a{
-	color: #9d9d9d !important;
+	color: #23527c !important;
 }
 .addButton {
 	padding-top: 15px;
@@ -810,6 +810,10 @@ label {
   #logo_span {
 	margin-left: 17%;
 	}	
+	.chart-container {
+		height: 290px;
+		width: 32.4%;
+	}
 }
 @media (max-width: 1080px) {
 	#logo_span {
@@ -869,3 +873,23 @@ label {
 		max-width: 95%;
 	}
 }
+.loading, .loading_full_page, .loading_hapwi_overview {
+	width: 100px;
+	height: 100px;
+	margin-left: 100%;
+}
+.loading_full_page {
+	margin-left: 45%;
+}
+.loading_hapwi_overview{
+	margin-left: 40%;
+}
+.tooltip {
+	font-size: 12px; 
+	padding-bottom: 10px;
+}
+.tooltipTop {
+	margin-bottom: -20px; 
+	padding-top: 10px;
+	color: #9d9d9d;
+}
diff --git a/inc/users.js b/inc/users.js
index 75ec2ad7..946fae3c 100644
--- a/inc/users.js
+++ b/inc/users.js
@@ -770,7 +770,8 @@ function cloneServer(id) {
 	$('#slavefor').selectmenu("refresh");
 	$('#credentials').val($('#credentials-'+id+' option:selected').val()).change()
 	$('#credentials').selectmenu("refresh");
-	if (cur_url[0] == 'users.py') {
+	cur_url = cur_url[0].split('#')[0]
+	if (cur_url == 'users.py') {
 		$('#new-server-group-add').val($('#servergroup-'+id+' option:selected').val()).change()
 		$('#new-server-group-add').selectmenu("refresh");
 	}
@@ -785,7 +786,8 @@ function cloneUser(id) {
 	$('#activeuser').checkboxradio("refresh");
 	$('#new-role').val($('#role-'+id+' option:selected').val()).change()
 	$('#new-role').selectmenu("refresh");
-	if (cur_url[0] == 'users.py') {
+	cur_url = cur_url[0].split('#')[0]
+	if (cur_url == 'users.py') {
 		$('#new-group').val($('#usergroup-'+id+' option:selected').val()).change();
 		$('#new-group').selectmenu("refresh");
 	}
@@ -1191,7 +1193,6 @@ function changeUserPasswordDialog(id) {
 				effect: "fade",
 				duration: 200
 			},
-			// beforeClose: function( event, ui ) {return changeUserPassword(id);},
 			buttons: {
 				"Change": function() {	
 					changeUserPassword(id, $(this));