diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 8581230d..3e0f3c16 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -9,4 +9,4 @@ community_bridge: # Replace with a single Community Bridge project-name e.g., cl liberapay: # Replace with a single Liberapay username issuehunt: # Replace with a single IssueHunt username otechie: # Replace with a single Otechie username -custom: ['https://paypal.me/loginovpavel', 'https://money.yandex.ru/to/410015575994949'] +custom: ['https://paypal.me/loginovpavel'] diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index c46393b2..00000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,3 +0,0 @@ -Feel free to contribute and build the best HAProxy web interface. - -Python 3.4 what's all =^.^= diff --git a/README.md b/README.md index b42c3e1d..95d3f32f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Haproxy web interface +# HAProxy-WI Web interface(user-friendly web GUI, alerting, monitoring and secure) for managing HAProxy servers. Leave your [feedback](https://github.com/Aidaho12/haproxy-wi/issues) # Youtube diff --git a/app/add.py b/app/add.py index 6b6e5dc4..979f6d7a 100644 --- a/app/add.py +++ b/app/add.py @@ -1,5 +1,4 @@ #!/usr/bin/env python3 -import cgi import os import funct import sql @@ -20,12 +19,8 @@ funct.check_login() funct.page_for_admin(level = 2) try: - cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) - user_id = cookie.get('uuid') - user = sql.get_user_name_by_uuid(user_id.value) - servers = sql.get_dick_permit() + user, user_id, role, token, servers = funct.get_users_params() user_group = sql.get_user_group_by_uuid(user_id.value) - token = sql.get_token(user_id.value) except: pass @@ -46,7 +41,7 @@ black_lists = funct.get_files(dir=black_dir, format="lst") template = template.render(title = "Add", - role = sql.get_user_role_by_uuid(user_id.value), + role = role, user = user, selects = servers, add = form.getvalue('add'), diff --git a/app/config.py b/app/config.py index 1191862c..6edabbaf 100644 --- a/app/config.py +++ b/app/config.py @@ -1,7 +1,5 @@ #!/usr/bin/env python3 -import cgi import os -import http.cookies import funct import sql from jinja2 import Environment, FileSystemLoader @@ -21,15 +19,10 @@ error = "" aftersave = "" try: - cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) - user_id = cookie.get('uuid') - user = sql.get_user_name_by_uuid(user_id.value) - token = sql.get_token(user_id.value) - role = sql.get_user_role_by_uuid(user_id.value) + user, user_id, role, token, servers = funct.get_users_params() except: pass - if service == 'keepalived': title = "Working with Keepalived configs" action = "config.py?service=keepalived" diff --git a/app/funct.py b/app/funct.py index 00b9c19d..98283c48 100644 --- a/app/funct.py +++ b/app/funct.py @@ -5,11 +5,13 @@ import os, sys form = cgi.FieldStorage() serv = form.getvalue('serv') + def get_app_dir(): d = sys.path[0] d = d.split('/')[-1] return sys.path[0] if d == "app" else os.path.dirname(sys.path[0]) + def get_config_var(sec, var): from configparser import ConfigParser, ExtendedInterpolation try: @@ -25,6 +27,7 @@ def get_config_var(sec, var): print('Content-type: text/html\n') print('
Check the config file. Presence section %s and parameter %s
' % (sec, var)) + def get_data(type): from datetime import datetime from pytz import timezone @@ -111,6 +114,7 @@ def telegram_send_mess(mess, **kwargs): logging('localhost', mess, haproxywi=1) sys.exit() + def check_login(**kwargs): import sql import http.cookies @@ -129,6 +133,7 @@ def check_login(**kwargs): print('' % ref) return False + def is_admin(**kwargs): import sql import http.cookies @@ -150,6 +155,7 @@ def is_admin(**kwargs): return False pass + def page_for_admin(**kwargs): give_level = 1 give_level = kwargs.get("level") @@ -227,6 +233,7 @@ def ssh_connect(serv, **kwargs): pass return str(error) + def get_config(serv, cfg, **kwargs): import sql @@ -254,6 +261,7 @@ def get_config(serv, cfg, **kwargs): logging('localhost', ssh, haproxywi=1) return ssh + def diff_config(oldcfg, cfg): log_path = get_config_var('main', 'log_path') diff = "" @@ -898,4 +906,21 @@ def out_error(e): else: error = e.args[0] print('An error occurred: ' + error + ' X') - \ No newline at end of file + + +def get_users_params(**kwargs): + import http.cookies + import sql + cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) + user_id = cookie.get('uuid') + user = sql.get_user_name_by_uuid(user_id.value) + role = sql.get_user_role_by_uuid(user_id.value) + token = sql.get_token(user_id.value) + if kwargs.get('virt'): + servers = sql.get_dick_permit(virt=1) + elif kwargs.get('disable'): + servers = sql.get_dick_permit(disable=0) + else: + servers = sql.get_dick_permit() + + return user, user_id, role, token, servers \ No newline at end of file diff --git a/app/ha.py b/app/ha.py index dddc6f98..ca93c2ec 100644 --- a/app/ha.py +++ b/app/ha.py @@ -1,8 +1,5 @@ #!/usr/bin/env python3 -import http.cookies -import cgi -import os -import funct, sql +import funct from jinja2 import Environment, FileSystemLoader env = Environment(loader=FileSystemLoader('templates/')) template = env.get_template('ha.html') @@ -15,17 +12,13 @@ form = funct.form serv = form.getvalue('serv') try: - cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) - user_id = cookie.get('uuid') - user = sql.get_user_name_by_uuid(user_id.value) - servers = sql.get_dick_permit() - token = sql.get_token(user_id.value) + user, user_id, role, token, servers = funct.get_users_params() except: pass output_from_parsed_template = template.render(h2 = 1, title = "Configure HA", - role = sql.get_user_role_by_uuid(user_id.value), + role = role, user = user, serv = serv, selects = servers, diff --git a/app/hapservers.py b/app/hapservers.py index 6ae42206..2e7a5821 100644 --- a/app/hapservers.py +++ b/app/hapservers.py @@ -1,7 +1,5 @@ #!/usr/bin/env python3 import funct, sql -import os, http.cookies -import cgi from jinja2 import Environment, FileSystemLoader env = Environment(loader=FileSystemLoader('templates/')) template = env.get_template('hapservers.html') @@ -10,12 +8,9 @@ print('Content-type: text/html\n') funct.check_login() try: - cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) - user_id = cookie.get('uuid') - user = sql.get_user_name_by_uuid(user_id.value) + user, user_id, role, token, servers = funct.get_users_params() users = sql.select_users() groups = sql.select_groups() - token = sql.get_token(user_id.value) except: pass @@ -80,7 +75,7 @@ for s in servers: template = template.render(h2 = 1, autorefresh = autorefresh, title = title, - role = sql.get_user_role_by_uuid(user_id.value), + role = role, user = user, users = users, groups = groups, diff --git a/app/logs.py b/app/logs.py index 73bd59be..d9f9333c 100644 --- a/app/logs.py +++ b/app/logs.py @@ -1,9 +1,5 @@ #!/usr/bin/env python3 - -import cgi import funct -import sql -import os, http from jinja2 import Environment, FileSystemLoader env = Environment(loader=FileSystemLoader('templates/')) template = env.get_template('logs.html') @@ -30,11 +26,7 @@ print('Content-type: text/html\n') funct.check_login() try: - cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) - user_id = cookie.get('uuid') - user = sql.get_user_name_by_uuid(user_id.value) - servers = sql.get_dick_permit() - token = sql.get_token(user_id.value) + user, user_id, role, token, servers = funct.get_users_params() except: pass @@ -46,7 +38,7 @@ else: template = template.render(h2 = 1, autorefresh = 1, title = title, - role = sql.get_user_role_by_uuid(user_id.value), + role = role, user = user, onclick = "showLog()", select_id = "serv", diff --git a/app/metrics.py b/app/metrics.py index 0e6a582b..7e3e3da8 100644 --- a/app/metrics.py +++ b/app/metrics.py @@ -1,7 +1,5 @@ #!/usr/bin/env python3 -import os import sql -import http.cookies import funct import sql from jinja2 import Environment, FileSystemLoader @@ -12,17 +10,14 @@ print('Content-type: text/html\n') funct.check_login() try: - cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) - user_id = cookie.get('uuid') - user = sql.get_user_name_by_uuid(user_id.value) - token = sql.get_token(user_id.value) + user, user_id, role, token, servers = funct.get_users_params() except: pass template = template.render(h2 = 1, title = "Metrics", autorefresh = 1, - role = sql.get_user_role_by_uuid(user_id.value), + role = role, user = user, servers = sql.select_servers_metrics(user_id.value), versions = funct.versions(), diff --git a/app/overview.py b/app/overview.py index 143603a4..91c6695e 100644 --- a/app/overview.py +++ b/app/overview.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 import funct, sql import create_db -import os, http.cookies from jinja2 import Environment, FileSystemLoader env = Environment(loader=FileSystemLoader('templates/')) template = env.get_template('ovw.html') @@ -14,13 +13,9 @@ create_db.update_all_silent() funct.check_login() try: - cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) - user_id = cookie.get('uuid') - user = sql.get_user_name_by_uuid(user_id.value) + user, user_id, role, token, servers = funct.get_users_params() users = sql.select_users() groups = sql.select_groups() - token = sql.get_token(user_id.value) - role = sql.get_user_role_by_uuid(user_id.value) cmd = "ps ax |grep checker_mas |grep -v grep |wc -l" checker_master, stderr = funct.subprocess_execute(cmd) cmd = "ps ax |grep checker_worker |grep -v grep |wc -l" @@ -33,7 +28,6 @@ try: keep_alive, stderr = funct.subprocess_execute(cmd) cmd = "ps ax |grep '(wsgi:api)'|grep -v grep|wc -l" api, stderr = funct.subprocess_execute(cmd) - servers = sql.get_dick_permit() except: role = '' user = '' diff --git a/app/edit.py b/app/runtimeapi.py similarity index 71% rename from app/edit.py rename to app/runtimeapi.py index 1cba68c1..49084098 100644 --- a/app/edit.py +++ b/app/runtimeapi.py @@ -1,8 +1,5 @@ #!/usr/bin/env python3 -import os -import http, cgi import funct -import sql from jinja2 import Environment, FileSystemLoader env = Environment(loader=FileSystemLoader('templates/')) template = env.get_template('runtimeapi.html') @@ -12,11 +9,7 @@ funct.check_login() form = funct.form try: - cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) - user_id = cookie.get('uuid') - user = sql.get_user_name_by_uuid(user_id.value) - servers = sql.get_dick_permit(virt=1) - token = sql.get_token(user_id.value) + user, user_id, role, token, servers = funct.get_users_params(virt=1) servbackend = form.getvalue('servbackend') serv = form.getvalue('serv') if servbackend is None: @@ -27,7 +20,7 @@ except: output_from_parsed_template = template.render(h2 = 1, title = "Runtime API", - role = sql.get_user_role_by_uuid(user_id.value), + role = role, user = user, onclick = "showRuntime()", select_id = "serv", diff --git a/app/sections.py b/app/sections.py index 09553aec..bac950ba 100644 --- a/app/sections.py +++ b/app/sections.py @@ -1,9 +1,6 @@ #!/usr/bin/env python3 -import cgi import os -import http.cookies import funct -import sql from jinja2 import Environment, FileSystemLoader env = Environment(loader=FileSystemLoader('templates/'), autoescape=True,extensions=['jinja2.ext.loopcontrols']) template = env.get_template('sections.html') @@ -24,12 +21,7 @@ start_line = "" end_line = "" try: - cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) - user_id = cookie.get('uuid') - user = sql.get_user_name_by_uuid(user_id.value) - servers = sql.get_dick_permit() - token = sql.get_token(user_id.value) - role = sql.get_user_role_by_uuid(user_id.value) + user, user_id, role, token, servers = funct.get_users_params() except: pass diff --git a/app/servers.py b/app/servers.py index 8386fa8d..d252683f 100644 --- a/app/servers.py +++ b/app/servers.py @@ -1,8 +1,4 @@ #!/usr/bin/env python3 -import http -import cgi -import sys -import os import funct import sql from jinja2 import Environment, FileSystemLoader @@ -14,18 +10,14 @@ print('Content-type: text/html\n') funct.check_login() funct.page_for_admin(level = 2) try: - cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) - user_id = cookie.get('uuid') - user = sql.get_user_name_by_uuid(user_id.value) - servers = sql.get_dick_permit() - token = sql.get_token(user_id.value) + user, user_id, role, token, servers = funct.get_users_params() ldap_enable = sql.get_setting('ldap_enable') except: pass output_from_parsed_template = template.render(title = "Servers manage", - role = sql.get_user_role_by_uuid(user_id.value), + role = role, user = user, users = sql.select_users(), groups = sql.select_groups(), diff --git a/app/templates/base.html b/app/templates/base.html index e5a3f53f..c4cdda80 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -58,7 +58,7 @@
  • Overview
  • Configs
  • Stats
  • -
  • Runtime API
  • +
  • Runtime API
  • Metrics
  • {% if role <= 2 %}
  • Add proxy
  • diff --git a/app/templates/delver.html b/app/templates/delver.html index 974385d1..9ac1fcd2 100644 --- a/app/templates/delver.html +++ b/app/templates/delver.html @@ -14,6 +14,18 @@ {% endif %}

    + {% if aftersave %} +
    The following files have been deleted:
    + {% if stderr %} + {% include 'include/errors.html' %} + {% else %} +
    + {% for f in file %} + {{f}} + {% endfor %} +
    + {% endif %} + {% endif %} {% if open %}

    Choose old version

    @@ -35,17 +47,5 @@
    {% endif %} - {% if aftersave %} -
    The following files were deleted:
    - {% if stderr %} - {% include 'include/errors.html' %} - {% else %} -
    - {% for f in file %} - {{f}} - {% endfor %} -
    - {% endif %} - {% endif %}
    {% endblock %} \ No newline at end of file diff --git a/app/users.py b/app/users.py index 019aa490..12532b61 100644 --- a/app/users.py +++ b/app/users.py @@ -1,10 +1,5 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- - -import http -import cgi -import sys -import os import funct import sql from jinja2 import Environment, FileSystemLoader @@ -17,12 +12,8 @@ print('Content-type: text/html\n') funct.check_login() funct.page_for_admin() try: - cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) - user_id = cookie.get('uuid') - user = sql.get_user_name_by_uuid(user_id.value) + user, user_id, role, token, servers = funct.get_users_params() users = sql.select_users() - servers = sql.get_dick_permit() - token = sql.get_token(user_id.value) settings = sql.get_setting('', all=1) ldap_enable = sql.get_setting('ldap_enable') except: @@ -30,7 +21,7 @@ except: template = template.render(title = "Admin area: users manage", - role = sql.get_user_role_by_uuid(user_id.value), + role = role, user = user, users = users, groups = sql.select_groups(), @@ -42,5 +33,6 @@ template = template.render(title = "Admin area: users manage", token = token, versions = funct.versions(), settings = settings, + backups = sql.select_backups(), ldap_enable = ldap_enable) print(template) diff --git a/app/versions.py b/app/versions.py index ea9d78f4..c1c94f01 100644 --- a/app/versions.py +++ b/app/versions.py @@ -1,9 +1,6 @@ #!/usr/bin/env python3 -import http.cookies -import cgi import os import funct, sql -import glob from jinja2 import Environment, FileSystemLoader env = Environment(loader=FileSystemLoader('templates/')) template = env.get_template('delver.html') @@ -25,11 +22,7 @@ if form.getvalue('configver'): template = env.get_template('configver.html') try: - cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) - user_id = cookie.get('uuid') - user = sql.get_user_name_by_uuid(user_id.value) - token = sql.get_token(user_id.value) - servers = sql.get_dick_permit(disable=0) + user, user_id, role, token, servers = funct.get_users_params(disable=1) except: pass @@ -86,7 +79,7 @@ if serv is not None and form.getvalue('config') is not None: template = template.render(h2 = 1, title = title, - role = sql.get_user_role_by_uuid(user_id.value), + role = role, action = action, user = user, select_id = "serv", diff --git a/app/viewlogs.py b/app/viewlogs.py index 1ab9b1c4..cb2753b3 100644 --- a/app/viewlogs.py +++ b/app/viewlogs.py @@ -1,7 +1,5 @@ #!/usr/bin/env python3 -import os, sys -import http, cgi -import glob +import os import datetime import funct import sql @@ -51,10 +49,7 @@ except: pass try: - cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) - user_id = cookie.get('uuid') - user = sql.get_user_name_by_uuid(user_id.value) - token = sql.get_token(user_id.value) + user, user_id, role, token, servers = funct.get_users_params() except: pass @@ -65,7 +60,7 @@ selects.append(['haproxy-wi.access.log','access.log']) output_from_parsed_template = template.render(h2 = 1, autorefresh = 1, title = "View internal logs", - role = sql.get_user_role_by_uuid(user_id.value), + role = role, user = user, onclick = "viewLogs()", serv = serv, diff --git a/app/viewsttats.py b/app/viewsttats.py index 731a242b..7b5c7de1 100644 --- a/app/viewsttats.py +++ b/app/viewsttats.py @@ -1,27 +1,20 @@ #!/usr/bin/env python3 -import http.cookies, os -import cgi import funct -import sql from jinja2 import Environment, FileSystemLoader env = Environment(loader=FileSystemLoader('templates/')) template = env.get_template('viewstats.html') form = funct.form serv = form.getvalue('serv') +service = form.getvalue('service') print('Content-type: text/html\n') funct.check_login() try: - cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) - user_id = cookie.get('uuid') - user = sql.get_user_name_by_uuid(user_id.value) - role = sql.get_user_role_by_uuid(user_id.value) - servers = sql.get_dick_permit(virt=1) - token = sql.get_token(user_id.value) + user, user_id, role, token, servers = funct.get_users_params(virt=1) if serv is None: - first_serv = sql.get_dick_permit() + first_serv = servers for i in first_serv: serv = i[2] break @@ -39,6 +32,7 @@ output_from_parsed_template = template.render(h2 = 1, selects = servers, serv = serv, versions = funct.versions(), + service = service, token = token) print(output_from_parsed_template) diff --git a/app/waf.py b/app/waf.py index a7ef7d4c..af0fdf8b 100644 --- a/app/waf.py +++ b/app/waf.py @@ -1,7 +1,4 @@ #!/usr/bin/env python3 -import os -import sql -import http import funct import sql from jinja2 import Environment, FileSystemLoader @@ -13,19 +10,17 @@ funct.check_login() funct.page_for_admin(level = 2) try: - cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) - user_id = cookie.get('uuid') - user = sql.get_user_name_by_uuid(user_id.value) - token = sql.get_token(user_id.value) + user, user_id, role, token, servers = funct.get_users_params() except: pass template = template.render(h2 = 1, title = "Web application firewall", autorefresh = 1, - role = sql.get_user_role_by_uuid(user_id.value), + role = role, user = user, servers = sql.select_waf_servers_metrics(user_id.value), + servers_all = servers, versions = funct.versions(), token = token) print(template) \ No newline at end of file diff --git a/index.html b/index.html index d512fdb4..cc48e17e 100644 --- a/index.html +++ b/index.html @@ -27,6 +27,10 @@ + + + +