From 81e2505422053423cf8d36556694f76a520ba4e9 Mon Sep 17 00:00:00 2001 From: Pavel Loginov Date: Fri, 9 Oct 2020 21:56:16 +0600 Subject: [PATCH] v4.5.1.0 Changelog: https://haproxy-wi.org/changelog.py#4_5_1 --- app/options.py | 59 +++++++++++++ app/templates/admin.html | 93 +++++++++++++++++++++ app/templates/include/mon_installation.html | 4 +- app/users.py | 75 ++++++++++------- inc/users.js | 90 ++++++++++++++++++++ 5 files changed, 289 insertions(+), 32 deletions(-) diff --git a/app/options.py b/app/options.py index 1079b76e..259b7108 100644 --- a/app/options.py +++ b/app/options.py @@ -2145,3 +2145,62 @@ if form.getvalue('lets_domain'): print('success: Certificate has been created') os.system("rm -f %s" % script) + +if form.getvalue('uploadovpn'): + name = form.getvalue('ovpnname') + + ovpn_file = os.path.dirname('/tmp/') + "/" + name + '.ovpn' + + try: + with open(ovpn_file, "w") as conf: + conf.write(form.getvalue('uploadovpn')) + except IOError as e: + print(str(e)) + print('error: Can\'t save ovpn file') + else: + print('success: ovpn file has been saved ') + + try: + cmd = 'sudo openvpn3 config-import --config %s --persistent' % ovpn_file + funct.subprocess_execute(cmd) + except IOError as e: + funct.logging('localhost', e.args[0], haproxywi=1) + + try: + cmd = 'sudo cp %s /etc/openvpn3/%s.conf' % (ovpn_file, name) + funct.subprocess_execute(cmd) + except IOError as e: + funct.logging('localhost', e.args[0], haproxywi=1) + + funct.logging("localhost", " has been uploaded a new ovpn file %s" % ovpn_file, haproxywi=1, login=1) + +if form.getvalue('openvpndel') is not None: + openvpndel = form.getvalue('openvpndel') + + cmd = 'sudo openvpn3 config-remove --config /tmp/%s.ovpn --force' % openvpndel + try: + funct.subprocess_execute(cmd) + print("Ok") + funct.logging(openvpndel, ' has deleted the ovpn file ', haproxywi=1, login=1) + except IOError as e: + print(e.args[0]) + funct.logging('localhost', e.args[0], haproxywi=1) + +if form.getvalue('actionvpn') is not None: + openvpn = form.getvalue('openvpnprofile') + action = form.getvalue('actionvpn') + + if action == 'start': + cmd = 'sudo openvpn3 session-start --config /tmp/%s.ovpn' % openvpn + elif action == 'restart': + cmd = 'sudo openvpn3 session-manage --config /tmp/%s.ovpn --restart' % openvpn + elif action == 'disconnect': + cmd = 'sudo openvpn3 session-manage --config /tmp/%s.ovpn --disconnect' % openvpn + try: + funct.subprocess_execute(cmd) + print("success: The " + openvpn + " has been " + action + "ed") + funct.logging(openvpn, ' has ' + action + ' the ovpn session ', haproxywi=1, login=1) + except IOError as e: + print(e.args[0]) + funct.logging('localhost', e.args[0], haproxywi=1) + diff --git a/app/templates/admin.html b/app/templates/admin.html index a3bbc8e7..fee7b333 100644 --- a/app/templates/admin.html +++ b/app/templates/admin.html @@ -16,6 +16,7 @@
  • Servers
  • SSH credentials
  • Checker
  • +
  • OpenVPN
  • Settings
  • Services
  • Update
  • @@ -82,6 +83,98 @@
    {% include 'include/admin_telegram.html' %}
    + +
    + {% if openvpn != 'package openvpn3-client is not installed' %} + + + + + + + + + {% for c in openvpn_configs %} + + + + + + + {% endfor %} +

    OpenVPN profiles

    + Profile name + + Time of creation +
    + {{c.split('/')[-1]}} + + {{c.split('/')[0]}} + + + + +
    +
    + + + + + + + + + {% for c in openvpn_sess %} + + + + + + + {% endfor %} +

    OpenVPN sessions

    + Session name + + Status +
    + {{c.split(' ')[0]}} + + {{c.split(' ')[4]}} + + + + +
    +
    + + + + + + + + + + +

    Uploading ovpn files

    Ovpn file name + Upload ovpn file (?) +
    + {{ input('ovpn_upload_name', size='30') }} + +

    + Upload +

    +
    + + {% else %} +
    +
    +

    You do not have installed OpenVPN client. + Read hear + how to install OpenVPN client

    +
    + {% endif %} +
    {% include 'include/admin_settings.html' %} diff --git a/app/templates/include/mon_installation.html b/app/templates/include/mon_installation.html index 466bb34b..a6e556e9 100644 --- a/app/templates/include/mon_installation.html +++ b/app/templates/include/mon_installation.html @@ -1,8 +1,8 @@ {% if page == 'users.py' %} - + - + diff --git a/app/users.py b/app/users.py index 3a616e37..22f66a21 100644 --- a/app/users.py +++ b/app/users.py @@ -11,54 +11,69 @@ print('Content-type: text/html\n') funct.check_login() funct.page_for_admin() + try: user, user_id, role, token, servers = funct.get_users_params() users = sql.select_users() settings = sql.get_setting('', all=1) ldap_enable = sql.get_setting('ldap_enable') grafana, stderr = funct.subprocess_execute("service grafana-server status |grep Active |awk '{print $1}'") + services = [] - services_name = {'checker_haproxy':'Master backends checker service', - 'keep_alive':'Auto start service', - 'metrics_haproxy':'Master metrics service', - 'prometheus':'Prometheus service', - 'grafana-server':'Grafana service', - 'smon':'Simple monitoring network ports', + services_name = {'checker_haproxy': 'Master backends checker service', + 'keep_alive': 'Auto start service', + 'metrics_haproxy': 'Master metrics service', + 'prometheus': 'Prometheus service', + 'grafana-server': 'Grafana service', + 'smon': 'Simple monitoring network ports', 'fail2ban': 'Fail2ban service'} for s, v in services_name.items(): - cmd = "systemctl status %s |grep Act |awk '{print $2}'" %s + cmd = "systemctl status %s |grep Act |awk '{print $2}'" % s status, stderr = funct.subprocess_execute(cmd) if s != 'keep_alive': service_name = s.split('_')[0] else: service_name = s - cmd = "rpm --query haproxy-wi-"+service_name+"-* |awk -F\""+service_name+"\" '{print $2}' |awk -F\".noa\" '{print $1}' |sed 's/-//1' |sed 's/-/./'" + cmd = "rpm --query haproxy-wi-"+service_name+"-* |awk -F\""+service_name + "\" '{print $2}' |awk -F\".noa\" '{print $1}' |sed 's/-//1' |sed 's/-/./'" service_ver, stderr = funct.subprocess_execute(cmd) services.append([s, status, v, service_ver[0]]) + + openvpn, stderr = funct.subprocess_execute("rpm --query openvpn3-client") + if openvpn[0] != 'package openvpn3-client is not installed': + cmd = "sudo openvpn3 configs-list |grep -E 'ovpn|(^|[^0-9])[0-9]{4}($|[^0-9])' |grep -v net|awk -F\" \" '{print $1}'|awk 'ORS=NR%2?\" \":\"\\n\"'" + openvpn_configs, stderr = funct.subprocess_execute(cmd) + cmd = "sudo openvpn3 sessions-list|grep -E 'Config|Status'|awk -F\":\" '{print $2}'|awk 'ORS=NR%2?\" \":\"\\n\"'| sed 's/^ //g'" + openvpn_sess, stderr = funct.subprocess_execute(cmd) + else: + openvpn_configs = '' + openvpn_sess = '' except: pass -template = template.render(title = "Admin area: Manage users", - role = role, - user = user, - users = users, - groups = sql.select_groups(), - servers = sql.select_servers(full=1), - roles = sql.select_roles(), - masters = sql.select_servers(get_master_servers=1), - sshs = sql.select_ssh(), - telegrams = sql.select_telegram(), - token = token, - versions = funct.versions(), - checker_ver = funct.check_new_version(service='checker'), - smon_ver = funct.check_new_version(service='smon'), - metrics_ver = funct.check_new_version(service='metrics'), - keep_ver = funct.check_new_version(service='keep'), - settings = settings, - backups = sql.select_backups(), - services = services, - grafana = ''.join(grafana), - page = "users.py", - ldap_enable = ldap_enable) +template = template.render(title="Admin area: Manage users", + role=role, + user=user, + users=users, + groups=sql.select_groups(), + servers=sql.select_servers(full=1), + roles=sql.select_roles(), + masters=sql.select_servers(get_master_servers=1), + sshs=sql.select_ssh(), + telegrams=sql.select_telegram(), + token=token, + versions=funct.versions(), + checker_ver=funct.check_new_version(service='checker'), + smon_ver=funct.check_new_version(service='smon'), + metrics_ver=funct.check_new_version(service='metrics'), + keep_ver=funct.check_new_version(service='keep'), + openvpn=openvpn[0], + openvpn_configs=openvpn_configs, + openvpn_sess=openvpn_sess, + settings=settings, + backups=sql.select_backups(), + services=services, + grafana=''.join(grafana), + page="users.py", + ldap_enable=ldap_enable) print(template) diff --git a/inc/users.js b/inc/users.js index 188e6259..0d28f419 100644 --- a/inc/users.js +++ b/inc/users.js @@ -1956,4 +1956,94 @@ function updateService(service) { } } } ); +} +function confirmDeleteOpenVpnProfile(id) { + $( "#dialog-confirm" ).dialog({ + resizable: false, + height: "auto", + width: 400, + modal: true, + title: "Are you sure you want to delete profile " +id+ "?", + buttons: { + "Delete": function() { + $( this ).dialog( "close" ); + removeOpenVpnProfile(id); + }, + Cancel: function() { + $( this ).dialog( "close" ); + } + } + }); +} + +function removeOpenVpnProfile(id) { + console.log(id) + $("#"+id).css("background-color", "#f2dede"); + $.ajax( { + url: "options.py", + data: { + openvpndel: id, + token: $('#token').val() + }, + type: "POST", + success: function( data ) { + data = data.replace(/\s+/g,' '); + if(data == "Ok ") { + $("#"+id).remove(); + } else if (data.indexOf('error:') != '-1' || data.indexOf('unique') != '-1') { + toastr.error(data); + } + } + } ); +} +function uploadOvpn() { + toastr.clear(); + if ($( "#ovpn_upload_name" ).val() == '' || $('#ovpn_upload_file').val() == '') { + toastr.error('All fields must be completed'); + } else { + $.ajax( { + url: "options.py", + data: { + uploadovpn: $('#ovpn_upload_file').val(), + ovpnname: $('#ovpn_upload_name').val(), + token: $('#token').val() + }, + type: "POST", + success: function( data ) { + data = data.replace(/\s+/g,' '); + if (data.indexOf('danger') != '-1' || data.indexOf('unique') != '-1' || data.indexOf('error:') != '-1') { + toastr.error(data); + } else if (data.indexOf('success') != '-1') { + toastr.clear(); + toastr.success(data) + location.reload() + } else { + toastr.error('Something wrong, check and try again'); + } + } + } ); + } +} +function OpenVpnSess(id, action) { + $.ajax({ + url: "options.py", + data: { + actionvpn: action, + openvpnprofile: id, + token: $('#token').val() + }, + type: "POST", + success: function (data) { + data = data.replace(/\s+/g, ' '); + if (data.indexOf('danger') != '-1' || data.indexOf('unique') != '-1' || data.indexOf('error:') != '-1') { + toastr.error(data); + } else if (data.indexOf('success') != '-1') { + toastr.clear(); + toastr.success(data) + location.reload() + } else { + toastr.error('Something wrong, check and try again'); + } + } + } ); } \ No newline at end of file

    Install Grafana and Prometheus servers

    Installing Grafana and Prometheus servers

    Current instalationCurrent installation Available Versions Note