mirror of https://github.com/Aidaho12/haproxy-wi
				
				
				
			v1.8.1
							parent
							
								
									6854bcda33
								
							
						
					
					
						commit
						209650f914
					
				| 
						 | 
				
			
			@ -277,7 +277,7 @@ print('</select>'
 | 
			
		|||
			'<td class="addName">IP and Port:</td>'
 | 
			
		||||
			'<td class="addOption">'
 | 
			
		||||
				'<input type="text" name="ip" id="ip1" size="15" placeholder="172.28.0.1" class="form-control"><b>:</b>'
 | 
			
		||||
				'<input type="number" name="port" required title="Port for bind listner" size="5" placeholder="8080" class="form-control">'
 | 
			
		||||
				'<input type="number" name="port" required title="Port for bind listner" placeholder="8080" class="form-control">'
 | 
			
		||||
				'<div class="tooltip tooltipTop">IP for bind listner, <b>if empty will be assignet on all IPs</b>. Start typing ip, or press down.</div>'
 | 
			
		||||
			'</td>'
 | 
			
		||||
		'</tr>'
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -37,9 +37,8 @@ def logging(serv, action):
 | 
			
		|||
	now_utc = datetime.now(timezone(time_zone))
 | 
			
		||||
	IP = cgi.escape(os.environ["REMOTE_ADDR"])
 | 
			
		||||
	cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
 | 
			
		||||
	firstName = cookie.get('FirstName')
 | 
			
		||||
	lastName = cookie.get('LastName')
 | 
			
		||||
	mess = now_utc.strftime(dateFormat) + " from " + IP + " user: " + firstName.value + " " + lastName.value + " " + action + " for: " + serv + "\n"
 | 
			
		||||
	login = cookie.get('login')
 | 
			
		||||
	mess = now_utc.strftime(dateFormat) + " from " + IP + " user: " + login.value + " " + action + " for: " + serv + "\n"
 | 
			
		||||
	log = open(fullpath + "log/config_edit.log", "a")
 | 
			
		||||
	log.write(mess)
 | 
			
		||||
	log.close
 | 
			
		||||
| 
						 | 
				
			
			@ -57,11 +56,15 @@ def telegram_send_mess(mess):
 | 
			
		|||
	bot = telegram.Bot(token=token_bot, request=pp)
 | 
			
		||||
	bot.send_message(chat_id=channel_name, text=mess)
 | 
			
		||||
	
 | 
			
		||||
def check_login():
 | 
			
		||||
def check_login(**kwargs):
 | 
			
		||||
	cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
 | 
			
		||||
	login = cookie.get('login')
 | 
			
		||||
	role = cookie.get('role')
 | 
			
		||||
	ref = os.environ.get("SCRIPT_NAME")
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
	if kwargs.get("admins_area") == "1" and role.value != "admin":
 | 
			
		||||
		print('<meta http-equiv="refresh" content="0; url=/">')
 | 
			
		||||
		
 | 
			
		||||
	if login is None:
 | 
			
		||||
		print('<meta http-equiv="refresh" content="0; url=login.py?ref=%s">' % ref)
 | 
			
		||||
		
 | 
			
		||||
| 
						 | 
				
			
			@ -161,8 +164,8 @@ def footer():
 | 
			
		|||
	print('</center></div>'
 | 
			
		||||
			'<center>'
 | 
			
		||||
				'<h3>'
 | 
			
		||||
					'<a href="#top" title="UP">UP</a>'
 | 
			
		||||
				'</h3>'
 | 
			
		||||
					'<a class="ui-button ui-widget ui-corner-all" href="#top" title="Move up">UP</a>'
 | 
			
		||||
				'</h3><br />'
 | 
			
		||||
			'</center>'
 | 
			
		||||
			'<div class="footer">'
 | 
			
		||||
				'<div class="footer-link">'
 | 
			
		||||
| 
						 | 
				
			
			@ -414,7 +417,7 @@ def choose_only_select(serv, **kwargs):
 | 
			
		|||
		print('<option value="%s" %s>%s</option>' % (listhap.get(i), selected, i))	
 | 
			
		||||
 | 
			
		||||
def chooseServer(formName, title, note):
 | 
			
		||||
	print('<center><h2>' + title + '</h2>')
 | 
			
		||||
	print('<h2>' + title + '</h2><center>')
 | 
			
		||||
	print('<h3>Choose server</h3>')
 | 
			
		||||
	print('<form action=' + formName + ' method="get">')
 | 
			
		||||
	print('<p><select autofocus required name="serv" id="chooseServer">')
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,3 @@
 | 
			
		|||
{ "name": "admin", "lists": "all" }
 | 
			
		||||
{ "name": "all", "lists": "all" }
 | 
			
		||||
{ "name": "mysql", "lists": "mysql" }
 | 
			
		||||
{ "name": "web", "lists": "web" }
 | 
			
		||||
| 
						 | 
				
			
			@ -41,8 +41,6 @@ def login_page(error):
 | 
			
		|||
	
 | 
			
		||||
if form.getvalue('logout') is not None:
 | 
			
		||||
	print("Set-cookie: login=; expires=Wed May 18 03:33:20 2003; path=/cgi-bin/; httponly")
 | 
			
		||||
	print("Set-cookie: FirstName=; expires=Wed May 18 03:33:20 2003; path=/cgi-bin/; httponly")
 | 
			
		||||
	print("Set-cookie: LastName=; expires=Wed May 18 03:33:20 2003; path=/cgi-bin/; httponly")
 | 
			
		||||
	print("Set-cookie: role=; expires=Wed May 18 03:33:20 2003; path=/cgi-bin/; httponly")
 | 
			
		||||
	print("Content-type: text/html\n")
 | 
			
		||||
	print('<meta http-equiv="refresh" content="0; url=/">')
 | 
			
		||||
| 
						 | 
				
			
			@ -58,15 +56,12 @@ if login is not None and password is not None:
 | 
			
		|||
			c["login"] = login
 | 
			
		||||
			c["login"]["path"] = "/cgi-bin/"
 | 
			
		||||
			c["login"]["expires"] = "Wed May 18 03:33:20 2033"
 | 
			
		||||
			c["FirstName"] = users['firstName']
 | 
			
		||||
			c["FirstName"]["path"] = "/cgi-bin/"
 | 
			
		||||
			c["FirstName"]["expires"] = "Wed May 18 03:33:20 2033"
 | 
			
		||||
			c["LastName"] = users['lastName']
 | 
			
		||||
			c["LastName"]["path"] = "/cgi-bin/"
 | 
			
		||||
			c["LastName"]["expires"] = "Wed May 18 03:33:20 2033"
 | 
			
		||||
			c["role"] = users['role']
 | 
			
		||||
			c["role"]["path"] = "/cgi-bin/"
 | 
			
		||||
			c["role"]["expires"] = "Wed May 18 03:33:20 2033"
 | 
			
		||||
			c["group"] = users['group']
 | 
			
		||||
			c["group"]["path"] = "/cgi-bin/"
 | 
			
		||||
			c["group"]["expires"] = "Wed May 18 03:33:20 2033"
 | 
			
		||||
			print(c)
 | 
			
		||||
			if form.getvalue('ref') is None:
 | 
			
		||||
				ref = "/index.html"		
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,9 +18,7 @@ path_config = "haproxy-webintarface.config"
 | 
			
		|||
config = configparser.ConfigParser()
 | 
			
		||||
config.read(path_config)
 | 
			
		||||
	
 | 
			
		||||
print('<center>'
 | 
			
		||||
		'<h2>HAproxy Logs</h2>'
 | 
			
		||||
	  '</center>'
 | 
			
		||||
print('<h2>HAproxy Logs</h2>'
 | 
			
		||||
		'<table class="overview">'
 | 
			
		||||
			'<tr class="overviewHead">'
 | 
			
		||||
				'<td class="padding10">Server</td>'
 | 
			
		||||
| 
						 | 
				
			
			@ -52,8 +50,14 @@ print('</td><td><input type="number" name="rows" %s class="form-control" require
 | 
			
		|||
print('<td><input type="text" name="grep" class="form-control" %s >' % grep)
 | 
			
		||||
print('</td>'
 | 
			
		||||
		'<td class="padding10" >'
 | 
			
		||||
			'<button type="submit">Show</button>'
 | 
			
		||||
		'</td>'
 | 
			
		||||
			'<button type="submit">Show</button>')
 | 
			
		||||
if form.getvalue('serv') is not None:
 | 
			
		||||
	print('<span style="float: right; margin-top: 8px;">'
 | 
			
		||||
				'<a href=""  title="Update logs" id="update">'
 | 
			
		||||
					'<img alt="Update" src="/image/pic/update.png" style="max-width: 20px;">'
 | 
			
		||||
				'</a>'
 | 
			
		||||
			'</span>')
 | 
			
		||||
print('</td>'
 | 
			
		||||
		'</form>'
 | 
			
		||||
		'</tr></table>')
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -27,11 +27,11 @@ print('<h2>Quick Status </h2>'
 | 
			
		|||
if funct.is_admin():
 | 
			
		||||
 | 
			
		||||
	print('<tr class="overviewHead">'
 | 
			
		||||
			'<td class="padding10">User name</td>'
 | 
			
		||||
			'<td class="padding10">Login</td>'
 | 
			
		||||
			'<td>Group</td>'
 | 
			
		||||
			'<td class="padding10">'
 | 
			
		||||
				'Role'
 | 
			
		||||
				'<!--<span class="add-button" title="Just a button, do nothing )">+ Add  </span>-->'
 | 
			
		||||
			'</td><td style="width: 200px;">'
 | 
			
		||||
				'<span class="add-button">'
 | 
			
		||||
					'<a href="#"  title="Show all users" id="show-all-users" style="color: #fff">'
 | 
			
		||||
						'Show all'
 | 
			
		||||
| 
						 | 
				
			
			@ -47,10 +47,10 @@ if funct.is_admin():
 | 
			
		|||
		users = json.loads(f)
 | 
			
		||||
		if i is 4:
 | 
			
		||||
			style = 'style="display: none;" class="show-users"'
 | 
			
		||||
		print('<tr ' + style + '><td class="padding10">' + users['firstName'] + ' ' + users['lastName'] +'</td><td>')
 | 
			
		||||
		print('<tr ' + style + '><td class="padding10">' + users['login'] +'</td><td>')
 | 
			
		||||
		print(users['group']+'</td><td>')
 | 
			
		||||
		print(users['role'])
 | 
			
		||||
		print('</td></tr>')
 | 
			
		||||
		print('</td><td></td></tr>')
 | 
			
		||||
 | 
			
		||||
print('<tr class="overviewHead">'
 | 
			
		||||
		'<td class="padding10">Server</td>'
 | 
			
		||||
| 
						 | 
				
			
			@ -59,10 +59,11 @@ print('<tr class="overviewHead">'
 | 
			
		|||
		'</td>'
 | 
			
		||||
		'<td class="padding10">'
 | 
			
		||||
			'Action'
 | 
			
		||||
			'<!--<span class="add-button" title="Just a button, do nothing )">+ Add</span>-->'
 | 
			
		||||
				'<a href=""  title="Update status" id="update">'
 | 
			
		||||
					'<img alt="Update" src="/image/pic/update.png" class="icon" style="margin-left: 20px; float: right">'
 | 
			
		||||
				'</a></span>'
 | 
			
		||||
		'</td>'
 | 
			
		||||
		'<td>'
 | 
			
		||||
			'<a href=""  title="Update status" id="update">'
 | 
			
		||||
				'<img alt="Update" src="/image/pic/update.png" class="icon" style="padding-right: 8px; float: right">'
 | 
			
		||||
			'</a></span>'
 | 
			
		||||
		'</td>'
 | 
			
		||||
	'</tr>')
 | 
			
		||||
	
 | 
			
		||||
| 
						 | 
				
			
			@ -70,16 +71,16 @@ listhap = funct.get_dick_after_permit()
 | 
			
		|||
 | 
			
		||||
commands = [ "ps -Af |grep [h]aproxy |wc -l" ]
 | 
			
		||||
for i in sorted(listhap):
 | 
			
		||||
	print('<tr><td class="padding10">' + i + '</td><td>')
 | 
			
		||||
	print('<tr><td class="padding10"><a href="#%s" title="Go to %s status" style="color: #000">%s</a></td><td>' % (i, i, i))
 | 
			
		||||
	funct.ssh_command(listhap.get(i), commands, server_status="1")
 | 
			
		||||
	print('</td><td>')
 | 
			
		||||
	print('<a href="/cgi-bin/configshow.py?serv=%s&open=open#conf"  title="Show config"><img src=/image/pic/show.png alt="show" class="icon"></a>' % listhap.get(i))
 | 
			
		||||
	print('<a href="/cgi-bin/config.py?serv=%s&open=open#conf"  title="Edit config"><img src=/image/pic/edit.png alt="edit" class="icon"></a>' % listhap.get(i))
 | 
			
		||||
	print('<a href="/cgi-bin/diff.py?serv=%s&open=open#diff"  title="Compare config"><img src=/image/pic/compare.png alt="compare" class="icon"></a>' % listhap.get(i))
 | 
			
		||||
	print('<a href="/cgi-bin/map.py?serv=%s&open=open#map"  title="Map listen/frontend/backend"><img src=/image/pic/map.png alt="map" class="icon"></a>' % listhap.get(i))
 | 
			
		||||
	print('</td></tr>')
 | 
			
		||||
	print('</td><td></td></tr>')
 | 
			
		||||
	
 | 
			
		||||
print('</table><table><tr class="overviewHead">'
 | 
			
		||||
print('</table><table class="overview"><tr class="overviewHead">'
 | 
			
		||||
		'<td class="padding10">Server</td>'
 | 
			
		||||
		'<td class="padding10">'
 | 
			
		||||
			'Server status'
 | 
			
		||||
| 
						 | 
				
			
			@ -87,12 +88,13 @@ print('</table><table><tr class="overviewHead">'
 | 
			
		|||
				'<a href=""  title="Update status" id="update">'
 | 
			
		||||
					'<img alt="Update" src="/image/pic/update.png" style="max-width: 20px;">'
 | 
			
		||||
				'</a>'
 | 
			
		||||
			'</span>'
 | 
			
		||||
		'</td>'
 | 
			
		||||
	'</tr>')
 | 
			
		||||
print('</td></tr>')
 | 
			
		||||
commands = [ "cat /etc/haproxy/haproxy.cfg |grep -E '^listen|^backend|^frontend' |grep -v stats |wc -l", "uname -smor", "haproxy -v |head -1", "top -u haproxy -b -n 1" ]
 | 
			
		||||
for i in sorted(listhap):
 | 
			
		||||
	print('<tr><td class="overviewTr"><h3 title="IP ' + listhap.get(i) + '">' + i + ':</h3></td>')
 | 
			
		||||
	print('<tr><td class="overviewTr"><a name="'+i+'"></a><h3 title="IP ' + listhap.get(i) + '">' + i + ':</h3></td>')
 | 
			
		||||
	print('<td class="overviewTd"><span style="margin-left: -10px;">Total listen/frontend/backend:</span><pre>')
 | 
			
		||||
	funct.ssh_command(listhap.get(i), commands)
 | 
			
		||||
	print('</pre></td></tr>')
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,3 @@
 | 
			
		|||
{ "firstName": "admin", "lastName": "admin", "login": "admin", "password": "admin", "role": "admin", "group": "admin" }
 | 
			
		||||
{ "firstName": "Editor", "lastName": "Editor", "login": "Editor", "password": "Editor@123", "role": "editor", "group": "admin" }
 | 
			
		||||
{ "firstName": "Guest", "lastName": "Guest", "login": "Guest", "password": "Guest@123", "role": "guest", "group": "admin" }
 | 
			
		||||
{ "login": "admin", "password": "admin", "role": "admin", "group": "all" }
 | 
			
		||||
{ "login": "Editor", "password": "Editor@123", "role": "editor", "group": "all" }
 | 
			
		||||
{ "login": "Guest", "password": "Guest@123", "role": "guest", "group": "all" }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										16
									
								
								script.js
								
								
								
								
							
							
						
						
									
										16
									
								
								script.js
								
								
								
								
							| 
						 | 
				
			
			@ -4,16 +4,17 @@ $( function() {
 | 
			
		|||
		$( "#tabs" ).tabs( "option", "active", 2 );
 | 
			
		||||
	} );
 | 
			
		||||
	$( "select" ).selectmenu();
 | 
			
		||||
 | 
			
		||||
		
 | 
			
		||||
    var tooltips = $( "[title]" ).tooltip({
 | 
			
		||||
      position: {
 | 
			
		||||
        my: "left top",
 | 
			
		||||
        at: "right+5 top-5",
 | 
			
		||||
        at: "right+5 top-25",
 | 
			
		||||
        collision: "none"
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
	$( "input[type=submit], button" ).button();
 | 
			
		||||
	$( "input[type=checkbox]" ).checkboxradio();
 | 
			
		||||
	$( "#number" ).spinner();
 | 
			
		||||
	$( ".controlgroup" ).controlgroup();
 | 
			
		||||
	$( ".configShow" ).accordion({
 | 
			
		||||
      collapsible: true,
 | 
			
		||||
| 
						 | 
				
			
			@ -261,4 +262,13 @@ $( function() {
 | 
			
		|||
			$("#optionsInput2").append(ui.item.value + " ")
 | 
			
		||||
		}
 | 
			
		||||
	});
 | 
			
		||||
} );
 | 
			
		||||
	input = $('<tr><td><input type="text" name="login-add" value="" class="form-control"></td>	<td><input type="passwrod" name="passwrod-add" value="" class="form-control"></td> <td><input type="text" name="role-add" value="" class="form-control"></td><td><input type="text" name="groups-add" value="" class="form-control"></td></tr>');
 | 
			
		||||
	$( "#add-user" ).click( function(){
 | 
			
		||||
		$( "#users-table" ).append(input);
 | 
			
		||||
	});
 | 
			
		||||
} );
 | 
			
		||||
 | 
			
		||||
function removeUser(id) {
 | 
			
		||||
	document.getElementById(id).parentNode.removeChild(document.getElementById(id));
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										25
									
								
								style.css
								
								
								
								
							
							
						
						
									
										25
									
								
								style.css
								
								
								
								
							| 
						 | 
				
			
			@ -150,6 +150,12 @@ iframe {
 | 
			
		|||
	padding-left: 10px;
 | 
			
		||||
	padding-right: 10px;
 | 
			
		||||
}
 | 
			
		||||
.line:hover, .line3:hover, tr:hover {
 | 
			
		||||
	background-color: #EEEEEE;
 | 
			
		||||
}
 | 
			
		||||
.overviewHead:hover {
 | 
			
		||||
	background-color: #EBF1F1
 | 
			
		||||
}	
 | 
			
		||||
.comment {
 | 
			
		||||
	color: #aaa;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -164,6 +170,9 @@ iframe {
 | 
			
		|||
.addButton {
 | 
			
		||||
	padding-top: 15px;
 | 
			
		||||
}
 | 
			
		||||
.addButton:hover {
 | 
			
		||||
	background-color: #fff;
 | 
			
		||||
}
 | 
			
		||||
.addSuc {
 | 
			
		||||
	padding-left: 20px;
 | 
			
		||||
	padding-top: 20px;
 | 
			
		||||
| 
						 | 
				
			
			@ -220,12 +229,12 @@ iframe {
 | 
			
		|||
.add-button {
 | 
			
		||||
	background-color: #5CB85C; 
 | 
			
		||||
	border-radius: 5px;
 | 
			
		||||
	margin-left: 20px;
 | 
			
		||||
	color: #fff; 
 | 
			
		||||
	padding: 5px;
 | 
			
		||||
	padding-right: 10px;
 | 
			
		||||
	padding-left: 10px;
 | 
			
		||||
	float: right;
 | 
			
		||||
	margin-right: 10px;
 | 
			
		||||
}
 | 
			
		||||
.serverDown {
 | 
			
		||||
	background-color: red; 
 | 
			
		||||
| 
						 | 
				
			
			@ -237,6 +246,16 @@ iframe {
 | 
			
		|||
.ro {
 | 
			
		||||
  border: none;
 | 
			
		||||
}
 | 
			
		||||
.remove {
 | 
			
		||||
    color: #fff;
 | 
			
		||||
    text-shadow: 0 1px 0 rgba(0,0,0,.1);
 | 
			
		||||
    background-color: #ca4333;
 | 
			
		||||
    background-image: linear-gradient(180deg,#d44a3a,#bc3829);
 | 
			
		||||
    background-repeat: repeat-x;
 | 
			
		||||
    border-color: #d44a3a;
 | 
			
		||||
	padding: 5px;
 | 
			
		||||
	border-radius: 3px;
 | 
			
		||||
}
 | 
			
		||||
.menu {
 | 
			
		||||
	margin-left: 13%;
 | 
			
		||||
	font-weight: bold;
 | 
			
		||||
| 
						 | 
				
			
			@ -319,6 +338,10 @@ iframe {
 | 
			
		|||
	background-color: #5D9CEB !important;
 | 
			
		||||
	border-color: #5D9CEB !important;
 | 
			
		||||
}
 | 
			
		||||
.ui-button {
 | 
			
		||||
	padding-left: 10px !important;
 | 
			
		||||
	padding-right: 10px !important;
 | 
			
		||||
}
 | 
			
		||||
.ui-tooltip, .arrow:after {
 | 
			
		||||
    background: #33414E !important;
 | 
			
		||||
    border: 1px solid #33414E !important;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue