diff --git a/README.md b/README.md index 458a1ec1..f6317535 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -#Meet Haproxy-wi 2.0! Now with DB and Admin web interface! Life has become easier, life has become more cheerful! +# Meet Haproxy-wi 2.0! Now with DB and Admin web interface! Life has become easier, life has become more cheerful! # Haproxy web interface A simple web interface(user-frendly web GUI) for managing Haproxy servers. Leave your [feedback](https://github.com/Aidaho12/haproxy-wi/issues) diff --git a/cgi-bin/funct.py b/cgi-bin/funct.py index ec91ec8c..0edb048f 100644 --- a/cgi-bin/funct.py +++ b/cgi-bin/funct.py @@ -161,7 +161,6 @@ def links(): '<ul>' '<li><a href=/cgi-bin/overview.py title="Server and service status" class="overview-link">Overview</a> </li>' '<li><a href=/cgi-bin/viewsttats.py title"Show stats" class="stats">Stats</a> </li>' - '<li><a href="http://172.28.5.106:3000/d/000000002/haproxy?refresh=1m&orgId=1" title="Mon" target="_blanck" class="mon">Monitoring</a> </li>' '<li><a href=/cgi-bin/logs.py title="View logs" class="logs">Logs</a></li>' '<li><a href=/cgi-bin/map.py title="View map" class="map">Map</a></li>' '</ul>' @@ -198,7 +197,7 @@ def links(): '</li>') print('</ul>' '</nav>' - '<div class="copyright-menu">HAproxy-WI v2.0</div>' + '<div class="copyright-menu">HAproxy-WI v2.0.0.1</div>' '</div>') def show_login_links(): diff --git a/cgi-bin/sql.py b/cgi-bin/sql.py index d230e4cc..a51dc035 100644 --- a/cgi-bin/sql.py +++ b/cgi-bin/sql.py @@ -15,7 +15,10 @@ def add_user(user, email, password, role, group): with con: cur.executescript(sql) except sqlite.Error as e: - print("An error occurred:", e.args[0]) + print('<br /><span class="alert alert-danger" id="error">An error occurred: ' + e.args[0] + '</span>') + return False + else: + return True cur.close() con.close() @@ -31,7 +34,10 @@ def update_user(user, email, password, role, group, id): with con: cur.executescript(sql) except sqlite.Error as e: - print("An error occurred:", e.args[0]) + print('<br /><span class="alert alert-danger" id="error">An error occurred: ' + e.args[0] + '</span>') + return False + else: + return True cur.close() con.close() @@ -54,7 +60,10 @@ def add_group(name, description): with con: cur.executescript(sql) except sqlite.Error as e: - print("An error occurred:", e.args[0]) + print('<br /><span class="alert alert-danger" id="error">An error occurred: ' + e.args[0] + '</span>') + return False + else: + return True cur.close() con.close() @@ -65,7 +74,7 @@ def delete_group(id): with con: cur.executescript(sql) except sqlite.Error as e: - print("An error occurred:", e.args[0]) + print('<br /><span class="alert alert-danger" id="error">An error occurred: ' + e.args[0] + '</span>') else: return True cur.close() @@ -82,7 +91,10 @@ def update_group(name, descript, id): with con: cur.executescript(sql) except sqlite.Error as e: - print("An error occurred:", e.args[0]) + print('<br /><span class="alert alert-danger" id="error">An error occurred: ' + e.args[0] + '</span>') + return False + else: + return True cur.close() con.close() @@ -93,7 +105,10 @@ def add_server(hostname, ip, group): with con: cur.executescript(sql) except sqlite.Error as e: - print("An error occurred:", e.args[0]) + print('<br /><span class="alert alert-danger" id="error">An error occurred: ' + e.args[0] + '</span>') + return False + else: + return True cur.close() con.close() @@ -104,7 +119,7 @@ def delete_server(id): with con: cur.executescript(sql) except sqlite.Error as e: - print("An error occurred:", e.args[0]) + print('<br /><span class="alert alert-danger" id="error">An error occurred: ' + e.args[0] + '</span>') else: return True cur.close() @@ -121,7 +136,7 @@ def update_server(hostname, ip, group, id): with con: cur.executescript(sql) except sqlite.Error as e: - print("An error occurred:", e.args[0]) + print('<br /><span class="alert alert-danger" id="error">An error occurred: ' + e.args[0] + '</span>') cur.close() con.close() @@ -147,7 +162,7 @@ def select_groups(**kwargs): try: cur.execute(sql) except sqlite.Error as e: - print("An error occurred:", e.args[0]) + print('<br /><span class="alert alert-danger" id="error">An error occurred: ' + e.args[0] + '</span>') else: return cur.fetchall() cur.close() @@ -159,7 +174,7 @@ def select_user_name_group(id): try: cur.execute(sql) except sqlite.Error as e: - print("An error occurred:", e.args[0]) + print('<br /><span class="alert alert-danger" id="error">An error occurred: ' + e.args[0] + '</span>') else: return cur.fetchone() cur.close() @@ -232,7 +247,7 @@ def show_update_servers(): '</tr>') for server in SERVERS: print('<tr id="server-%s">' % server[0]) - print('<td class="padding10"><input type="text" name="server-%s" value="%s" class="form-control" onclick="deleteServer(%s)"></td>' % (server[0], server[1], server[0])) + print('<td class="padding10 first-collumn"><input type="text" name="server-%s" value="%s" class="form-control"></td>' % (server[0], server[1])) print('<td><input type="text" name="descript-%s" value="%s" class="form-control"></td>' % (server[0], server[2])) print('<td>') get_groups_select("123", selected=server[3]) @@ -244,7 +259,7 @@ def show_update_user(user): USERS = select_users(user=user) for users in USERS: print('<tr id="user-%s">' % users[0]) - print('<td class="padding10"><input type="text" id="login-%s" value="%s" class="form-control"></td>' % (users[0], users[1])) + print('<td class="padding10 first-collumn"><input type="text" id="login-%s" value="%s" class="form-control"></td>' % (users[0], users[1])) print('<td><input type="password" id="password-%s" value="%s" class="form-control"></td>' % (users[0], users[3])) print('<td><input type="text" id="email-%s" value="%s" class="form-control"></td>' % (users[0], users[2])) print('<td>') @@ -263,12 +278,12 @@ def show_update_server(server): SERVERS = select_servers(server=server) for server in SERVERS: print('<tr id="server-%s">' % server[0]) - print('<td class="padding10"><input type="text" name="hostname-%s" value="%s" class="form-control" onclick="deleteServer(%s)"></td>' % (server[0], server[1], server[0])) + print('<td class="padding10 first-collumn"><input type="text" name="hostname-%s" value="%s" class="form-control"></td>' % (server[0], server[1])) print('<td><input type="text" name="ip-%s" value="%s" class="form-control"></td>' % (server[0], server[2])) print('<td>') get_groups_select("123", selected=server[3]) print('</td>') - print('<td><a class="update-row" onclick="updateServer(%s)" style="cursor: pointer;"></a></td>' % users[0]) + print('<td><a class="update-row" onclick="updateServer(%s)" style="cursor: pointer;"></a></td>' % server[0]) print('<td><a class="delete" onclick="removeServer(%s)" style="cursor: pointer;"></a></td>' % server[0]) print('</tr>') @@ -323,7 +338,9 @@ def get_roles_select(id, **kwargs): selected = "" print('<option value="%s" %s>%s</option>' % (role[1], selected, role[1])) print('</select>') + form = cgi.FieldStorage() +error_mess = '<br /><span class="alert alert-danger" id="error">All fields must be completed <a title="Close" id="errorMess"><b>X</b></a></span>' if form.getvalue('newusername') is not None: email = form.getvalue('newemail') @@ -333,11 +350,11 @@ if form.getvalue('newusername') is not None: new_user = form.getvalue('newusername') if password is None or role is None or group is None: print('Content-type: text/html\n') - print("All fields must be completed") + print(error_mess) else: print('Content-type: text/html\n') - add_user(new_user, email, password, role, group) - show_update_user(new_user) + if add_user(new_user, email, password, role, group): + show_update_user(new_user) if form.getvalue('updateuser') is not None: email = form.getvalue('email') @@ -348,7 +365,7 @@ if form.getvalue('updateuser') is not None: id = form.getvalue('id') if password is None or role is None or group is None: print('Content-type: text/html\n') - print("All fields must be completed") + print(error_mess) else: print('Content-type: text/html\n') update_user(new_user, email, password, role, group, id) @@ -364,11 +381,11 @@ if form.getvalue('newserver') is not None: group = form.getvalue('newservergroup') if ip is None or group is None: print('Content-type: text/html\n') - print("All fields must be completed") + print(error_mess) else: print('Content-type: text/html\n') - add_server(hostname, ip, group) - show_update_server(hostname) + if add_server(hostname, ip, group): + show_update_server(hostname) if form.getvalue('serverdel') is not None: print('Content-type: text/html\n') @@ -379,8 +396,8 @@ if form.getvalue('newgroup') is not None: newgroup = form.getvalue('newgroup') desc = form.getvalue('newdesc') print('Content-type: text/html\n') - add_group(newgroup, desc) - show_update_group(newgroup) + if add_group(newgroup, desc): + show_update_group(newgroup) if form.getvalue('groupdel') is not None: print('Content-type: text/html\n') @@ -393,7 +410,7 @@ if form.getvalue('updategroup') is not None: id = form.getvalue('id') if name is None: print('Content-type: text/html\n') - print("All fields must be completed") + print(error_mess) else: print('Content-type: text/html\n') update_group(name, descript, id) @@ -405,7 +422,7 @@ if form.getvalue('updateserver') is not None: id = form.getvalue('id') if name is None or ip is None: print('Content-type: text/html\n') - print("All fields must be completed") + print(error_mess) else: print('Content-type: text/html\n') update_server(name, ip, group, id) diff --git a/cgi-bin/users.py b/cgi-bin/users.py index 214c623f..1a866614 100644 --- a/cgi-bin/users.py +++ b/cgi-bin/users.py @@ -74,7 +74,7 @@ sql.get_roles_select("new-role") print('</td><td>') sql.get_groups_select("new-group") print('</td>' - '<td><a class="add" id="add-user" style="cursor: pointer;"></a></td>' + '<td><a class="add-admin" id="add-user" style="cursor: pointer;"></a></td>' '</tr>') print('</table>') @@ -105,7 +105,7 @@ print('<br /><br /><table class="overview" id="group-add-table" style="display: '<tr>' '<td class="padding10 first-collumn"><input type="text" name="new-group-add" id="new-group-add" class="form-control"></td>' '<td><input type="text" name="new-desc" id="new-desc" class="form-control" size="100"></td>' - '<td><a class="add" id="add-group" style="cursor: pointer;"></a></td>' + '<td><a class="add-admin" id="add-group" style="cursor: pointer;"></a></td>' '</tr>' '</table>' '</div>' @@ -144,7 +144,7 @@ print('</table>' '<td><input type="text" name="new-ip" id="new-ip" class="form-control"></td><td>') sql.get_groups_select("new-server-group-add") print('</td>' - '<td><a class="add" id="add-server" style="cursor: pointer;"></a></td>' + '<td><a class="add-admin" id="add-server" style="cursor: pointer;"></a></td>' '</tr>') print('</table>') diff --git a/inc/awesome.css b/inc/awesome.css index fd54f6c2..8c9b7f76 100644 --- a/inc/awesome.css +++ b/inc/awesome.css @@ -101,7 +101,7 @@ font-family: "Font Awesome 5 Solid"; content: "\f2b9"; } -.add:before { +.add-admin:before { display: none; font-family: "Font Awesome 5 Solid"; content: "\f00c"; diff --git a/inc/script.js b/inc/script.js index dfb8ea40..8c6ad769 100644 --- a/inc/script.js +++ b/inc/script.js @@ -108,7 +108,6 @@ function showStats() { type: "GET", success: function( data ) { $("#ajax").html(data); - $.getScript(url); window.history.pushState("Stats", "Stats", cur_url[0]+"?serv="+$("#serv").val()); } } ); @@ -296,7 +295,7 @@ $( function() { var cur_url = '/cgi-bin/' + location.split('/').pop(); cur_url = cur_url.split('?'); - $('.menu ').each(function () { + $('.menu li').each(function () { var link = $(this).find('a').attr('href'); if (cur_url[0] == link) diff --git a/inc/style.css b/inc/style.css index 70de6513..8bedcdfa 100644 --- a/inc/style.css +++ b/inc/style.css @@ -37,6 +37,7 @@ pre { .icon { max-width: 20px; margin-left: 2px; + cursor: pointer; } .top-menu { position: fixed; @@ -385,7 +386,9 @@ pre { } .ui-state-active { background-color: #5D9CEB !important; + border: none !important; border-color: #5D9CEB !important; + font-weight: bold !important; } .ui-button { padding-left: 10px !important; @@ -400,6 +403,9 @@ pre { .ui-tabs-nav { padding-left: 20px !important; } + .ui-widget-header { + background: #5d9ceb !important; + } a { background-color: transparent; } @@ -503,9 +509,24 @@ a:focus { margin-left: -15px; } .update { - background-color: rgb(0,168,107) !important; + background-color: #dff0d8 !important; +} +.alert { + padding:15px; + margin-bottom:20px; + border:1px solid transparent; + border-radius:4px +} +.alert a { + cursor: pointer; + font-weight: bold; + padding-left: 10px; +} +.alert-danger { + color:#a94442; + background-color:#f2dede; + border-color:#ebccd1 } - label { display: inline-block; max-width: 100%; diff --git a/inc/users.js b/inc/users.js index 3c74f18b..964341aa 100644 --- a/inc/users.js +++ b/inc/users.js @@ -1,5 +1,9 @@ +var users = '/inc/usersdop.js' $( function() { + $('#error').hide(); + $('#add-user').click(function() { + $('#error').hide(); $.ajax( { url: "sql.py", data: { @@ -11,12 +15,14 @@ $( function() { }, type: "GET", success: function( data ) { - if (data == "All fields must be completed ") { - alert(data); + data = data.replace(/\s+/g,' '); + if (data == '<br /><span class="alert alert-danger" id="error">All fields must be completed <a title="Close" id="errorMess"><b>X</b></a></span> ') { + $("#ajax-users").append(data); + $.getScript(users); } else { $("#ajax-users").append(data); $( "#ajax-users tr td" ).addClass( "update", 1000, callbackUser ); - $.getScript(url); + $.getScript(url); } } } ); @@ -37,6 +43,7 @@ $( function() { } ); }); $('#add-server').click(function() { + $('#error').hide(); $.ajax( { url: "sql.py", data: { @@ -47,8 +54,9 @@ $( function() { type: "GET", success: function( data ) { data = data.replace(/\s+/g,' '); - if (data == "All fields must be completed ") { - alert(data); + if (data == '<br /><span class="alert alert-danger" id="error">All fields must be completed <a title="Close" id="errorMess"><b>X</b></a></span> ') { + $("#ajax-servers").append(data); + $.getScript(users); } else { $("#ajax-servers").append(data); $( "#ajax-servers tr td" ).addClass( "update", 1000, callback ); @@ -93,7 +101,7 @@ $( function() { } ); function removeUser(id) { - $("#user-"+id).css("background-color", "#f36223"); + $("#user-"+id).css("background-color", "#f2dede"); $.ajax( { url: "sql.py", data: { @@ -109,7 +117,7 @@ function removeUser(id) { } ); } function removeServer(id) { - $("#server-"+id).css("background-color", "#f36223"); + $("#server-"+id).css("background-color", "#f2dede"); $.ajax( { url: "sql.py", data: { @@ -125,7 +133,7 @@ function removeServer(id) { } ); } function removeGroup(id) { - $("#group-"+id).css("background-color", "#f36223"); + $("#group-"+id).css("background-color", "#f2dede"); $.ajax( { url: "sql.py", data: { diff --git a/inc/usersdop.js b/inc/usersdop.js new file mode 100644 index 00000000..5d04e22b --- /dev/null +++ b/inc/usersdop.js @@ -0,0 +1,5 @@ +$( function() { + $('#errorMess').click(function() { + $('#error').hide(); + }); +}); \ No newline at end of file