From cec381b6e482a891bee322901e2f9ad670bfd11f Mon Sep 17 00:00:00 2001 From: Pavel Loginov Date: Mon, 2 Aug 2021 14:19:22 +0600 Subject: [PATCH] v5.2.3.0 Changelog: https://haproxy-wi.org/changelog.py#5_2_3 --- app/create_db.py | 1613 +++----- app/db_model.py | 406 ++ app/funct.py | 56 +- app/hapservers.py | 51 +- app/login.py | 30 +- app/metrics.py | 4 +- app/options.py | 253 +- app/overview.py | 8 +- app/sql.py | 3294 ++++++----------- app/templates/add.html | 20 +- app/templates/admin.html | 26 +- app/templates/ajax/load_services.html | 1 + app/templates/ajax/load_telegram.html | 48 +- app/templates/ajax/load_updatehapwi.html | 6 +- app/templates/ajax/new_backup.html | 42 +- app/templates/ajax/new_group.html | 12 +- app/templates/ajax/new_option.html | 8 +- app/templates/ajax/new_saved_servers.html | 8 +- app/templates/ajax/new_slack.html | 22 +- app/templates/ajax/new_ssh.html | 28 +- app/templates/ajax/new_telegram.html | 22 +- app/templates/ajax/overview.html | 16 +- app/templates/ajax/overviewServers.html | 6 +- .../ajax/provisioning/aws_edit_dialog.html | 32 +- .../ajax/provisioning/do_edit_dialog.html | 38 +- .../ajax/provisioning/gcore_edit_dialog.html | 34 +- .../ajax/provisioning/providers.html | 8 +- .../provisioning/provisioned_servers.html | 64 +- .../ajax/show_user_current_group.html | 6 +- app/templates/ajax/show_user_groups.html | 6 +- app/templates/ajax/smon_dashboard.html | 27 +- app/templates/include/admin_backup.html | 36 +- app/templates/include/admin_servers.html | 18 +- app/templates/include/admin_settings.html | 80 +- app/templates/include/admin_ssh.html | 34 +- app/templates/include/admin_users.html | 44 +- app/templates/include/admins_dialogs.html | 16 +- app/templates/include/input_macros.html | 2 +- app/templates/include/login.html | 4 +- app/templates/include/mon_installation.html | 4 +- app/templates/include/port_scan_history.html | 2 +- app/templates/include/smon_server.html | 23 +- app/templates/portscanner.html | 26 +- app/templates/servers.html | 14 +- app/templates/smon.html | 4 +- app/templates/waf.html | 10 +- inc/add.js | 25 +- inc/awesome.css | 16 +- inc/metrics.js | 28 + inc/script.js | 5 +- inc/style.css | 8 +- 51 files changed, 2777 insertions(+), 3817 deletions(-) create mode 100644 app/db_model.py diff --git a/app/create_db.py b/app/create_db.py index 2f8b59d2..95b8078e 100644 --- a/app/create_db.py +++ b/app/create_db.py @@ -1,325 +1,158 @@ #!/usr/bin/env python3 import funct - -mysql_enable = funct.get_config_var('mysql', 'enable') - -if mysql_enable == '1': - mysql_user = funct.get_config_var('mysql', 'mysql_user') - mysql_password = funct.get_config_var('mysql', 'mysql_password') - mysql_db = funct.get_config_var('mysql', 'mysql_db') - mysql_host = funct.get_config_var('mysql', 'mysql_host') - mysql_port = funct.get_config_var('mysql', 'mysql_port') - import mysql.connector as sqltool -else: - db = "roxy-wi.db" - import sqlite3 as sqltool +from db_model import * -def check_db(): - if mysql_enable == '0': - import os - if os.path.isfile(db): - if os.path.getsize(db) > 100: - with open(db,'r', encoding = "ISO-8859-1") as f: - header = f.read(100) - if header.startswith('SQLite format 3'): - return False - else: - return True - else: - return True - else: - from mysql.connector import errorcode - con, cur = get_cur() - sql = """ select id from `groups` where id='1' """ - try: - cur.execute(sql) - except sqltool.Error as err: - print('
') - if err.errno == errorcode.ER_ACCESS_DENIED_ERROR: - print("Something is wrong with your user name or password") - elif err.errno == errorcode.ER_BAD_DB_ERROR: - print("Database does not exist") - else: - print(err) - print('
') - con.close() - return True - else: - con.close() - return False - - -def get_cur(): +def default_values(): + data_source = [ + {'param': 'time_zone', 'value': 'UTC', 'section': 'main', 'desc': 'Time Zone', 'group': '1'}, + {'param': 'proxy', 'value': '', 'section': 'main', 'desc': 'Proxy server. Use proto://ip:port', 'group': '1'}, + {'param': 'session_ttl', 'value': '5', 'section': 'main', 'desc': 'Time to live users sessions. In days', + 'group': '1'}, + {'param': 'token_ttl', 'value': '5', 'section': 'main', 'desc': 'Time to live users tokens. In days', + 'group': '1'}, + {'param': 'tmp_config_path', 'value': '/tmp/', 'section': 'main', + 'desc': 'Temp store configs, for check. Path must exist', 'group': '1'}, + {'param': 'cert_path', 'value': '/etc/ssl/certs/', 'section': 'main', + 'desc': 'Path to SSL dir. Folder owner must be a user which set in the SSH settings. Path must exist', + 'group': '1'}, + {'param': 'ssl_local_path', 'value': 'certs', 'section': 'main', + 'desc': 'Path to dir for local save SSL certs. This is a relative path, begins with $HOME_ROXY-WI/app/', + 'group': '1'}, + {'param': 'lists_path', 'value': 'lists', 'section': 'main', + 'desc': 'Path to black/white lists. This is a relative path, begins with $HOME_ROXY-WI', + 'group': '1'}, + {'param': 'local_path_logs', 'value': '/var/log/haproxy.log', 'section': 'logs', + 'desc': 'Logs save locally, enabled by default', 'group': '1'}, + {'param': 'syslog_server_enable', 'value': '0', 'section': 'logs', + 'desc': 'If exist syslog server for HAProxy logs, enable this option', 'group': '1'}, + {'param': 'log_time_storage', 'value': '14', 'section': 'logs', + 'desc': 'Storage time for user activity logs, in days', 'group': '1'}, + {'param': 'stats_user', 'value': 'admin', 'section': 'haproxy', 'desc': 'Username for Stats web page HAProxy', + 'group': '1'}, + {'param': 'stats_password', 'value': 'password', 'section': 'haproxy', + 'desc': 'Password for Stats web page HAProxy', 'group': '1'}, + {'param': 'stats_port', 'value': '8085', 'section': 'haproxy', 'desc': 'Port Stats web page HAProxy', + 'group': '1'}, + {'param': 'stats_page', 'value': 'stats', 'section': 'haproxy', 'desc': 'URI Stats web page HAProxy', + 'group': '1'}, + {'param': 'haproxy_dir', 'value': '/etc/haproxy', 'section': 'haproxy', 'desc': 'Path to HAProxy dir', + 'group': '1'}, + {'param': 'haproxy_config_path', 'value': '/etc/haproxy/haproxy.cfg', 'section': 'haproxy', 'desc': '', + 'group': '1'}, + {'param': 'server_state_file', 'value': 'stats', 'section': 'haproxy', 'desc': 'Path to HAProxy config', + 'group': '1'}, + {'param': 'haproxy_sock', 'value': '/etc/haproxy/haproxy.state', 'section': 'haproxy', + 'desc': 'Path to HAProxy state file', 'group': '1'}, + {'param': 'haproxy_sock_port', 'value': '1999', 'section': 'haproxy', 'desc': 'HAProxy sock port', + 'group': '1'}, + {'param': 'apache_log_path', 'value': '/var/log/httpd/', 'section': 'logs', 'desc': 'Path to Apache logs folder', + 'group': '1'}, + {'param': 'nginx_path_error_logs', 'value': '/var/log/nginx/error.log', 'section': 'nginx', + 'desc': 'Nginx error log', 'group': '1'}, + {'param': 'nginx_stats_user', 'value': 'admin', 'section': 'nginx', 'desc': 'Username for Stats web page Nginx', + 'group': '1'}, + {'param': 'nginx_stats_password', 'value': 'password', 'section': 'nginx', + 'desc': 'Password for Stats web page Ngin', 'group': '1'}, + {'param': 'nginx_stats_port', 'value': '8086', 'section': 'nginx', 'desc': 'Stats port for web page Nginx', + 'group': '1'}, + {'param': 'nginx_stats_page', 'value': 'stats', 'section': 'nginx', 'desc': 'URI Stats for web page Nginx', + 'group': '1'}, + {'param': 'nginx_dir', 'value': '/etc/nginx/conf.d/', 'section': 'nginx', 'desc': 'Path to Nginx dir', + 'group': '1'}, + {'param': 'nginx_config_path', 'value': '/etc/nginx/conf.d/default.conf', 'section': 'nginx', + 'desc': 'Path to Nginx config', 'group': '1'}, + {'param': 'ldap_enable', 'value': '0', 'section': 'ldap', 'desc': 'If 1 ldap enabled', 'group': '1'}, + {'param': 'ldap_server', 'value': '', 'section': 'ldap', 'desc': 'IP address ldap server', 'group': '1'}, + {'param': 'ldap_port', 'value': '389', 'section': 'ldap', 'desc': 'Default port: 389 or 636', 'group': '1'}, + {'param': 'ldap_user', 'value': '', 'section': 'ldap', + 'desc': 'Login to connect to LDAP server. Format: user@domain.com', 'group': '1'}, + {'param': 'ldap_password', 'value': '', 'section': 'ldap', 'desc': 'Password to connect to LDAP server', + 'group': '1'}, + {'param': 'ldap_base', 'value': '', 'section': 'ldap', 'desc': 'Base domain. Example: dc=domain, dc=com', + 'group': '1'}, + {'param': 'ldap_domain', 'value': '', 'section': 'ldap', + 'desc': 'Domain for login, like user@domain.com, without user@', 'group': '1'}, + {'param': 'ldap_class_search', 'value': 'user', 'section': 'ldap', 'desc': 'Class to search user', + 'group': '1'}, + {'param': 'ldap_user_attribute', 'value': 'sAMAccountName', 'section': 'ldap', + 'desc': 'User attribute for searching', 'group': '1'}, + {'param': 'ldap_search_field', 'value': 'mail', 'section': 'ldap', 'desc': 'Field where an user e-mail saved', + 'group': '1'}, + {'param': 'ldap_type', 'value': '0', 'section': 'ldap', + 'desc': 'If 0 then will be used LDAP, if 1 then will be used LDAPS', 'group': '1'}, + {'param': 'haproxy_enterprise', 'value': '0', 'section': 'haproxy', + 'desc': 'Use this option if your HAProxy is enterprise. It changes service name for rebooting/reloading', + 'group': '1'}, + ] try: - if mysql_enable == '0': - con = sqltool.connect(db, isolation_level=None) - else: - con = sqltool.connect(user=mysql_user, password=mysql_password, - host=mysql_host, port=mysql_port, - database=mysql_db) - cur = con.cursor() - except sqltool.Error as e: - funct.logging('DB ', ' '+str(e), haproxywi=1, login=1) - else: - return con, cur + Setting.insert_many(data_source).on_conflict_ignore().execute() + except Exception as e: + funct.out_error(e) + + data_source = [ + {'username': 'admin', 'email': 'admin@localhost', 'password': '21232f297a57a5a743894a0e4a801fc3', 'role': 'superAdmin', 'groups': '1'}, + {'username': 'editor', 'email': 'editor@localhost', 'password': '5aee9dbd2a188839105073571bee1b1f', 'role': 'admin', 'groups': '1'}, + {'username': 'guest', 'email': 'guest@localhost', 'password': '084e0343a0486ff05530df6c705c8bb4', 'role': 'guest', 'groups': '1'} + ] + + try: + User.insert_many(data_source).on_conflict_ignore().execute() + except Exception as e: + funct.out_error(e) + + data_source = [ + {'name': 'admin', 'description': 'Can do everything'}, + {'name': 'editor', 'description': 'Can edit configs'}, + {'name': 'guest', 'description': 'Read-only access'} + ] + + try: + Role.insert_many(data_source).on_conflict_ignore().execute() + except Exception as e: + funct.out_error(e) + + try: + Groups.insert(name='All', description='All servers enter in this group').on_conflict_ignore().execute() + except Exception as e: + funct.out_error(e) -def create_table(**kwargs): - con, cur = get_cur() - if mysql_enable == '0': - sql = """ - CREATE TABLE IF NOT EXISTS user ( - `id` INTEGER NOT NULL, - `username` VARCHAR ( 64 ) UNIQUE, - `email` VARCHAR ( 120 ) UNIQUE, - `password` VARCHAR ( 128 ), - `role` VARCHAR ( 128 ), - `groups` VARCHAR ( 120 ), - ldap_user INTEGER NOT NULL DEFAULT 0, - activeuser INTEGER NOT NULL DEFAULT 1, - PRIMARY KEY(`id`) - ); - INSERT INTO user (username, email, password, role, groups) VALUES - ('admin','admin@localhost','21232f297a57a5a743894a0e4a801fc3','admin','1'), - ('editor','editor@localhost','5aee9dbd2a188839105073571bee1b1f','editor','1'), - ('guest','guest@localhost','084e0343a0486ff05530df6c705c8bb4','guest','1'); - CREATE TABLE IF NOT EXISTS `servers` ( - `id` INTEGER NOT NULL, - `hostname` VARCHAR ( 64 ), - `ip` VARCHAR ( 64 ) UNIQUE, - `groups` VARCHAR ( 64 ), - type_ip INTEGER NOT NULL DEFAULT 0, - enable INTEGER NOT NULL DEFAULT 1, - master INTEGER NOT NULL DEFAULT 0, - cred INTEGER NOT NULL DEFAULT 1, - alert INTEGER NOT NULL DEFAULT 0, - metrics INTEGER NOT NULL DEFAULT 0, - port INTEGER NOT NULL DEFAULT 22, - `desc` varchar(64), - active INTEGER NOT NULL DEFAULT 0, - keepalived INTEGER NOT NULL DEFAULT 0, - PRIMARY KEY(`id`) - ); - CREATE TABLE IF NOT EXISTS `role` ( - `id` INTEGER NOT NULL, - `name` VARCHAR ( 80 ) UNIQUE, - `description` VARCHAR ( 255 ), - PRIMARY KEY(`id`) - ); - INSERT INTO `role` (name, description) VALUES - ('admin','Can do everything'), - ('editor','Can edit configs'), - ('guest','Read only access'); - CREATE TABLE IF NOT EXISTS `groups` ( - `id` INTEGER NOT NULL, - `name` VARCHAR ( 80 ), - `description` VARCHAR ( 255 ), - PRIMARY KEY(`id`) - ); - INSERT INTO `groups` (name, description) VALUES ('All','All servers enter in this group'); - CREATE TABLE IF NOT EXISTS `cred` ( - `id` integer primary key autoincrement, - `name` VARCHAR ( 64 ), - `enable` INTEGER NOT NULL DEFAULT 1, - `username` VARCHAR ( 64 ) NOT NULL, - `password` VARCHAR ( 64 ) NOT NULL, - groups INTEGER NOT NULL DEFAULT 1, - UNIQUE(name,groups) - ); - CREATE TABLE IF NOT EXISTS `uuid` (`user_id` INTEGER NOT NULL, `uuid` varchar ( 64 ),`exp` timestamp default '0000-00-00 00:00:00'); - CREATE TABLE IF NOT EXISTS `token` (`user_id` INTEGER, `token` varchar(64), `exp` timestamp default '0000-00-00 00:00:00'); - CREATE TABLE IF NOT EXISTS `telegram` (`id` integer primary key autoincrement, `token` VARCHAR (64), `chanel_name` INTEGER NOT NULL DEFAULT 1, `groups` INTEGER NOT NULL DEFAULT 1); - CREATE TABLE IF NOT EXISTS `metrics` (`serv` varchar(64), curr_con INTEGER, cur_ssl_con INTEGER, sess_rate INTEGER, max_sess_rate INTEGER,`date` timestamp default '0000-00-00 00:00:00'); - CREATE TABLE IF NOT EXISTS `settings` (`param` varchar(64), value varchar(64), section varchar(64), `desc` varchar(100), `group` INTEGER NOT NULL DEFAULT 1, UNIQUE(param, `group`)); - CREATE TABLE IF NOT EXISTS `version` (`version` varchar(64)); - CREATE TABLE IF NOT EXISTS `options` (`id` INTEGER NOT NULL, `options` VARCHAR ( 64 ), `groups` VARCHAR ( 120 ), PRIMARY KEY(`id`)); - CREATE TABLE IF NOT EXISTS `saved_servers` (`id` INTEGER NOT NULL, `server` VARCHAR ( 64 ), `description` VARCHAR ( 120 ), `groups` VARCHAR ( 120 ), PRIMARY KEY(`id`)); - CREATE TABLE IF NOT EXISTS `backups` (`id` INTEGER NOT NULL, `server` VARCHAR ( 64 ), `rhost` VARCHAR ( 120 ), `rpath` VARCHAR ( 120 ), `type` VARCHAR ( 120 ), `time` VARCHAR ( 120 ), cred INTEGER, `description` VARCHAR ( 120 ), PRIMARY KEY(`id`)); - CREATE TABLE IF NOT EXISTS `waf` (`server_id` INTEGER UNIQUE, metrics INTEGER); - CREATE TABLE IF NOT EXISTS `waf_metrics` (`serv` varchar(64), conn INTEGER, `date` DATETIME default '0000-00-00 00:00:00'); - CREATE TABLE IF NOT EXISTS user_groups(user_id INTEGER NOT NULL, user_group_id INTEGER NOT NULL, UNIQUE(user_id,user_group_id)); - CREATE TABLE IF NOT EXISTS port_scanner_settings ( - server_id INTEGER NOT NULL, - user_group_id INTEGER NOT NULL, - enabled INTEGER NOT NULL, - notify INTEGER NOT NULL, - history INTEGER NOT NULL, - UNIQUE(server_id) - ); - CREATE TABLE IF NOT EXISTS port_scanner_ports ( - `serv` varchar(64), - user_group_id INTEGER NOT NULL, - port INTEGER NOT NULL, - service_name varchar(64), - `date` DATETIME default '0000-00-00 00:00:00' - ); - CREATE TABLE IF NOT EXISTS port_scanner_history ( - `serv` varchar(64), - port INTEGER NOT NULL, - status varchar(64), - service_name varchar(64), - `date` DATETIME default '0000-00-00 00:00:00' - ); - CREATE TABLE IF NOT EXISTS providers_creds ( - `id` INTEGER NOT NULL, - `name` VARCHAR ( 64 ), - `type` VARCHAR ( 64 ), - `group` VARCHAR ( 64 ), - `key` VARCHAR ( 64 ), - `secret` VARCHAR ( 64 ), - `create_date` DATETIME default '0000-00-00 00:00:00', - `edit_date` DATETIME default '0000-00-00 00:00:00', - PRIMARY KEY(`id`) - ); - CREATE TABLE IF NOT EXISTS provisioned_servers ( - `id` INTEGER NOT NULL, - `region` VARCHAR ( 64 ), - `instance_type` VARCHAR ( 64 ), - `public_ip` INTEGER, - `floating_ip` INTEGER, - `volume_size` INTEGER, - `backup` INTEGER, - `monitoring` INTEGER, - `private_networking` INTEGER, - `ssh_key_name` VARCHAR ( 64 ), - `ssh_ids` VARCHAR ( 64 ), - `name` VARCHAR ( 64 ), - `os` VARCHAR ( 64 ), - `firewall` INTEGER, - `provider_id` INTEGER, - `type` VARCHAR ( 64 ), - `status` VARCHAR ( 64 ), - `group_id` INTEGER NOT NULL, - `date` DATETIME default '0000-00-00 00:00:00', - `IP` VARCHAR ( 64 ), - `last_error` VARCHAR ( 256 ), - `delete_on_termination` INTEGER, - PRIMARY KEY(`id`) - ); - CREATE TABLE IF NOT EXISTS api_tokens ( - `token` varchar(64), - `user_name` varchar(64), - `user_group_id` INTEGER NOT NULL, - `user_role` INTEGER NOT NULL, - `create_date` DATETIME default '0000-00-00 00:00:00', - `expire_date` DATETIME default '0000-00-00 00:00:00' - ); - CREATE TABLE IF NOT EXISTS `metrics_http_status` (`serv` varchar(64), `2xx` INTEGER, `3xx` INTEGER, `4xx` INTEGER, `5xx` INTEGER,`date` DATETIME default '0000-00-00 00:00:00'); - CREATE TABLE IF NOT EXISTS `slack` (`id` INTEGER NOT NULL, `token` VARCHAR (64), `chanel_name` INTEGER NOT NULL DEFAULT 1, `groups` INTEGER NOT NULL DEFAULT 1, PRIMARY KEY(`id`)); - CREATE TABLE IF NOT EXISTS `settings` (`param` varchar(64), value varchar(64), section varchar(64), `desc` varchar(100), `group` INTEGER NOT NULL DEFAULT 1, UNIQUE(param, `group`)); - INSERT INTO settings (param, value, section, `desc`) values('time_zone', 'UTC', 'main', 'Time Zone'); - INSERT INTO settings (param, value, section, `desc`) values('proxy', '', 'main', 'Proxy server. Use proto://ip:port'); - INSERT INTO settings (param, value, section, `desc`) values('session_ttl', '5', 'main', 'Time to live users sessions. In days'); - INSERT INTO settings (param, value, section, `desc`) values('token_ttl', '5', 'main', 'Time to live users tokens. In days'); - INSERT INTO settings (param, value, section, `desc`) values('tmp_config_path', '/tmp/', 'main', 'A temp folder of configs, for checking. The path must exist'); - INSERT INTO settings (param, value, section, `desc`) values('cert_path', '/etc/ssl/certs/', 'main', 'A path to SSL dir. The folder owner must be an user who set in the SSH settings. The path must exist'); - INSERT INTO settings (param, value, section, `desc`) values('ssl_local_path', 'certs', 'main', 'Path to dir for local save SSL certs. This is a relative path, begins with $HOME_ROXY-WI/app/'); - INSERT INTO settings (param, value, section, `desc`) values('lists_path', 'lists', 'main', 'Path to black/white lists. This is a relative path, begins with $HOME_ROXY-WI'); - INSERT INTO settings (param, value, section, `desc`) values('local_path_logs', '/var/log/haproxy.log', 'logs', 'Logs save locally, enabled by default'); - INSERT INTO settings (param, value, section, `desc`) values('syslog_server_enable', '0', 'logs', 'If exist syslog server for HAProxy logs, enable this option'); - INSERT INTO settings (param, value, section, `desc`) values('syslog_server', '0', 'logs', 'IP address of syslog server'); - INSERT INTO settings (param, value, section, `desc`) values('log_time_storage', '14', 'logs', 'Storage time for user activity logs, in days'); - INSERT INTO settings (param, value, section, `desc`) values('stats_user', 'admin', 'haproxy', 'Username for the HAProxy Stats web page'); - INSERT INTO settings (param, value, section, `desc`) values('stats_password', 'password', 'haproxy', 'Password for the HAProxy Stats web page'); - INSERT INTO settings (param, value, section, `desc`) values('stats_port', '8085', 'haproxy', 'Port for the HAProxy Stats web page'); - INSERT INTO settings (param, value, section, `desc`) values('stats_page', 'stats', 'haproxy', 'URI for the HAProxy Stats web page'); - INSERT INTO settings (param, value, section, `desc`) values('haproxy_dir', '/etc/haproxy/', 'haproxy', 'Path to HAProxy dir'); - INSERT INTO settings (param, value, section, `desc`) values('haproxy_config_path', '/etc/haproxy/haproxy.cfg', 'haproxy', 'Path to HAProxy config'); - INSERT INTO settings (param, value, section, `desc`) values('server_state_file', '/etc/haproxy/haproxy.state', 'haproxy', 'Path to HAProxy state file'); - INSERT INTO settings (param, value, section, `desc`) values('haproxy_sock', '/var/run/haproxy.sock', 'haproxy', 'Path to HAProxy sock file'); - INSERT INTO settings (param, value, section, `desc`) values('haproxy_sock_port', '1999', 'haproxy', 'HAProxy sock port'); - INSERT INTO settings (param, value, section, `desc`) values('apache_log_path', '/var/log/httpd/', 'logs', 'Path to Apache logs folder'); - INSERT INTO settings (param, value, section, `desc`) values('ldap_enable', '0', 'ldap', 'If 1 LDAP is enabled'); - INSERT INTO settings (param, value, section, `desc`) values('ldap_server', '', 'ldap', 'LDAP server IP address'); - INSERT INTO settings (param, value, section, `desc`) values('ldap_port', '389', 'ldap', 'Default port is 389 or 636'); - INSERT INTO settings (param, value, section, `desc`) values('ldap_user', '', 'ldap', 'Username to connect to the LDAP server. Enter: user@domain.com'); - INSERT INTO settings (param, value, section, `desc`) values('ldap_password', '', 'ldap', 'Password for connect to LDAP server'); - INSERT INTO settings (param, value, section, `desc`) values('ldap_base', '', 'ldap', 'Base domain. Example: dc=domain, dc=com'); - INSERT INTO settings (param, value, section, `desc`) values('ldap_domain', '', 'ldap', 'Domain for login, that after @, like user@domain.com, without user@'); - INSERT INTO settings (param, value, section, `desc`) values('ldap_class_search', 'user', 'ldap', 'Class to search user'); - INSERT INTO settings (param, value, section, `desc`) values('ldap_user_attribute', 'sAMAccountName', 'ldap', 'User attribute for searching'); - INSERT INTO settings (param, value, section, `desc`) values('ldap_search_field', 'mail', 'ldap', 'Field where user e-mails are saved'); - CREATE TABLE IF NOT EXISTS `version` (`version` varchar(64)); - """ - try: - cur.executescript(sql) - except sqltool.Error as e: - if kwargs.get('silent') != 1: - if e.args[0] == 'column email is not unique' or e == "1060 (42S21): column email is not unique' ": - print('Updating... go to version 3.0') - else: - print("An error occurred:", e) - return False - else: - return True - finally: - cur.close() - con.close() - else: - try: - for line in open("roxy-wi.db.sql"): - cur.execute(line) - except sqltool.Error as e: - print('
') - print("An error occurred:", e) - print('
') - return False - else: - return True - finally: - cur.close() - con.close() - - -def update_db_v_3_4_5_22(**kwargs): - con, cur = get_cur() - if mysql_enable == '0': - sql = """insert into version ('version') values ('3.4.5.2'); """ - else: - sql = """INSERT INTO version VALUES ('3.4.5.2'); """ - try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: +def update_db_v_3_4_5_22(): + try: + Version.insert(version='3.4.5.2').execute() + except Exception as e: print('Cannot insert version %s' % e) - cur.close() - con.close() def update_db_v_4(**kwargs): - con, cur = get_cur() - sql = list() - sql.append("INSERT INTO settings (param, value, section, `desc`) values('nginx_path_error_logs', '/var/log/nginx/error.log', 'nginx', 'Nginx error log');") - sql.append("INSERT INTO settings (param, value, section, `desc`) values('nginx_stats_user', 'admin', 'nginx', 'Username for Stats web page Nginx');") - sql.append("INSERT INTO settings (param, value, section, `desc`) values('nginx_stats_password', 'password', 'nginx', 'Password for Stats web page Nginx');") - sql.append("INSERT INTO settings (param, value, section, `desc`) values('nginx_stats_port', '8086', 'nginx', 'Stats port for web page Nginx');") - sql.append("INSERT INTO settings (param, value, section, `desc`) values('nginx_stats_page', 'stats', 'nginx', 'URI Stats for web page Nginx');") - sql.append("INSERT INTO settings (param, value, section, `desc`) values('nginx_dir', '/etc/nginx/conf.d/', 'nginx', 'Path to Nginx dir');") - sql.append("INSERT INTO settings (param, value, section, `desc`) values('nginx_config_path', '/etc/nginx/conf.d/default.conf', 'nginx', 'Path to Nginx config');") - for i in sql: - try: - cur.execute(i) - con.commit() - except sqltool.Error as e: - pass + data_source = [ + {'param': 'nginx_path_error_logs', 'value': '/var/log/nginx/error.log', 'section': 'nginx', 'desc': 'Nginx error log', 'group': '1'}, + {'param': 'nginx_stats_user', 'value': 'admin', 'section': 'nginx', 'desc': 'Username for Stats web page Nginx', 'group': '1'}, + {'param': 'nginx_stats_password', 'value': 'password', 'section': 'nginx', 'desc': 'Password for Stats web page Nginx', 'group': '1'}, + {'param': 'nginx_stats_port', 'value': '8086', 'section': 'nginx', 'desc': 'Stats port for web page Nginx', 'group': '1'}, + {'param': 'nginx_stats_page', 'value': 'stats', 'section': 'nginx', 'desc': 'URI Stats for web page Nginx', 'group': '1'}, + {'param': 'nginx_dir', 'value': '/etc/nginx/conf.d/', 'section': 'nginx', 'desc': 'Path to Nginx dir', 'group': '1'}, + {'param': 'nginx_config_path', 'value': '/etc/nginx/conf.d/default.conf', 'section': 'nginx', 'desc': 'Path to Nginx config', 'group': '1'}, + ] + + try: + Setting.insert_many(data_source).on_conflict_ignore().execute() + except: + pass else: if kwargs.get('silent') != 1: print('Updating... one more for version 4.0.0') - cur.close() - con.close() - def update_db_v_41(**kwargs): - con, cur = get_cur() + cursor = conn.cursor() sql = """ ALTER TABLE `servers` ADD COLUMN nginx INTEGER NOT NULL DEFAULT 0; """ try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + cursor.execute(sql) + except Exception as e: if kwargs.get('silent') != 1: if e.args[0] == 'duplicate column name: nginx' or e == " 1060 (42S21): Duplicate column name 'nginx' ": print('Updating... one more for version 4.0.0') @@ -328,19 +161,15 @@ def update_db_v_41(**kwargs): else: print("Updating... one more for version 4.0.0") - cur.close() - con.close() - def update_db_v_42(**kwargs): - con, cur = get_cur() + cursor = conn.cursor() sql = """ ALTER TABLE `servers` ADD COLUMN haproxy INTEGER NOT NULL DEFAULT 0; """ try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + cursor.execute(sql) + except Exception as e: if kwargs.get('silent') != 1: if e.args[0] == 'duplicate column name: haproxy' or e == " 1060 (42S21): Duplicate column name 'haproxy' ": print('Updating... go to version 4.2.3') @@ -349,62 +178,28 @@ def update_db_v_42(**kwargs): else: print("Updating... go to version 4.2.3") - cur.close() - con.close() - - -def update_db_v_4_3(**kwargs): - con, cur = get_cur() - sql = """ - CREATE TABLE IF NOT EXISTS user_groups(user_id INTEGER NOT NULL, user_group_id INTEGER NOT NULL, UNIQUE(user_id,user_group_id)); - """ - try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: - if kwargs.get('silent') != 1: - if e.args[0] == 'duplicate column name: haproxy' or e == " 1060 (42S21): Duplicate column name 'haproxy' ": - print('Updating... go to version 4.3.0') - else: - print("An error occurred:", e) - - cur.close() - con.close() def update_db_v_4_3_0(**kwargs): - con, cur = get_cur() - if mysql_enable == '1': - sql = """ - insert IGNORE into user_groups(user_id, user_group_id) select user.id, user.groups from user; - """ - else: - sql = """ - insert OR IGNORE into user_groups(user_id, user_group_id) select id, groups from user; - """ try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + UserGroups.insert_from(User.select(User.user_id, User.groups), + fields=[UserGroups.user_id, UserGroups.user_group_id]).on_conflict_ignore().execute() + except Exception as e: if kwargs.get('silent') != 1: if e.args[0] == 'duplicate column name: haproxy' or e == " 1060 (42S21): Duplicate column name 'haproxy' ": print('Updating... go to version 4.3.1') else: print("An error occurred:", e) - cur.close() - con.close() - def update_db_v_4_3_1(**kwargs): - con, cur = get_cur() + cursor = conn.cursor() sql = """ ALTER TABLE `servers` ADD COLUMN pos INTEGER NOT NULL DEFAULT 0; """ try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + cursor.execute(sql) + except Exception as e: if kwargs.get('silent') != 1: if e.args[0] == 'duplicate column name: pos' or e == " 1060 (42S21): Duplicate column name 'pos' ": print('Updating... go to version 4.3.2') @@ -413,101 +208,14 @@ def update_db_v_4_3_1(**kwargs): else: print("DB has been updated to 4.3.1") - cur.close() - con.close() - - -def update_db_v_4_3_2(**kwargs): - con, cur = get_cur() - sql = """ - INSERT INTO settings (param, value, section, `desc`) values('ldap_type', '0', 'ldap', 'If 0 then LDAP is be used , if 1 then LDAPS'); - """ - try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: - if kwargs.get('silent') != 1: - if e.args[0] == 'columns param, group are not unique' or e == " 1060 (42S21): columns param, group are not unique ": - print('Updating... go to version 4.4.0') - else: - print("An error occurred:", e) - else: - print("Updating... go to version 4.4.0") - - cur.close() - con.close() - - -def update_db_v_4_4(**kwargs): - con, cur = get_cur() - sql = """ - CREATE TABLE IF NOT EXISTS `smon` ( - `id` INTEGER NOT NULL, - `ip` INTEGER, - `port` INTEGER, - `status` INTEGER DEFAULT 1, - `en` INTEGER DEFAULT 1, - `desc` varchar(64), - `response_time` varchar(64), - `time_state` integer default 0, - `group` varchar(64), - `script` varchar(64), - `http` varchar(64), - `http_status` INTEGER DEFAULT 1, - `body` varchar(64), - `body_status` INTEGER DEFAULT 1, - `telegram_channel_id` INTEGER, - `user_group` INTEGER, - UNIQUE(ip, port, http, body), - PRIMARY KEY(`id`) - );""" - try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: - if kwargs.get('silent') != 1: - if e.args[0] == 'duplicate column name: pos' or e == " 1060 (42S21): Duplicate column name 'pos' ": - print('Updating... go to version 4.4.1') - else: - print("An error occurred:", e) - - cur.close() - con.close() - - -def update_db_v_4_4_2(**kwargs): - con, cur = get_cur() - sql = """CREATE TABLE IF NOT EXISTS `waf_rules` (`id` INTEGER NOT NULL, - serv varchar(64), - `rule_name` varchar(64), - `rule_file` varchar(64), - `desc` varchar(1024), - `en` INTEGER DEFAULT 1, - UNIQUE(serv, rule_name), - PRIMARY KEY(`id`) ); """ - try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: - if kwargs.get('silent') != 1: - if e.args[0] == 'duplicate column name: version' or e == "1060 (42S21): Duplicate column name 'version' ": - print('Updating... go to version 4.4.1') - else: - print("Updating... go to version to 4.4.1") - - cur.close() - con.close() def update_db_v_4_4_2_1(**kwargs): - con, cur = get_cur() - sql = """ - ALTER TABLE `settings` ADD COLUMN `group` INTEGER NOT NULL DEFAULT 1; - """ + cursor = conn.cursor() + sql = """ALTER TABLE `settings` ADD COLUMN `group` INTEGER NOT NULL DEFAULT 1;""" try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + cursor.execute(sql) + except Exception as e: if kwargs.get('silent') != 1: if e.args[0] == 'duplicate column name: group' or e == " 1060 (42S21): Duplicate column name 'group' ": print('Updating... go to version 4.4.2') @@ -516,75 +224,47 @@ def update_db_v_4_4_2_1(**kwargs): else: print("DB has been updated to 4.4.2") - cur.close() - con.close() def update_db_v_4_3_2_1(**kwargs): - con, cur = get_cur() groups = '' - sql = """ select id from `groups` """ + query = Groups.select() + try: - cur.execute(sql) - except sqltool.Error as e: + query_res = query.execute() + except Exception as e: funct.out_error(e) else: - groups = cur.fetchall() + groups = query_res for g in groups: - sql = """ - INSERT INTO settings (param, value, section, `desc`, `group`) values('haproxy_enterprise', '0', 'haproxy', 'Use this option, if your HAProxy is enterprise. It change service name for rebooting/reloading', '%s'); - """ % g[0] try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + Setting.insert(param='haproxy_enterprise', + value=0, + section='haproxy', + desc='Use this option, if your HAProxy is enterprise. It changes service name for rebooting/reloading', + group=g.group_id).execute() + + except Exception as e: if kwargs.get('silent') != 1: - if e.args[0] == 'columns param, group are not unique' or e == " 1060 (42S21): columns param, group are not unique ": + if str(e) == 'columns param, group are not unique': pass else: print("An error occurred:", e) else: print("Updating... groups") - cur.close() - con.close() - - -def update_db_v_4_5(**kwargs): - con, cur = get_cur() - sql = """CREATE TABLE IF NOT EXISTS `alerts` (`id` INTEGER NOT NULL, - `message` varchar(64), - `level` varchar(64), - `ip` varchar(64), - `port` INTEGER, - `user_group` INTEGER default 1, - `service` varchar(64), - `date` DATETIME default '0000-00-00 00:00:00', - PRIMARY KEY(`id`) ); """ - try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: - if kwargs.get('silent') != 1: - if e.args[0] == 'duplicate column name: version' or e == "1060 (42S21): Duplicate column name 'version' ": - print('Updating... go to version 4.5.0') - else: - print("Updating... go to version to 4.5.0") - - cur.close() - con.close() def update_db_v_4_5_1(**kwargs): - con, cur = get_cur() - + cursor = conn.cursor() sql = """ select name from role where name = 'superAdmin';""" + try: - cur.execute(sql) - except sqltool.Error as e: + cursor.execute(sql) + except Exception as e: funct.out_error(e) else: - role = cur.fetchall() + role = cursor.fetchall() if not role: sql = list() @@ -596,46 +276,39 @@ def update_db_v_4_5_1(**kwargs): sql.append("update user set role = 'admin' where role = 'editor';") for i in sql: try: - cur.execute(i) - con.commit() - except sqltool.Error as e: + cursor.execute(i) + except: pass else: if kwargs.get('silent') != 1: print('DB has been updated to 4.5.0') - cur.close() - con.close() def update_db_v_4_5_4(**kwargs): - con, cur = get_cur() + cursor = conn.cursor() sql = list() sql.append("ALTER TABLE `servers` ADD COLUMN `nginx_active` INTEGER NOT NULL DEFAULT 0;") sql.append("ALTER TABLE `servers` ADD COLUMN `firewall_enable` INTEGER NOT NULL DEFAULT 0;") sql.append("delete from settings where param = 'firewall_enable';") for i in sql: try: - cur.execute(i) - con.commit() - except sqltool.Error as e: + cursor.execute(i) + except Exception as e: pass else: if kwargs.get('silent') != 1: print('Updating... go to version 4.5.7') - cur.close() - con.close() def update_db_v_4_5_7(**kwargs): - con, cur = get_cur() + cursor = conn.cursor() sql = """ ALTER TABLE `servers` ADD COLUMN nginx_alert INTEGER NOT NULL DEFAULT 0; """ try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + cursor.execute(sql) + except Exception as e: if kwargs.get('silent') != 1: if e.args[0] == 'duplicate column name: nginx_alert' or e == " 1060 (42S21): Duplicate column name 'nginx_alert' ": print('Updating... go to version 4.5.8') @@ -644,417 +317,326 @@ def update_db_v_4_5_7(**kwargs): else: print("DB has been updated to 4.3.1") - cur.close() - con.close() - - -def update_db_v_4_5_8(**kwargs): - con, cur = get_cur() - sql = """CREATE TABLE IF NOT EXISTS `geoip_codes` (`id` INTEGER NOT NULL, - `code` varchar(64), - `name` varchar(64), - UNIQUE(`code`, `name`), - PRIMARY KEY(`id`) ); """ - try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: - if kwargs.get('silent') != 1: - if e.args[0] == 'duplicate column name: id' or e == "1060 (42S21): Duplicate column name 'id' ": - print('Updating... go to version 4.5.0') - else: - print("Updating... go to version to 4.5.0") - - cur.close() - con.close() def update_db_v_4_5_8_1(**kwargs): - con, cur = get_cur() - sql = list() - sql.append("INSERT INTO geoip_codes ('code', 'name') values('RW','Rwanda');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('SO','Somalia');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('YE','Yemen');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('IQ','Iraq');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('SA','Saudi Arabia');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('IR','Iran');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('CY','Cyprus');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('TZ','Tanzania');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('SY','Syria');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('AM','Armenia');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('KE','Kenya');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('CD','DR Congo');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('DJ','Djibouti');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('UG','Uganda');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('CF','Central African Republic');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('SC','Seychelles');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('JO','Hashemite Kingdom of Jordan');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('LB','Lebanon');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('KW','Kuwait');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('OM','Oman');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('QA','Qatar');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('BH','Bahrain');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('AE','United Arab Emirates');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('IL','Israel');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('TR','Turkey');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('ET','Ethiopia');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('ER','Eritrea');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('EG','Egypt');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('SD','Sudan');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('GR','Greece');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('BI','Burundi');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('EE','Estonia');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('LV','Latvia');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('AZ','Azerbaijan');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('LT','Republic of Lithuania');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('SJ','Svalbard and Jan Mayen');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('GE','Georgia');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('MD','Republic of Moldova');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('BY','Belarus');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('FI','Finland');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('AX','Åland');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('UA','Ukraine');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('MK','North Macedonia');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('HU','Hungary');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('BG','Bulgaria');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('AL','Albania');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('PL','Poland');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('RO','Romania');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('XK','Kosovo');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('ZW','Zimbabwe');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('ZM','Zambia');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('KM','Comoros');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('MW','Malawi');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('LS','Lesotho');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('BW','Botswana');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('MU','Mauritius');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('SZ','Eswatini');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('RE','Réunion');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('ZA','South Africa');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('YT','Mayotte');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('MZ','Mozambique');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('MG','Madagascar');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('AF','Afghanistan');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('PK','Pakistan');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('BD','Bangladesh');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('TM','Turkmenistan');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('TJ','Tajikistan');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('LK','Sri Lanka');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('BT','Bhutan');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('IN','India');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('MV','Maldives');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('IO','British Indian Ocean Territory');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('NP','Nepal');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('MM','Myanmar');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('UZ','Uzbekistan');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('KZ','Kazakhstan');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('KG','Kyrgyzstan');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('TF','French Southern Territories');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('HM','Heard Island and McDonald Islands');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('CC','Cocos [Keeling] Islands');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('PW','Palau');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('VN','Vietnam');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('TH','Thailand');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('ID','Indonesia');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('LA','Laos');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('TW','Taiwan');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('PH','Philippines');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('MY','Malaysia');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('CN','China');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('HK','Hong Kong');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('BN','Brunei');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('MO','Macao');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('KH','Cambodia');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('KR','South Korea');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('JP','Japan');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('KP','North Korea');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('SG','Singapore');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('CK','Cook Islands');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('TL','East Timor');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('RU','Russia');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('MN','Mongolia');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('AU','Australia');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('CX','Christmas Island');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('MH','Marshall Islands');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('FM','Federated States of Micronesia');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('PG','Papua New Guinea');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('SB','Solomon Islands');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('TV','Tuvalu');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('NR','Nauru');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('VU','Vanuatu');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('NC','New Caledonia');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('NF','Norfolk Island');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('NZ','New Zealand');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('FJ','Fiji');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('LY','Libya');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('CM','Cameroon');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('SN','Senegal');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('CG','Congo Republic');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('PT','Portugal');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('LR','Liberia');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('CI','Ivory Coast');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('GH','Ghana');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('GQ','Equatorial Guinea');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('NG','Nigeria');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('BF','Burkina Faso');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('TG','Togo');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('GW','Guinea-Bissau');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('MR','Mauritania');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('BJ','Benin');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('GA','Gabon');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('SL','Sierra Leone');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('ST','São Tomé and Príncipe');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('GI','Gibraltar');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('GM','Gambia');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('GN','Guinea');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('TD','Chad');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('NE','Niger');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('ML','Mali');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('EH','Western Sahara');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('TN','Tunisia');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('ES','Spain');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('MA','Morocco');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('MT','Malta');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('DZ','Algeria');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('FO','Faroe Islands');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('DK','Denmark');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('IS','Iceland');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('GB','United Kingdom');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('CH','Switzerland');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('SE','Sweden');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('NL','Netherlands');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('AT','Austria');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('BE','Belgium');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('DE','Germany');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('LU','Luxembourg');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('IE','Ireland');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('MC','Monaco');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('FR','France');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('AD','Andorra');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('LI','Liechtenstein');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('JE','Jersey');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('IM','Isle of Man');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('GG','Guernsey');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('SK','Slovakia');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('CZ','Czechia');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('NO','Norway');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('VA','Vatican City');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('SM','San Marino');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('IT','Italy');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('SI','Slovenia');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('ME','Montenegro');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('HR','Croatia');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('BA','Bosnia and Herzegovina');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('AO','Angola');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('NA','Namibia');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('SH','Saint Helena');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('BV','Bouvet Island');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('BB','Barbados');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('CV','Cabo Verde');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('GY','Guyana');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('GF','French Guiana');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('SR','Suriname');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('PM','Saint Pierre and Miquelon');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('GL','Greenland');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('PY','Paraguay');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('UY','Uruguay');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('BR','Brazil');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('FK','Falkland Islands');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('GS','South Georgia and the South Sandwich Islands');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('JM','Jamaica');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('DO','Dominican Republic');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('CU','Cuba');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('MQ','Martinique');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('BS','Bahamas');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('BM','Bermuda');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('AI','Anguilla');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('TT','Trinidad and Tobago');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('KN','St Kitts and Nevis');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('DM','Dominica');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('AG','Antigua and Barbuda');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('LC','Saint Lucia');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('TC','Turks and Caicos Islands');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('AW','Aruba');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('VG','British Virgin Islands');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('VC','Saint Vincent and the Grenadines');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('MS','Montserrat');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('MF','Saint Martin');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('BL','Saint Barthélemy');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('GP','Guadeloupe');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('GD','Grenada');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('KY','Cayman Islands');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('BZ','Belize');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('SV','El Salvador');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('GT','Guatemala');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('HN','Honduras');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('NI','Nicaragua');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('CR','Costa Rica');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('VE','Venezuela');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('EC','Ecuador');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('CO','Colombia');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('PA','Panama');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('HT','Haiti');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('AR','Argentina');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('CL','Chile');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('BO','Bolivia');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('PE','Peru');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('MX','Mexico');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('PF','French Polynesia');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('PN','Pitcairn Islands');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('KI','Kiribati');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('TK','Tokelau');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('TO','Tonga');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('WF','Wallis and Futuna');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('WS','Samoa');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('NU','Niue');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('MP','Northern Mariana Islands');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('GU','Guam');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('PR','Puerto Rico');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('VI','U.S. Virgin Islands');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('UM','U.S. Minor Outlying Islands');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('AS','American Samoa');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('CA','Canada');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('US','United States');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('PS','Palestine');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('RS','Serbia');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('AQ','Antarctica');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('SX','Sint Maarten');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('CW','Curaçao');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('BQ','Bonaire');") - sql.append("INSERT INTO geoip_codes ('code', 'name') values('SS','South Sudan');") - for i in sql: - try: - cur.execute(i) - con.commit() - except sqltool.Error as e: - pass + data_source = [ + {'code': 'RW', 'name': 'Rwanda'}, + {'code': 'SO', 'name': 'Somalia'}, + {'code': 'YE', 'name': 'Yemen'}, + {'code': 'IQ', 'name': 'Iraq'}, + {'code': 'SA', 'name': 'Saudi Arabia'}, + {'code': 'IR', 'name': 'Iran'}, + {'code': 'CY', 'name': 'Cyprus'}, + {'code': 'TZ', 'name': 'Tanzania'}, + {'code': 'SY', 'name': 'Syria'}, + {'code': 'AM', 'name': 'Armenia'}, + {'code': 'KE', 'name': 'Kenya'}, + {'code': 'CD', 'name': 'DR Congo'}, + {'code': 'DJ', 'name': 'Djibouti'}, + {'code': 'UG', 'name': 'Uganda'}, + {'code': 'CF', 'name': 'Central African Republic'}, + {'code': 'SC', 'name': 'Seychelles'}, + {'code': 'JO', 'name': 'Hashemite Kingdom of Jordan'}, + {'code': 'LB', 'name': 'Lebanon'}, + {'code': 'KW', 'name': 'Kuwait'}, + {'code': 'OM', 'name': 'Oman'}, + {'code': 'QA', 'name': 'Qatar'}, + {'code': 'BH', 'name': 'Bahrain'}, + {'code': 'AE', 'name': 'United Arab Emirates'}, + {'code': 'IL', 'name': 'Israel'}, + {'code': 'TR', 'name': 'Turkey'}, + {'code': 'ET', 'name': 'Ethiopia'}, + {'code': 'ER', 'name': 'Eritrea'}, + {'code': 'EG', 'name': 'Egypt'}, + {'code': 'SD', 'name': 'Sudan'}, + {'code': 'GR', 'name': 'Greece'}, + {'code': 'BI', 'name': 'Burundi'}, + {'code': 'EE', 'name': 'Estonia'}, + {'code': 'LV', 'name': 'Latvia'}, + {'code': 'AZ', 'name': 'Azerbaijan'}, + {'code': 'LT', 'name': 'Republic of Lithuania'}, + {'code': 'SJ', 'name': 'Svalbard and Jan Mayen'}, + {'code': 'GE', 'name': 'Georgia'}, + {'code': 'MD', 'name': 'Republic of Moldova'}, + {'code': 'BY', 'name': 'Belarus'}, + {'code': 'FI', 'name': 'Finland'}, + {'code': 'AX', 'name': 'Åland'}, + {'code': 'UA', 'name': 'Ukraine'}, + {'code': 'MK', 'name': 'North Macedonia'}, + {'code': 'HU', 'name': 'Hungary'}, + {'code': 'BG', 'name': 'Bulgaria'}, + {'code': 'AL', 'name': 'Albania'}, + {'code': 'PL', 'name': 'Poland'}, + {'code': 'RO', 'name': 'Romania'}, + {'code': 'XK', 'name': 'Kosovo'}, + {'code': 'ZW', 'name': 'Zimbabwe'}, + {'code': 'ZM', 'name': 'Zambia'}, + {'code': 'KM', 'name': 'Comoros'}, + {'code': 'MW', 'name': 'Malawi'}, + {'code': 'LS', 'name': 'Lesotho'}, + {'code': 'BW', 'name': 'Botswana'}, + {'code': 'MU', 'name': 'Mauritius'}, + {'code': 'SZ', 'name': 'Eswatini'}, + {'code': 'RE', 'name': 'Réunion'}, + {'code': 'ZA', 'name': 'South Africa'}, + {'code': 'YT', 'name': 'Mayotte'}, + {'code': 'MZ', 'name': 'Mozambique'}, + {'code': 'MG', 'name': 'Madagascar'}, + {'code': 'AF', 'name': 'Afghanistan'}, + {'code': 'PK', 'name': 'Pakistan'}, + {'code': 'BD', 'name': 'Bangladesh'}, + {'code': 'TM', 'name': 'Turkmenistan'}, + {'code': 'TJ', 'name': 'Tajikistan'}, + {'code': 'LK', 'name': 'Sri Lanka'}, + {'code': 'BT', 'name': 'Bhutan'}, + {'code': 'IN', 'name': 'India'}, + {'code': 'MV', 'name': 'Maldives'}, + {'code': 'IO', 'name': 'British Indian Ocean Territory'}, + {'code': 'NP', 'name': 'Nepal'}, + {'code': 'MM', 'name': 'Myanmar'}, + {'code': 'UZ', 'name': 'Uzbekistan'}, + {'code': 'KZ', 'name': 'Kazakhstan'}, + {'code': 'KG', 'name': 'Kyrgyzstan'}, + {'code': 'TF', 'name': 'French Southern Territories'}, + {'code': 'HM', 'name': 'Heard Island and McDonald Islands'}, + {'code': 'CC', 'name': 'Cocos [Keeling] Islands'}, + {'code': 'PW', 'name': 'Palau'}, + {'code': 'VN', 'name': 'Vietnam'}, + {'code': 'TH', 'name': 'Thailand'}, + {'code': 'ID', 'name': 'Indonesia'}, + {'code': 'LA', 'name': 'Laos'}, + {'code': 'TW', 'name': 'Taiwan'}, + {'code': 'PH', 'name': 'Philippines'}, + {'code': 'MY', 'name': 'Malaysia'}, + {'code': 'CN', 'name': 'China'}, + {'code': 'HK', 'name': 'Hong Kong'}, + {'code': 'BN', 'name': 'Brunei'}, + {'code': 'MO', 'name': 'Macao'}, + {'code': 'KH', 'name': 'Cambodia'}, + {'code': 'KR', 'name': 'South Korea'}, + {'code': 'JP', 'name': 'Japan'}, + {'code': 'KP', 'name': 'North Korea'}, + {'code': 'SG', 'name': 'Singapore'}, + {'code': 'CK', 'name': 'Cook Islands'}, + {'code': 'TL', 'name': 'East Timor'}, + {'code': 'RU', 'name': 'Russia'}, + {'code': 'MN', 'name': 'Mongolia'}, + {'code': 'AU', 'name': 'Australia'}, + {'code': 'CX', 'name': 'Christmas Island'}, + {'code': 'MH', 'name': 'Marshall Islands'}, + {'code': 'FM', 'name': 'Federated States of Micronesia'}, + {'code': 'PG', 'name': 'Papua New Guinea'}, + {'code': 'SB', 'name': 'Solomon Islands'}, + {'code': 'TV', 'name': 'Tuvalu'}, + {'code': 'NR', 'name': 'Nauru'}, + {'code': 'VU', 'name': 'Vanuatu'}, + {'code': 'NC', 'name': 'New Caledonia'}, + {'code': 'NF', 'name': 'Norfolk Island'}, + {'code': 'NZ', 'name': 'New Zealand'}, + {'code': 'FJ', 'name': 'Fiji'}, + {'code': 'LY', 'name': 'Libya'}, + {'code': 'CM', 'name': 'Cameroon'}, + {'code': 'SN', 'name': 'Senegal'}, + {'code': 'CG', 'name': 'Congo Republic'}, + {'code': 'PT', 'name': 'Portugal'}, + {'code': 'LR', 'name': 'Liberia'}, + {'code': 'CI', 'name': 'Ivory Coast'}, + {'code': 'GH', 'name': 'Ghana'}, + {'code': 'GQ', 'name': 'Equatorial Guinea'}, + {'code': 'NG', 'name': 'Nigeria'}, + {'code': 'BF', 'name': 'Burkina Faso'}, + {'code': 'TG', 'name': 'Togo'}, + {'code': 'GW', 'name': 'Guinea-Bissau'}, + {'code': 'MR', 'name': 'Mauritania'}, + {'code': 'BJ', 'name': 'Benin'}, + {'code': 'GA', 'name': 'Gabon'}, + {'code': 'SL', 'name': 'Sierra Leone'}, + {'code': 'ST', 'name': 'São Tomé and Príncipe'}, + {'code': 'GI', 'name': 'Gibraltar'}, + {'code': 'GM', 'name': 'Gambia'}, + {'code': 'GN', 'name': 'Guinea'}, + {'code': 'TD', 'name': 'Chad'}, + {'code': 'NE', 'name': 'Niger'}, + {'code': 'ML', 'name': 'Mali'}, + {'code': 'EH', 'name': 'Western Sahara'}, + {'code': 'TN', 'name': 'Tunisia'}, + {'code': 'ES', 'name': 'Spain'}, + {'code': 'MA', 'name': 'Morocco'}, + {'code': 'MT', 'name': 'Malta'}, + {'code': 'DZ', 'name': 'Algeria'}, + {'code': 'FO', 'name': 'Faroe Islands'}, + {'code': 'DK', 'name': 'Denmark'}, + {'code': 'IS', 'name': 'Iceland'}, + {'code': 'GB', 'name': 'United Kingdom'}, + {'code': 'CH', 'name': 'Switzerland'}, + {'code': 'SE', 'name': 'Sweden'}, + {'code': 'NL', 'name': 'Netherlands'}, + {'code': 'AT', 'name': 'Austria'}, + {'code': 'BE', 'name': 'Belgium'}, + {'code': 'DE', 'name': 'Germany'}, + {'code': 'LU', 'name': 'Luxembourg'}, + {'code': 'IE', 'name': 'Ireland'}, + {'code': 'MC', 'name': 'Monaco'}, + {'code': 'FR', 'name': 'France'}, + {'code': 'AD', 'name': 'Andorra'}, + {'code': 'LI', 'name': 'Liechtenstein'}, + {'code': 'JE', 'name': 'Jersey'}, + {'code': 'IM', 'name': 'Isle of Man'}, + {'code': 'GG', 'name': 'Guernsey'}, + {'code': 'SK', 'name': 'Slovakia'}, + {'code': 'CZ', 'name': 'Czechia'}, + {'code': 'NO', 'name': 'Norway'}, + {'code': 'VA', 'name': 'Vatican City'}, + {'code': 'SM', 'name': 'San Marino'}, + {'code': 'IT', 'name': 'Italy'}, + {'code': 'SI', 'name': 'Slovenia'}, + {'code': 'ME', 'name': 'Montenegro'}, + {'code': 'HR', 'name': 'Croatia'}, + {'code': 'BA', 'name': 'Bosnia and Herzegovina'}, + {'code': 'AO', 'name': 'Angola'}, + {'code': 'NA', 'name': 'Namibia'}, + {'code': 'SH', 'name': 'Saint Helena'}, + {'code': 'BV', 'name': 'Bouvet Island'}, + {'code': 'BB', 'name': 'Barbados'}, + {'code': 'CV', 'name': 'Cabo Verde'}, + {'code': 'GY', 'name': 'Guyana'}, + {'code': 'GF', 'name': 'French Guiana'}, + {'code': 'SR', 'name': 'Suriname'}, + {'code': 'PM', 'name': 'Saint Pierre and Miquelon'}, + {'code': 'GL', 'name': 'Greenland'}, + {'code': 'PY', 'name': 'Paraguay'}, + {'code': 'UY', 'name': 'Uruguay'}, + {'code': 'BR', 'name': 'Brazil'}, + {'code': 'FK', 'name': 'Falkland Islands'}, + {'code': 'GS', 'name': 'South Georgia and the South Sandwich Islands'}, + {'code': 'JM', 'name': 'Jamaica'}, + {'code': 'DO', 'name': 'Dominican Republic'}, + {'code': 'CU', 'name': 'Cuba'}, + {'code': 'MQ', 'name': 'Martinique'}, + {'code': 'BS', 'name': 'Bahamas'}, + {'code': 'BM', 'name': 'Bermuda'}, + {'code': 'AI', 'name': 'Anguilla'}, + {'code': 'TT', 'name': 'Trinidad and Tobago'}, + {'code': 'KN', 'name': 'St Kitts and Nevis'}, + {'code': 'DM', 'name': 'Dominica'}, + {'code': 'AG', 'name': 'Antigua and Barbuda'}, + {'code': 'LC', 'name': 'Saint Lucia'}, + {'code': 'TC', 'name': 'Turks and Caicos Islands'}, + {'code': 'AW', 'name': 'Aruba'}, + {'code': 'VG', 'name': 'British Virgin Islands'}, + {'code': 'VC', 'name': 'Saint Vincent and the Grenadines'}, + {'code': 'MS', 'name': 'Montserrat'}, + {'code': 'MF', 'name': 'Saint Martin'}, + {'code': 'BL', 'name': 'Saint Barthélemy'}, + {'code': 'GP', 'name': 'Guadeloupe'}, + {'code': 'GD', 'name': 'Grenada'}, + {'code': 'KY', 'name': 'Cayman Islands'}, + {'code': 'BZ', 'name': 'Belize'}, + {'code': 'SV', 'name': 'El Salvador'}, + {'code': 'GT', 'name': 'Guatemala'}, + {'code': 'HN', 'name': 'Honduras'}, + {'code': 'NI', 'name': 'Nicaragua'}, + {'code': 'CR', 'name': 'Costa Rica'}, + {'code': 'VE', 'name': 'Venezuela'}, + {'code': 'EC', 'name': 'Ecuador'}, + {'code': 'CO', 'name': 'Colombia'}, + {'code': 'PA', 'name': 'Panama'}, + {'code': 'HT', 'name': 'Haiti'}, + {'code': 'AR', 'name': 'Argentina'}, + {'code': 'CL', 'name': 'Chile'}, + {'code': 'BO', 'name': 'Bolivia'}, + {'code': 'PE', 'name': 'Peru'}, + {'code': 'MX', 'name': 'Mexico'}, + {'code': 'PF', 'name': 'French Polynesia'}, + {'code': 'PN', 'name': 'Pitcairn Islands'}, + {'code': 'KI', 'name': 'Kiribati'}, + {'code': 'TK', 'name': 'Tokelau'}, + {'code': 'TO', 'name': 'Tonga'}, + {'code': 'WF', 'name': 'Wallis and Futuna'}, + {'code': 'WS', 'name': 'Samoa'}, + {'code': 'NU', 'name': 'Niue'}, + {'code': 'MP', 'name': 'Northern Mariana Islands'}, + {'code': 'GU', 'name': 'Guam'}, + {'code': 'PR', 'name': 'Puerto Rico'}, + {'code': 'VI', 'name': 'U.S. Virgin Islands'}, + {'code': 'UM', 'name': 'U.S. Minor Outlying Islands'}, + {'code': 'AS', 'name': 'American Samoa'}, + {'code': 'CA', 'name': 'Canada'}, + {'code': 'US', 'name': 'United States'}, + {'code': 'PS', 'name': 'Palestine'}, + {'code': 'RS', 'name': 'Serbia'}, + {'code': 'AQ', 'name': 'Antarctica'}, + {'code': 'SX', 'name': 'Sint Maarten'}, + {'code': 'CW', 'name': 'Curaçao'}, + {'code': 'BQ', 'name': 'Bonaire'}, + {'code': 'SS', 'name': 'South Sudan'} + ] + + try: + GeoipCodes.insert_many(data_source).on_conflict_ignore().execute() + except Exception as e: + print(str(e)) else: if kwargs.get('silent') != 1: print('Updating... go to version 4.5.6') - cur.close() - con.close() def update_db_v_4_5_8_2(**kwargs): - con, cur = get_cur() groups = '' - sql = """ select id from `groups` """ + query = Groups.select() + try: - cur.execute(sql) - except sqltool.Error as e: + query_res = query.execute() + except Exception as e: funct.out_error(e) else: - groups = cur.fetchall() + groups = query_res for g in groups: - sql = """ - INSERT INTO settings (param, value, section, `desc`, `group`) values('maxmind_key', '', 'haproxy', 'License key for downloading to GeoLite2 DB. You can create it on maxmind.com', '%s'); - """ % g[0] try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + Setting.insert(param='maxmind_key', + value='', + section='haproxy', + desc='License key for downloading to GeoLite2 DB. You can create it on maxmind.com', + group=g.group_id).execute() + + except Exception as e: if kwargs.get('silent') != 1: - if e.args[0] == 'columns param, group are not unique' or e == " 1060 (42S21): columns param, group are not unique ": + if str(e) == 'columns param, group are not unique': pass else: print("An error occurred:", e) else: print("Updating... groups") - cur.close() - con.close() def update_db_v_4_5_9(**kwargs): - con, cur = get_cur() - sql = list() - sql.append("INSERT INTO settings (param, value, section, `desc`) values('smon_check_interval', '1', 'monitoring', 'SMON check interval, in minutes')") - sql.append("INSERT INTO settings (param, value, section, `desc`) values('checker_check_interval', '1', 'monitoring', 'Checker check interval, in minutes')") - for i in sql: - try: - cur.execute(i) - con.commit() - except sqltool.Error as e: - pass + data_source = [ + {'param': 'smon_check_interval', 'value': '1', 'section': 'monitoring', 'desc': 'SMON check interval, in minutes', + 'group': '1'}, + {'param': 'checker_check_interval', 'value': '1', 'section': 'monitoring', + 'desc': 'Checker check interval, in minutes', 'group': '1'}, + {'param': 'port_scan_interval', 'value': '5', 'section': 'monitoring', + 'desc': 'Port scanner check interval, in minutes', 'group': '1'}, + ] + + try: + Setting.insert_many(data_source).on_conflict_ignore().execute() + except Exception as e: + if kwargs.get('silent') != 1: + if str(e) == 'columns param, group are not unique': + pass + else: + print("An error occurred:", e) else: if kwargs.get('silent') != 1: print('Updating... DB has been updated to version 4.5.9') - cur.close() - con.close() - - -def update_db_v_5(**kwargs): - con, cur = get_cur() - sql = """CREATE TABLE IF NOT EXISTS providers_creds ( - `id` INTEGER NOT NULL, - `name` VARCHAR ( 64 ), - `type` VARCHAR ( 64 ), - `group` VARCHAR ( 64 ), - `key` VARCHAR ( 64 ), - `secret` VARCHAR ( 64 ), - `create_date` DATETIME default '0000-00-00 00:00:00', - `edit_date` DATETIME default '0000-00-00 00:00:00', - PRIMARY KEY(`id`) - ); - """ - try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: - if kwargs.get('silent') != 1: - if e.args[0] == 'duplicate column name: version' or e == "1060 (42S21): Duplicate column name 'version' ": - print('Updating... DB has been updated to version 5.0.0') - else: - print("Updating... DB has been updated to version 5.0.0") - - cur.close() - con.close() - - -def update_db_v_51(**kwargs): - con, cur = get_cur() - sql = """CREATE TABLE IF NOT EXISTS provisioned_servers ( - `id` INTEGER NOT NULL, - `region` VARCHAR ( 64 ), - `instance_type` VARCHAR ( 64 ), - `public_ip` INTEGER, - `floating_ip` INTEGER, - `volume_size` INTEGER, - `backup` INTEGER, - `monitoring` INTEGER, - `private_networking` INTEGER, - `ssh_key_name` VARCHAR ( 64 ), - `ssh_ids` VARCHAR ( 64 ), - `name` VARCHAR ( 64 ), - `os` VARCHAR ( 64 ), - `firewall` INTEGER, - `provider_id` INTEGER, - `type` VARCHAR ( 64 ), - `status` VARCHAR ( 64 ), - `group_id` INTEGER NOT NULL, - `date` DATETIME default '0000-00-00 00:00:00', - `IP` VARCHAR ( 64 ), - `last_error` VARCHAR ( 256 ), - `delete_on_termination` INTEGER, - PRIMARY KEY(`id`) - ); """ - try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: - if kwargs.get('silent') != 1: - if e.args[0] == 'duplicate column name: version' or e == "1060 (42S21): Duplicate column name 'version' ": - print('Updating... DB has been updated to version 5.0.0') - else: - print("Updating... DB has been updated to version 5.0.0") - - cur.close() - con.close() def update_db_v_5_0_1(**kwargs): - con, cur = get_cur() + cursor = conn.cursor() sql = list() sql.append("alter table provisioned_servers add column project VARCHAR ( 64 )") sql.append("alter table provisioned_servers add column network_name VARCHAR ( 64 )") @@ -1062,277 +644,94 @@ def update_db_v_5_0_1(**kwargs): sql.append("alter table provisioned_servers add column name_template VARCHAR ( 64 )") for i in sql: try: - cur.execute(i) - con.commit() - except sqltool.Error as e: + cursor.execute(i) + except: pass else: if kwargs.get('silent') != 1: print('Updating... DB has been updated to version 5.0.1') - cur.close() - con.close() -def update_db_v_5_1_0_11(**kwargs): - con, cur = get_cur() - sql = """CREATE TABLE IF NOT EXISTS port_scanner_settings ( - server_id INTEGER NOT NULL, - user_group_id INTEGER NOT NULL, - enabled INTEGER NOT NULL, - notify INTEGER NOT NULL, - history INTEGER NOT NULL, - UNIQUE(server_id) - ); """ - try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: - if kwargs.get('silent') != 1: - if e.args[0] == 'duplicate column name: version' or e == "1060 (42S21): Duplicate column name 'version' ": - print('Updating... DB has been updated to version 5.1.0') - else: - print("Updating... DB has been updated to version 5.1.0") - - cur.close() - con.close() - - -def update_db_v_5_1_0_12(**kwargs): - con, cur = get_cur() - sql = """CREATE TABLE IF NOT EXISTS port_scanner_ports ( - `serv` varchar(64), - user_group_id INTEGER NOT NULL, - port INTEGER NOT NULL, - service_name varchar(64), - `date` DATETIME default '0000-00-00 00:00:00' - ); """ - try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: - if kwargs.get('silent') != 1: - if e.args[0] == 'duplicate column name: version' or e == "1060 (42S21): Duplicate column name 'version' ": - print('Updating... DB has been updated to version 5.1.0') - else: - print("Updating... DB has been updated to version 5.1.0") - - cur.close() - con.close() - - -def update_db_v_5_1_0_13(**kwargs): - con, cur = get_cur() - sql = """CREATE TABLE IF NOT EXISTS port_scanner_history ( - `serv` varchar(64), - port INTEGER NOT NULL, - status varchar(64), - service_name varchar(64), - `date` DATETIME default '0000-00-00 00:00:00' - ); """ - try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: - if kwargs.get('silent') != 1: - if e.args[0] == 'duplicate column name: version' or e == "1060 (42S21): Duplicate column name 'version' ": - print('Updating... DB has been updated to version 5.1.0') - else: - print("Updating... DB has been updated to version 5.1.0") - - cur.close() - con.close() - - -def update_db_v_5_1_0(**kwargs): - con, cur = get_cur() - sql = """ - INSERT INTO settings (param, value, section, `desc`) values('port_scan_interval', '5', 'monitoring', 'Port scanner check interval, in minutes'); - """ - try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: - if kwargs.get('silent') != 1: - if e.args[0] == 'columns param, group are not unique' or e == " 1060 (42S21): columns param, group are not unique ": - print('Updating... DB has been updated to version 5.1.0') - else: - print("An error occurred:", e) - else: - print("Updating... DB has been updated to version 5.1.0") - - cur.close() - con.close() - - -def update_db_v_5_1_0_1(**kwargs): - con, cur = get_cur() - sql = """CREATE TABLE api_tokens ( - `token` varchar(64), - `user_name` varchar(64), - `user_group_id` INTEGER NOT NULL, - `user_role` INTEGER NOT NULL, - `create_date` DATETIME default '0000-00-00 00:00:00', - `expire_date` DATETIME default '0000-00-00 00:00:00' - ); """ - try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: - if kwargs.get('silent') != 1: - if e.args[0] == 'duplicate column name: version' or e == "1060 (42S21): Duplicate column name 'version' ": - print('Updating... DB has been updated to version 5.1.0') - else: - print("Updating... DB has been updated to version 5.1.0") - - cur.close() - con.close() - - -def update_db_v_5_1_1(**kwargs): - con, cur = get_cur() - sql = """CREATE TABLE IF NOT EXISTS `slack` ( - `id` INTEGER NOT NULL, - `token` VARCHAR (64), - `chanel_name` INTEGER NOT NULL DEFAULT 1, - `groups` INTEGER NOT NULL DEFAULT 1, - PRIMARY KEY(`id`) - ); - """ - try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: - if kwargs.get('silent') != 1: - if e.args[0] == 'duplicate column name: version' or e == "1060 (42S21): Duplicate column name 'version' ": - print('Updating... DB has been updated to version 5.1.1') - else: - print("Updating... DB has been updated to version 5.1.1") - - cur.close() - con.close() - def update_db_v_5_1_2(**kwargs): - con, cur = get_cur() - sql = list() - sql.append("INSERT INTO settings (param, value, section, `desc`) values('smon_keep_history_range', '14', 'monitoring', 'How many days to keep the history for the SMON service')") - sql.append("INSERT INTO settings (param, value, section, `desc`) values('checker_keep_history_range', '14', 'monitoring', 'How many days to keep the history for the Checker service')") - for i in sql: - try: - cur.execute(i) - con.commit() - except sqltool.Error as e: - pass + data_source = [ + {'param': 'smon_keep_history_range', 'value': '14', 'section': 'monitoring', + 'desc': 'How many days to keep the history for the SMON service', 'group': '1'}, + {'param': 'checker_keep_history_range', 'value': '14', 'section': 'monitoring', + 'desc': 'How many days to keep the history for the Checker service', 'group': '1'} + ] + + try: + Setting.insert_many(data_source).on_conflict_ignore().execute() + except Exception as e: + if kwargs.get('silent') != 1: + if str(e) == 'columns param, group are not unique': + pass + else: + print("An error occurred:", e) else: if kwargs.get('silent') != 1: print('Updating... DB has been updated to version 5.1.2') - cur.close() - con.close() def update_db_v_5_1_3(**kwargs): - con, cur = get_cur() - sql = """ - ALTER TABLE `servers` ADD COLUMN protected INTEGER NOT NULL DEFAULT 0; - """ + cursor = conn.cursor() + sql = """ALTER TABLE `servers` ADD COLUMN protected INTEGER NOT NULL DEFAULT 0;""" try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + cursor.execute(sql) + except Exception as e: if kwargs.get('silent') != 1: - if e.args[0] == 'duplicate column name: protected' or e == " 1060 (42S21): Duplicate column name 'protected' ": + if str(e) == 'duplicate column name: protected': print('Updating... DB has been updated to version 5.1.3') else: print("An error occurred:", e) else: print("DB has been updated to version 5.1.3") - cur.close() - con.close() - - -def update_db_v_5_1_3_2(**kwargs): - con, cur = get_cur() - sql = """ - CREATE TABLE IF NOT EXISTS `metrics_http_status` (`serv` varchar(64), `2xx` INTEGER, `3xx` INTEGER, `4xx` INTEGER, `5xx` INTEGER,`date` DATETIME default '0000-00-00 00:00:00'); - """ - try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: - if kwargs.get('silent') != 1: - if e.args[0] == 'duplicate column name: version' or e == "1060 (42S21): Duplicate column name 'version' ": - print('Updating... DB has been updated to version 5.1.1') - else: - print("Updating... DB has been updated to version 5.1.1") - - cur.close() - con.close() def update_db_v_5_2_0(**kwargs): - con, cur = get_cur() - sql = list() - sql.append("INSERT INTO settings (param, value, section, `desc`) values('portscanner_keep_history_range', '14', 'monitoring', 'How many days to keep the history for the Port scanner service')") - for i in sql: - try: - cur.execute(i) - con.commit() - except sqltool.Error as e: - pass + try: + Setting.insert(param='portscanner_keep_history_range', value=14, section='monitoring', + desc='How many days to keep the history for the Port scanner service').execute() + except Exception as e: + if kwargs.get('silent') != 1: + if str(e) == 'columns param, group are not unique': + pass + else: + print("An error occurred:", e) else: if kwargs.get('silent') != 1: print('Updating... DB has been updated to version 5.2.0') - cur.close() - con.close() def update_ver(): - con, cur = get_cur() - sql = """update version set version = '5.2.2.0'; """ + query = Version.update(version = '5.2.3.0') try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + query.execute() + except: print('Cannot update version') - cur.close() - con.close() + - -def update_all(): +def update_all(): if funct.check_ver() is None: update_db_v_3_4_5_22() update_db_v_4() update_db_v_41() update_db_v_42() - update_db_v_4_3() update_db_v_4_3_0() update_db_v_4_3_1() - update_db_v_4_3_2() - update_db_v_4_4() - update_db_v_4_4_2() update_db_v_4_4_2_1() update_db_v_4_3_2_1() - update_db_v_4_5() update_db_v_4_5_1() update_db_v_4_5_4() update_db_v_4_5_7() - update_db_v_4_5_8() update_db_v_4_5_8_1() update_db_v_4_5_8_2() update_db_v_4_5_9() - update_db_v_5() - update_db_v_51() - update_db_v_5_1_0_11() - update_db_v_5_1_0_12() - update_db_v_5_1_0_13() update_db_v_5_0_1() - update_db_v_5_1_0() - update_db_v_5_1_0_1() - update_db_v_5_1_1() update_db_v_5_1_2() update_db_v_5_1_3() - update_db_v_5_1_3_2() update_db_v_5_2_0() update_ver() @@ -1343,38 +742,24 @@ def update_all_silent(): update_db_v_4(silent=1) update_db_v_41(silent=1) update_db_v_42(silent=1) - update_db_v_4_3(silent=1) update_db_v_4_3_0(silent=1) update_db_v_4_3_1(silent=1) - update_db_v_4_3_2(silent=1) - update_db_v_4_4(silent=1) - update_db_v_4_4_2(silent=1) update_db_v_4_4_2_1(silent=1) update_db_v_4_3_2_1(silent=1) - update_db_v_4_5(silent=1) update_db_v_4_5_1(silent=1) update_db_v_4_5_4(silent=1) update_db_v_4_5_7(silent=1) - update_db_v_4_5_8(silent=1) update_db_v_4_5_8_1(silent=1) update_db_v_4_5_8_2(silent=1) update_db_v_4_5_9(silent=1) - update_db_v_5(silent=1) - update_db_v_51(silent=1) update_db_v_5_0_1(silent=1) - update_db_v_5_1_0_11(silent=1) - update_db_v_5_1_0_12(silent=1) - update_db_v_5_1_0_13(silent=1) - update_db_v_5_1_0(silent=1) - update_db_v_5_1_0_1(silent=1) - update_db_v_5_1_1(silent=1) update_db_v_5_1_2(silent=1) update_db_v_5_1_3(silent=1) - update_db_v_5_1_3_2(silent=1) update_db_v_5_2_0(silent=1) update_ver() if __name__ == "__main__": - create_table() + create_tables() + default_values() update_all() diff --git a/app/db_model.py b/app/db_model.py new file mode 100644 index 00000000..9dd53dc6 --- /dev/null +++ b/app/db_model.py @@ -0,0 +1,406 @@ +from peewee import * +from datetime import datetime +from funct import get_config_var + +mysql_enable = get_config_var('mysql', 'enable') + +if mysql_enable == '1': + mysql_user = funct.get_config_var('mysql', 'mysql_user') + mysql_password = funct.get_config_var('mysql', 'mysql_password') + mysql_db = funct.get_config_var('mysql', 'mysql_db') + mysql_host = funct.get_config_var('mysql', 'mysql_host') + mysql_port = funct.get_config_var('mysql', 'mysql_port') + conn = MySQLDatabase(mysql_db, user=mysql_user, password=mysql_password, host=mysql_host, port=mysql_port) +else: + db = "roxy-wi.db" + conn = SqliteDatabase(db) + + +class BaseModel(Model): + class Meta: + database = conn + + +class User(BaseModel): + user_id = AutoField(column_name='id') + username = TextField(constraints=[SQL('UNIQUE')]) + email = TextField(constraints=[SQL('UNIQUE')]) + password = TextField(null=True) + role = TextField() + groups = TextField() + ldap_user = IntegerField(default=0) + activeuser = IntegerField(default=1) + + class Meta: + table_name = 'user' + + +class Server(BaseModel): + server_id = AutoField(column_name='id') + hostname = TextField() + ip = TextField() + groups = TextField() + type_ip = IntegerField(default=0) + enable = IntegerField(default=1) + master = IntegerField(default=0) + cred = IntegerField(default=1) + alert = IntegerField(default=0) + metrics = IntegerField(default=0) + port = IntegerField(default=22) + desc = TextField(null=True) + active = IntegerField(default=0) + keepalived = IntegerField(default=0) + nginx = IntegerField(default=0) + haproxy = IntegerField(default=0) + pos = IntegerField(default=0) + nginx_active = IntegerField(default=0) + firewall_enable = IntegerField(default=0) + nginx_alert = IntegerField(default=0) + protected = IntegerField(default=0) + + class Meta: + table_name = 'servers' + + +class Role(BaseModel): + role_id = AutoField(column_name='id') + name = TextField(constraints=[SQL('UNIQUE')]) + description = DateTimeField() + + class Meta: + table_name = 'role' + + +class Telegram(BaseModel): + id = AutoField() + token = TextField() + chanel_name = TextField() + groups = IntegerField() + + class Meta: + table_name = 'telegram' + + +class Slack(BaseModel): + id = AutoField() + token = TextField() + chanel_name = TextField() + groups = IntegerField() + + class Meta: + table_name = 'slack' + + +class UUID(BaseModel): + user_id = IntegerField() + uuid = TextField() + exp = DateTimeField(default=datetime.now) + + class Meta: + table_name = 'uuid' + primary_key = False + + +class Token(BaseModel): + user_id = IntegerField() + token = TextField() + exp = DateTimeField(default=datetime.now) + + class Meta: + table_name = 'token' + primary_key = False + + +class ApiToken(BaseModel): + token = TextField() + user_name = TextField() + user_group_id = IntegerField() + user_role = IntegerField() + create_date = DateTimeField(default=datetime.now) + expire_date = DateTimeField(default=datetime.now) + + class Meta: + table_name = 'api_tokens' + primary_key = False + + +class Setting(BaseModel): + param = TextField() + value = TextField(null=True) + section = TextField() + desc = TextField() + group = IntegerField(null=True, constraints=[SQL('DEFAULT 1')]) + + class Meta: + table_name = 'settings' + primary_key = False + constraints = [SQL('UNIQUE (param, `group`)')] + + +class Groups(BaseModel): + group_id = AutoField(column_name='id') + name = TextField(constraints=[SQL('UNIQUE')]) + description = TextField(null=True) + + class Meta: + table_name = 'groups' + + +class UserGroups(BaseModel): + user_id = IntegerField() + user_group_id = IntegerField() + + class Meta: + table_name = 'user_groups' + primary_key = False + constraints = [SQL('UNIQUE (user_id, user_group_id)')] + + +class Cred(BaseModel): + id = AutoField() + name = TextField() + enable = IntegerField(constraints=[SQL('DEFAULT 1')]) + username = TextField() + password = TextField(null=True) + groups = IntegerField(constraints=[SQL('DEFAULT 1')]) + + class Meta: + table_name = 'cred' + constraints = [SQL('UNIQUE (name, groups)')] + + +class Backup(BaseModel): + id = AutoField() + server = TextField() + rhost = TextField() + rpath = TextField() + backup_type = TextField(column_name='type') + time = TextField() + cred = IntegerField() + description = TextField(null=True) + + class Meta: + table_name = 'backups' + + +class Metrics(BaseModel): + serv = TextField() + curr_con = IntegerField() + cur_ssl_con = IntegerField() + sess_rate = IntegerField() + max_sess_rate = IntegerField() + date = DateTimeField(default=datetime.now) + + class Meta: + table_name = 'metrics' + primary_key = False + + +class WafMetrics(BaseModel): + serv = TextField() + conn = IntegerField() + date = DateTimeField(default=datetime.now) + + class Meta: + table_name = 'waf_metrics' + primary_key = False + + +class Version(BaseModel): + version = TextField() + + class Meta: + table_name = 'version' + primary_key = False + + +class Option(BaseModel): + id = AutoField() + options = TextField() + groups = TextField() + + class Meta: + table_name = 'options' + + +class SavedServer(BaseModel): + id = AutoField() + server = TextField() + description = TextField(null=True) + groups = TextField() + + class Meta: + table_name = 'saved_servers' + + +class Waf(BaseModel): + server_id = IntegerField() + metrics = IntegerField() + + class Meta: + table_name = 'waf' + primary_key = False + constraints = [SQL('UNIQUE (server_id)')] + + +class WafRules(BaseModel): + id = AutoField() + serv = TextField() + rule_name = TextField() + rule_file = TextField() + desc = TextField(null=True) + en = IntegerField(constraints=[SQL('DEFAULT 1')]) + + class Meta: + table_name = 'waf_rules' + constraints = [SQL('UNIQUE (serv, rule_name)')] + + +class PortScannerSettings(BaseModel): + server_id = IntegerField() + user_group_id = IntegerField() + enabled = IntegerField() + notify = IntegerField() + history = IntegerField() + + class Meta: + table_name = 'port_scanner_settings' + primary_key = False + constraints = [SQL('UNIQUE (server_id)')] + + +class PortScannerPorts(BaseModel): + serv = TextField() + user_group_id = IntegerField() + port = IntegerField() + service_name = TextField() + date = DateTimeField(default=datetime.now) + + class Meta: + table_name = 'port_scanner_ports' + primary_key = False + + +class PortScannerHistory(BaseModel): + serv = TextField() + port = IntegerField() + status = TextField() + service_name = TextField() + date = DateTimeField(default=datetime.now) + + class Meta: + table_name = 'port_scanner_history' + primary_key = False + + +class ProvidersCreds(BaseModel): + id = AutoField() + name = TextField() + type = TextField() + group = TextField() + key = TextField() + secret = TextField(null=True) + create_date = DateTimeField(default=datetime.now) + edit_date = DateTimeField(default=datetime.now) + + class Meta: + table_name = 'providers_creds' + + +class ProvisionedServers(BaseModel): + id = AutoField() + region = TextField() + instance_type = TextField() + public_ip = IntegerField(null=True) + floating_ip = IntegerField(null=True) + volume_size = IntegerField(null=True) + backup = IntegerField(null=True) + monitoring = IntegerField(null=True) + private_networking = IntegerField(null=True) + ssh_key_name = TextField(null=True) + ssh_ids = TextField(null=True) + name = TextField() + os = TextField() + firewall = IntegerField() + provider_id = IntegerField() + type = TextField() + status = TextField() + group_id = IntegerField() + date = DateTimeField(default=datetime.now) + IP = TextField(null=True) + last_error = TextField(null=True) + delete_on_termination = IntegerField(null=True) + project = TextField(null=True) + network_name = TextField(null=True) + volume_type = TextField(null=True) + name_template = TextField(null=True) + + class Meta: + table_name = 'provisioned_servers' + + +class MetricsHttpStatus(BaseModel): + serv = TextField() + ok_ans = IntegerField(column_name='2xx') + redir_ans = IntegerField(column_name='3xx') + not_found_ans = IntegerField(column_name='4xx') + err_ans = IntegerField(column_name='5xx') + date = DateTimeField(default=datetime.now) + + class Meta: + table_name = 'metrics_http_status' + primary_key = False + + +class SMON(BaseModel): + id = AutoField() + ip = IntegerField(null=True) + port = IntegerField(null=True) + status = IntegerField(constraints=[SQL('DEFAULT 1')]) + en = IntegerField(constraints=[SQL('DEFAULT 1')]) + desc = TextField(null=True) + response_time = TextField(null=True) + time_state = IntegerField(constraints=[SQL('DEFAULT 0')]) + group = TextField(null=True) + script = TextField(null=True) + http = TextField(null=True) + http_status = IntegerField(constraints=[SQL('DEFAULT 1')]) + body = TextField(null=True) + body_status = IntegerField(constraints=[SQL('DEFAULT 1')]) + telegram_channel_id = IntegerField(null=True) + user_group = IntegerField() + + class Meta: + table_name = 'smon' + constraints = [SQL('UNIQUE (ip, port, http, body)')] + + +class Alerts(BaseModel): + message = TextField() + level = TextField() + ip = TextField() + port = IntegerField() + user_group = IntegerField(constraints=[SQL('DEFAULT 1')]) + service = TextField() + date = DateTimeField(default=datetime.now) + + class Meta: + table_name = 'alerts' + primary_key = False + + +class GeoipCodes(BaseModel): + code = TextField() + name = TextField() + + class Meta: + table_name = 'geoip_codes' + primary_key = False + constraints = [SQL('UNIQUE (code, name)')] + +def create_tables(): + with conn: + conn.create_tables([User, Server, Role, Telegram, Slack, UUID, Token, ApiToken, Groups, UserGroups, + Setting, Cred, Backup, Metrics, WafMetrics, Version, Option, SavedServer, Waf, + PortScannerSettings, PortScannerPorts, PortScannerHistory, ProvidersCreds, + ProvisionedServers, MetricsHttpStatus, SMON, WafRules, Alerts, GeoipCodes]) diff --git a/app/funct.py b/app/funct.py index ff4f563d..0fb5167d 100644 --- a/app/funct.py +++ b/app/funct.py @@ -46,6 +46,8 @@ def get_data(log_type): fmt = '%Y%m%d' elif log_type == "date_in_log": fmt = "%b %d %H:%M:%S" + elif log_type == 'regular': + fmt = "%Y-%m-%d %H:%M:%S" return now_utc.strftime(fmt) @@ -60,11 +62,11 @@ def get_user_group(**kwargs): user_group_id1 = user_group_id.value groups = sql.select_groups(id=user_group_id1) for g in groups: - if g[0] == int(user_group_id1): + if g.group_id == int(user_group_id1): if kwargs.get('id'): - user_group = g[0] + user_group = g.group_id else: - user_group = g[1] + user_group = g.name except Exception: check_user_group() @@ -145,8 +147,8 @@ def telegram_send_mess(mess, **kwargs): proxy = sql.get_setting('proxy') for telegram in telegrams: - token_bot = telegram[1] - channel_name = telegram[2] + token_bot = telegram.token + channel_name = telegram.chanel_name if token_bot == '' or channel_name == '': mess = " error: Can't send message. Add Telegram channel before use alerting at this servers group" @@ -231,8 +233,9 @@ def is_admin(**kwargs): try: return True if role <= level else False - except Exception: - return False + except Exception as e: + print('error: '+str(e)) + # return False def page_for_admin(**kwargs): @@ -257,16 +260,16 @@ def return_ssh_keys_path(serv, **kwargs): if kwargs.get('id'): for sshs in sql.select_ssh(id=kwargs.get('id')): - ssh_enable = sshs[2] - ssh_user_name = sshs[3] - ssh_user_password = sshs[4] - ssh_key_name = full_path+'/keys/%s.pem' % sshs[1] + ssh_enable = sshs.enable + ssh_user_name = sshs.username + ssh_user_password = sshs.password + ssh_key_name = full_path+'/keys/%s.pem' % sshs.name else: for sshs in sql.select_ssh(serv=serv): - ssh_enable = sshs[3] - ssh_user_name = sshs[4] - ssh_user_password = sshs[5] - ssh_key_name = full_path+'/keys/%s.pem' % sshs[2] + ssh_enable = sshs.enable + ssh_user_name = sshs.username + ssh_user_password = sshs.password + ssh_key_name = full_path+'/keys/%s.pem' % sshs.name return ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name @@ -1001,10 +1004,13 @@ def haproxy_wi_log(**kwargs): else: group_grep = '' cmd = "find "+log_path+"/roxy-wi-* -type f -exec stat --format '%Y :%y %n' '{}' \; | sort -nr | cut -d: -f2- | head -1 |awk '{print $4}' |xargs tail"+group_grep+"|sort -r" - output, stderr = subprocess_execute(cmd) - return output - - + try: + output, stderr = subprocess_execute(cmd) + return output + except: + return '' + + def show_ip(stdout): for line in stdout: if "Permission denied" in line: @@ -1203,11 +1209,8 @@ def get_hash(value): return p -def out_error(e): - if get_config_var('mysql', 'enable') == '1': - error = e - else: - error = e.args[0] +def out_error(error): + error = str(error) try: logging('localhost', error, haproxywi=1, login=1) except Exception: @@ -1291,7 +1294,10 @@ def get_services_status(): service_name = 'grafana' else: service_name = s - cmd = "rpm --query " + service_name + "-* |awk -F\"" + service_name + "\" '{print $2}' |awk -F\".noa\" '{print $1}' |sed 's/-//1' |sed 's/-/./'" + if service_name == 'prometheus': + cmd = "prometheus --version 2>&1 |grep prometheus|awk '{print $3}'" + else: + cmd = "rpm --query " + service_name + "-* |awk -F\"" + service_name + "\" '{print $2}' |awk -F\".noa\" '{print $1}' |sed 's/-//1' |sed 's/-/./'" service_ver, stderr = subprocess_execute(cmd) try: diff --git a/app/hapservers.py b/app/hapservers.py index a59bd7f2..179e26ef 100644 --- a/app/hapservers.py +++ b/app/hapservers.py @@ -11,7 +11,6 @@ funct.check_login() try: user, user_id, role, token, servers = funct.get_users_params() - users = sql.select_users() services = [] except: pass @@ -74,29 +73,40 @@ for s in servers: servers_with_status.append(s[2]) servers_with_status.append(s[11]) if service == 'nginx': + h = (['', ''],) cmd = [ "/usr/sbin/nginx -v 2>&1|awk '{print $3}' && systemctl status nginx |grep -e 'Active' |awk '{print $2, $9$10$11$12$13}' && ps ax |grep nginx:|grep -v grep |wc -l"] - out = funct.ssh_command(s[2], cmd) - h = () - out1 = [] - for k in out.split(): - out1.append(k) - h = (out1,) - servers_with_status.append(h) - servers_with_status.append(h) - servers_with_status.append(s[17]) + try: + out = funct.ssh_command(s[2], cmd) + h = () + out1 = [] + for k in out.split(): + out1.append(k) + h = (out1,) + servers_with_status.append(h) + servers_with_status.append(h) + servers_with_status.append(s[17]) + except: + servers_with_status.append(h) + servers_with_status.append(h) + servers_with_status.append(s[17]) elif service == 'keepalived': + h = (['',''],) cmd = [ "/usr/sbin/keepalived -v 2>&1|head -1|awk '{print $2}' && systemctl status keepalived |grep -e 'Active' |awk '{print $2, $9$10$11$12$13}' && ps ax |grep keepalived|grep -v grep |wc -l"] - out = funct.ssh_command(s[2], cmd) - h = () - out1 = [] - for k in out.split(): - out1.append(k) - h = (out1,) - servers_with_status.append(h) - servers_with_status.append(h) - servers_with_status.append(s[17]) + try: + out = funct.ssh_command(s[2], cmd) + out1 = [] + for k in out.split(): + out1.append(k) + h = (out1,) + servers_with_status.append(h) + servers_with_status.append(h) + servers_with_status.append(s[17]) + except: + servers_with_status.append(h) + servers_with_status.append(h) + servers_with_status.append(s[17]) else: cmd = 'echo "show info" |nc %s %s -w 1 |grep -e "Ver\|Uptime:\|Process_num"' % (s[2], haproxy_sock_port) out = funct.subprocess_execute(cmd) @@ -112,7 +122,7 @@ for s in servers: servers_with_status.append(sql.is_master(s[2])) servers_with_status.append(sql.select_servers(server=s[2])) - is_keepalived = sql.select_keealived(s[2]) + is_keepalived = sql.select_keepalived(s[2]) if is_keepalived: try: @@ -132,7 +142,6 @@ template = template.render(h2=1, title=title, role=role, user=user, - users=users, servers=servers_with_status1, keep_alive=''.join(keep_alive), serv=serv, diff --git a/app/login.py b/app/login.py index b0288d52..be620cb5 100644 --- a/app/login.py +++ b/app/login.py @@ -33,17 +33,17 @@ def send_cookie(login): sql.write_user_uuid(login, user_uuid) sql.write_user_token(login, user_token) - id = sql.get_user_id_by_uuid(user_uuid) + user_id = sql.get_user_id_by_uuid(user_uuid) try: cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) user_group_id = cookie.get('group') user_group_id = user_group_id.value - if sql.check_user_group(id, user_group_id): + if sql.check_user_group(user_id, user_group_id): user_groups = user_group_id else: - user_groups = sql.select_user_groups(id, limit=1) - except: - user_groups = sql.select_user_groups(id, limit=1) + user_groups = sql.select_user_groups(user_id, limit=1) + except Exception: + user_groups = sql.select_user_groups(user_id, limit=1) c = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) c["uuid"] = user_uuid @@ -63,13 +63,13 @@ def send_cookie(login): for g in groups: if g[0] == int(user_groups): user_group = g[1] - except: + except Exception: user_group = '' try: user_name = sql.get_user_name_by_uuid(user_uuid) funct.logging('localhost', ' user: ' + user_name + ', group: ' + user_group + ' log in', haproxywi=1) - except: + except Exception: pass print("Content-type: text/html\n") print('ok') @@ -86,7 +86,7 @@ def ban(): c["ban"]["expires"] = expires.strftime("%a, %d %b %Y %H:%M:%S GMT") try: funct.logging('localhost', login+' failed log in', haproxywi=1, login=1) - except: + except Exception: funct.logging('localhost', ' Failed log in. Wrong username', haproxywi=1) print(c.output()) print("Content-type: text/html\n") @@ -150,7 +150,7 @@ if form.getvalue('error'): try: if sql.get_setting('session_ttl'): session_ttl = sql.get_setting('session_ttl') -except: +except Exception: error = '
Cannot find "session_ttl" parameter. ' \ 'Check it into settings, "main" section
' pass @@ -158,7 +158,7 @@ except: try: role = sql.get_user_role_by_uuid(user_id.value) user = sql.get_user_name_by_uuid(user_id.value) -except: +except Exception: role = "" user = "" pass @@ -167,7 +167,7 @@ except: if form.getvalue('logout'): try: sql.delete_uuid(user_id.value) - except: + except Exception: pass print("Set-cookie: uuid=; expires=Wed, May 18 03:33:20 2003; path=/app; httponly") print("Content-type: text/html\n") @@ -178,16 +178,16 @@ if login is not None and password is not None: USERS = sql.select_users(user=login) for users in USERS: - if users[7] == 0: + if users.activeuser == 0: print("Content-type: text/html\n") print('Your login is disabled') sys.exit() - if users[6] == 1: - if login in users[1]: + if users.ldap_user == 1: + if login in users.username: check_in_ldap(login, password) else: passwordHashed = funct.get_hash(password) - if login in users[1] and passwordHashed == users[3]: + if login in users.username and passwordHashed == users.password: send_cookie(login) break else: diff --git a/app/metrics.py b/app/metrics.py index 04f55983..423e1bfb 100644 --- a/app/metrics.py +++ b/app/metrics.py @@ -18,9 +18,9 @@ try: if service_ver[0] == '* is not installed': servers = '' else: - servers = sql.select_servers_metrics(user_id.value) + servers = sql.select_servers_metrics() services = '1' -except Exception: +except Exception as e: pass diff --git a/app/options.py b/app/options.py index 2710cf0c..19d56721 100644 --- a/app/options.py +++ b/app/options.py @@ -14,7 +14,9 @@ if (form.getvalue('new_metrics') or form.getvalue('new_http_metrics') or form.getvalue('new_waf_metrics') or form.getvalue('metrics_hapwi_ram') or - form.getvalue('metrics_hapwi_cpu')): + form.getvalue('metrics_hapwi_cpu') or + form.getvalue('getoption') or + form.getvalue('getsavedserver')): print('Content-type: application/json\n') else: print('Content-type: text/html\n') @@ -41,7 +43,10 @@ if form.getvalue('getcerts') is not None and serv is not None: print('error: Cannot connect to the server: ' + e.args[0]) if form.getvalue('checkSshConnect') is not None and serv is not None: - print(funct.ssh_command(serv, ["ls -1t"])) + try: + print(funct.ssh_command(serv, ["ls -1t"])) + except Exception as e: + print(e) if form.getvalue('getcert') is not None and serv is not None: cert_id = form.getvalue('getcert') @@ -517,7 +522,7 @@ if act == "overview": async def async_get_overview(serv1, serv2): haproxy = sql.select_haproxy(serv2) - keepalived = sql.select_keealived(serv2) + keepalived = sql.select_keepalived(serv2) nginx = sql.select_nginx(serv2) waf = sql.select_waf_servers(serv2) haproxy_process = '' @@ -525,6 +530,11 @@ if act == "overview": nginx_process = '' waf_process = '' + try: + waf_len = len(waf) + except: + waf_len = 0 + if haproxy == 1: cmd = 'echo "show info" |nc %s %s -w 1|grep -e "Process_num"' % (serv2, sql.get_setting('haproxy_sock_port')) haproxy_process = funct.server_status(funct.subprocess_execute(cmd)) @@ -534,14 +544,12 @@ if act == "overview": keepalived_process = funct.ssh_command(serv2, command) if nginx == 1: - # command = ["ps ax |grep nginx:|grep -v grep|wc -l"] - # nginx_process = funct.ssh_command(serv2, command) nginx_cmd = 'echo "something" |nc %s %s -w 1' % (serv2, sql.get_setting('nginx_stats_port')) nginx_process = funct.server_status(funct.subprocess_execute(nginx_cmd)) - if len(waf) == 1: - commands2 = ["ps ax |grep waf/bin/modsecurity |grep -v grep |wc -l"] - waf_process = funct.ssh_command(serv2, commands2) + if waf_len >= 1: + command = ["ps ax |grep waf/bin/modsecurity |grep -v grep |wc -l"] + waf_process = funct.ssh_command(serv2, command) server_status = (serv1, serv2, @@ -889,6 +897,7 @@ if serv is not None and act == "showMap": print('map' % date) + if form.getvalue('servaction') is not None: server_state_file = sql.get_setting('server_state_file') haproxy_sock = sql.get_setting('haproxy_sock') @@ -1012,8 +1021,8 @@ if form.getvalue('master'): haproxy = form.getvalue('hap') nginx = form.getvalue('nginx') script = "install_keepalived.sh" - fullpath = funct.get_config_var('main', 'fullpath') proxy = sql.get_setting('proxy') + ssh_port = 22 ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = funct.return_ssh_keys_path(master) if ssh_enable == 0: @@ -1044,7 +1053,7 @@ if form.getvalue('master'): group_id = sql.get_group_id_by_server_ip(master) cred_id = sql.get_cred_id_by_server_ip(master) hostname = sql.get_hostname_by_server_ip(master) - sql.add_server(hostname+'-VIP', IP, group_id, '1', '1', '1', cred_id, ssh_port, 'VRRP IP for '+master, haproxy, nginx, '0') + sql.add_server(hostname+'-VIP', IP, group_id, '1', '1', '0', cred_id, ssh_port, 'VRRP IP for '+master, haproxy, nginx, '0') if form.getvalue('master_slave'): master = form.getvalue('master') @@ -1053,8 +1062,8 @@ if form.getvalue('master_slave'): IP = form.getvalue('vrrpip') syn_flood = form.getvalue('syn_flood') script = "install_keepalived.sh" - fullpath = funct.get_config_var('main', 'fullpath') proxy = sql.get_setting('proxy') + ssh_port = 22 ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = funct.return_ssh_keys_path(slave) if ssh_enable == 0: @@ -1091,6 +1100,7 @@ if form.getvalue('masteradd'): kp = form.getvalue('kp') script = "install_keepalived.sh" proxy = sql.get_setting('proxy') + ssh_port = 22 ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = funct.return_ssh_keys_path(master) if ssh_enable == 0: @@ -1124,6 +1134,7 @@ if form.getvalue('masteradd_slave'): kp = form.getvalue('kp') script = "install_keepalived.sh" proxy = sql.get_setting('proxy') + ssh_port = 22 ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = funct.return_ssh_keys_path(slave) if ssh_enable == 0: @@ -1218,6 +1229,7 @@ if form.getvalue('haproxy_exp_install'): stats_password = sql.get_setting('stats_password') stat_page = sql.get_setting('stats_page') proxy = sql.get_setting('proxy') + ssh_port = 22 ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = funct.return_ssh_keys_path(serv) if ssh_enable == 0: @@ -1254,6 +1266,7 @@ if form.getvalue('nginx_exp_install'): stats_port = sql.get_setting('nginx_stats_port') stats_page = sql.get_setting('nginx_stats_page') proxy = sql.get_setting('proxy') + ssh_port = 22 ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = funct.return_ssh_keys_path(serv) if ssh_enable == 0: @@ -1285,6 +1298,7 @@ if form.getvalue('node_exp_install'): serv = form.getvalue('node_exp_install') script = "install_node_exporter.sh" proxy = sql.get_setting('proxy') + ssh_port = 22 ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = funct.return_ssh_keys_path(serv) if ssh_enable == 0: @@ -1314,19 +1328,20 @@ if form.getvalue('backup') or form.getvalue('deljob') or form.getvalue('backupup serv = form.getvalue('server') rpath = form.getvalue('rpath') time = form.getvalue('time') - type = form.getvalue('type') + backup_type = form.getvalue('type') rserver = form.getvalue('rserver') cred = form.getvalue('cred') deljob = form.getvalue('deljob') update = form.getvalue('backupupdate') description = form.getvalue('description') - script = "backup.sh" + script = 'backup.sh' + ssh_port = 22 ssh_enable, ssh_user_name, ssh_user_password, ssh_key_name = funct.return_ssh_keys_path('localhost', id=int(cred)) if deljob: time = '' rpath = '' - type = '' + backup_type = '' elif update: deljob = '' else: @@ -1341,46 +1356,42 @@ if form.getvalue('backup') or form.getvalue('deljob') or form.getvalue('backupup os.system("cp scripts/%s ." % script) - commands = ["chmod +x " + script + " && ./" + script + " HOST=" + rserver + " SERVER=" + serv + " TYPE=" + type + - " SSH_PORT=" + ssh_port + " TIME=" + time + + commands = ["chmod +x " + script + " && ./" + script + " HOST=" + rserver + " SERVER=" + serv + + " TYPE=" + backup_type + " SSH_PORT=" + ssh_port + " TIME=" + time + " RPATH=" + rpath + " DELJOB=" + deljob + " USER=" + str(ssh_user_name) + " KEY=" + str(ssh_key_name)] output, error = funct.subprocess_execute(commands[0]) - if error: - funct.logging('backup', error, haproxywi=1) - print('error: ' + error) + for l in output: + if "Traceback" in l or "FAILED" in l: + try: + print('error: ' + l) + break + except Exception: + print('error: ' + output) + break else: - for l in output: - if "Traceback" in l or "FAILED" in l: - try: - print('error: ' + l) - break - except Exception: - print('error: ' + output) - break - else: - if not deljob and not update: - if sql.insert_backup_job(serv, rserver, rpath, type, time, cred, description): - from jinja2 import Environment, FileSystemLoader + if not deljob and not update: + if sql.insert_backup_job(serv, rserver, rpath, backup_type, time, cred, description): + from jinja2 import Environment, FileSystemLoader - env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True) - template = env.get_template('new_backup.html') - template = template.render(backups=sql.select_backups(server=serv, rserver=rserver), + env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True) + template = env.get_template('new_backup.html') + template = template.render(backups=sql.select_backups(server=serv, rserver=rserver), sshs=sql.select_ssh()) - print(template) - print('success: Backup job has been created') - funct.logging('backup ', ' a new backup job for server ' + serv + ' has been created', haproxywi=1, login=1) - else: - print('error: Cannot add job into DB') - elif deljob: - sql.delete_backups(deljob) - print('Ok') - funct.logging('backup ', ' a backup job for server ' + serv + ' has been deleted', haproxywi=1, login=1) - elif update: - sql.update_backup(serv, rserver, rpath, type, time, cred, description, update) - print('Ok') - funct.logging('backup ', ' a backup job for server ' + serv + ' has been updated', haproxywi=1, login=1) + print(template) + print('success: Backup job has been created') + funct.logging('backup ', ' a new backup job for server ' + serv + ' has been created', haproxywi=1, login=1) + else: + print('error: Cannot add job into DB') + elif deljob: + sql.delete_backups(deljob) + print('Ok') + funct.logging('backup ', ' a backup job for server ' + serv + ' has been deleted', haproxywi=1, login=1) + elif update: + sql.update_backup(serv, rserver, rpath, backup_type, time, cred, description, update) + print('Ok') + funct.logging('backup ', ' a backup job for server ' + serv + ' has been updated', haproxywi=1, login=1) if form.getvalue('install_nginx'): funct.install_nginx(form.getvalue('install_nginx')) @@ -1666,7 +1677,7 @@ if form.getvalue('bwlists_delete'): else: print('success: ' + color + ' list was delete on ' + serv + ' , ') try: - funct.logging(serv, 'has deleted ' + color + ' list ' + bwlists_save, haproxywi=1, login=1) + funct.logging(serv, 'has deleted ' + color + ' list ' + bwlists_delete, haproxywi=1, login=1) except Exception: pass @@ -1734,6 +1745,7 @@ if form.getvalue('newuser') is not None: group = form.getvalue('newgroupuser') role_id = sql.get_role_id_by_name(role) + if funct.check_user_group(): if funct.is_admin(level=role_id): if sql.add_user(new_user, email, password, role, activeuser, group): @@ -1750,14 +1762,17 @@ if form.getvalue('newuser') is not None: print(template) funct.logging('a new user ' + new_user, ' has created ', haproxywi=1, login=1) else: + print('error: dalsdm') funct.logging(new_user, ' tried to privilege escalation', haproxywi=1, login=1) + else: + print('error: dalsdm123') if form.getvalue('userdel') is not None: userdel = form.getvalue('userdel') user = sql.select_users(id=userdel) username = '' for u in user: - username = u[1] + username = u.username if sql.delete_user(userdel): sql.delete_user_groups(userdel) funct.logging(username, ' has deleted user ', haproxywi=1, login=1) @@ -1767,14 +1782,14 @@ if form.getvalue('updateuser') is not None: email = form.getvalue('email') role = form.getvalue('role') new_user = form.getvalue('updateuser') - id = form.getvalue('id') + user_id = form.getvalue('id') activeuser = form.getvalue('activeuser') group = form.getvalue('usergroup') role_id = sql.get_role_id_by_name(role) if funct.check_user_group(): if funct.is_admin(level=role_id): - sql.update_user(new_user, email, role, id, activeuser) + sql.update_user(new_user, email, role, user_id, activeuser) funct.logging(new_user, ' has updated user ', haproxywi=1, login=1) else: funct.logging(new_user, ' tried to privilege escalation', haproxywi=1, login=1) @@ -1784,7 +1799,7 @@ if form.getvalue('updatepassowrd') is not None: user_id = form.getvalue('id') user = sql.select_users(id=user_id) for u in user: - username = u[1] + username = u.username sql.update_user_password(password, user_id) funct.logging('user ' + username, ' has changed password ', haproxywi=1, login=1) print("Ok") @@ -1826,6 +1841,7 @@ if form.getvalue('newserver') is not None: if funct.is_file_exists(ip, haproxy_dir + '/waf/bin/modsecurity'): sql.insert_waf_metrics_enable(ip, "0") + sql.insert_waf_rules(ip) if funct.is_service_active(ip, 'firewalld'): sql.update_firewall(ip) @@ -1839,7 +1855,6 @@ if form.getvalue('newserver') is not None: template = template.render(groups=sql.select_groups(), servers=sql.select_servers(server=ip), - roles=sql.select_roles(), masters=sql.select_servers(get_master_servers=1), sshs=sql.select_ssh(group=group), page=page, @@ -1890,6 +1905,7 @@ if form.getvalue('serverdel') is not None: if sql.delete_server(serverdel): sql.delete_waf_server(serverdel) sql.delete_port_scanner_settings(serverdel) + sql.delete_waf_rules(ip) print("Ok") funct.logging(hostname, ' has been deleted server with ', haproxywi=1, login=1) @@ -1907,16 +1923,16 @@ if form.getvalue('newgroup') is not None: output_from_parsed_template = template.render(groups=sql.select_groups(group=newgroup)) print(output_from_parsed_template) - funct.logging('a new group ' + newgroup, ' created ', haproxywi=1, login=1) + funct.logging('a new group ' + newgroup, ' has been created ', haproxywi=1, login=1) if form.getvalue('groupdel') is not None: groupdel = form.getvalue('groupdel') group = sql.select_groups(id=groupdel) for g in group: - groupname = g[1] + groupname = g.name if sql.delete_group(groupdel): print("Ok") - funct.logging(groupname, ' has deleted group ', haproxywi=1, login=1) + funct.logging(groupname, ' has been deleted group ', haproxywi=1, login=1) if form.getvalue('updategroup') is not None: name = form.getvalue('updategroup') @@ -1960,9 +1976,9 @@ if form.getvalue('sshdel') is not None: sshdel = form.getvalue('sshdel') for sshs in sql.select_ssh(id=sshdel): - ssh_enable = sshs[2] - name = sshs[1] - ssh_key_name = fullpath + '/keys/%s.pem' % sshs[1] + ssh_enable = sshs.enable + name = sshs.name + ssh_key_name = fullpath + '/keys/%s.pem' % sshs.name if ssh_enable == 1: cmd = 'rm -f %s' % ssh_key_name @@ -1988,8 +2004,8 @@ if form.getvalue('updatessh'): fullpath = funct.get_config_var('main', 'fullpath') for sshs in sql.select_ssh(id=ssh_id): - ssh_enable = sshs[2] - ssh_key_name = fullpath + '/keys/%s.pem' % sshs[1] + ssh_enable = sshs.enable + ssh_key_name = fullpath + '/keys/%s.pem' % sshs.name new_ssh_key_name = fullpath + '/keys/%s.pem' % name if ssh_enable == 1: @@ -2062,7 +2078,7 @@ if form.getvalue('newtelegram'): output_from_parsed_template = template.render(groups=sql.select_groups(), telegrams=sql.select_telegram(token=token), page=page) print(output_from_parsed_template) - funct.logging(channel, ' has created a new Telegram channel ', haproxywi=1, login=1) + funct.logging(channel, ' a new Telegram channel has been created ', haproxywi=1, login=1) if form.getvalue('newslack'): token = form.getvalue('newslack') @@ -2088,7 +2104,7 @@ if form.getvalue('telegramdel') is not None: telegramdel = form.getvalue('telegramdel') telegram = sql.select_telegram(id=telegramdel) for t in telegram: - telegram_name = t[1] + telegram_name = t.token if sql.delete_telegram(telegramdel): print("Ok") funct.logging(telegram_name, ' has deleted the Telegram channel ', haproxywi=1, login=1) @@ -2132,16 +2148,16 @@ if form.getvalue('updatesettings') is not None: print("Ok") if form.getvalue('getusergroups'): - group_id = form.getvalue('getusergroups') + user_id = form.getvalue('getusergroups') groups = [] - u_g = sql.select_user_groups(id=group_id) + u_g = sql.select_user_groups(user_id) for g in u_g: - groups.append(g[0]) + groups.append(g.user_group_id) from jinja2 import Environment, FileSystemLoader env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True) template = env.get_template('/show_user_groups.html') - template = template.render(groups=sql.select_groups(), user_groups=groups, id=group_id) + template = template.render(groups=sql.select_groups(), user_groups=groups, id=user_id) print(template) if form.getvalue('changeUserGroupId') is not None: @@ -2152,7 +2168,7 @@ if form.getvalue('changeUserGroupId') is not None: for group in groups: if group[0] == ',': continue - sql.update_user_groups(groups=group[0], id=group_id) + sql.update_user_groups(groups=group[0], user_group_id=group_id) funct.logging('localhost', ' has upgraded groups for user: ' + user, haproxywi=1, login=1) @@ -2172,7 +2188,7 @@ if form.getvalue('getcurrentusergroup') is not None: user_id = cookie.get('uuid') group = cookie.get('group') group_id = sql.get_user_id_by_uuid(user_id.value) - groups = sql.select_user_groups_with_names(id=group_id) + groups = sql.select_user_groups_with_names(group_id) from jinja2 import Environment, FileSystemLoader @@ -2265,6 +2281,7 @@ if form.getvalue('updateSmonIp') is not None: print('SMON error: Cannot be HTTP with 443 port') sys.exit() + if sql.update_smon(smon_id, ip, port, body, telegram, group, desc, en): print("Ok") funct.logging('SMON', ' Has been update the server ' + ip + ' to SMON ', haproxywi=1, login=1) @@ -2335,8 +2352,8 @@ if form.getvalue('waf_rule_id'): rule_id = form.getvalue('waf_rule_id') haproxy_path = sql.get_setting('haproxy_dir') rule_file = sql.select_waf_rule_by_id(rule_id) - conf_file_path = haproxy_path + 'waf/modsecurity.conf' - rule_file_path = 'Include ' + haproxy_path + '/waf/rules/' + rule_file + conf_file_path = haproxy_path + '/waf/modsecurity.conf' + rule_file_path = 'Include ' + haproxy_path + '//waf/rules/' + rule_file if enable == '0': cmd = ["sudo sed -i 's!" + rule_file_path + "!#" + rule_file_path + "!' " + conf_file_path] @@ -3438,3 +3455,97 @@ if form.getvalue('check_slack'): slack_id = form.getvalue('check_slack') mess = 'Test message from Roxy-WI' funct.slack_send_mess(mess, slack_channel_id=slack_id) + +if form.getvalue('getoption'): + group = form.getvalue('getoption') + term = form.getvalue('term') + options = sql.select_options(group=group, term=term) + + a = {} + v = 0 + + for i in options: + a[v] = i.options + v = v + 1 + import json + print(json.dumps(a)) + + +if form.getvalue('newtoption'): + option = form.getvalue('newtoption') + group = form.getvalue('newoptiongroup') + if option is None or group is None: + print(error_mess) + else: + if sql.insert_new_option(option, group): + from jinja2 import Environment, FileSystemLoader + + env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True) + template = env.get_template('/new_option.html') + + template = template.render(options=sql.select_options(option=option)) + print(template) + + +if form.getvalue('updateoption') is not None: + option = form.getvalue('updateoption') + option_id = form.getvalue('id') + if option is None or option_id is None: + print(error_mess) + else: + sql.update_options(option, option_id) + + +if form.getvalue('optiondel') is not None: + if sql.delete_option(form.getvalue('optiondel')): + print("Ok") + + +if form.getvalue('getsavedserver'): + group = form.getvalue('getsavedserver') + term = form.getvalue('term') + servers = sql.select_saved_servers(group=group, term=term) + + a = {} + v = 0 + for i in servers: + a[v] = {} + a[v]['value'] = {} + a[v]['desc'] = {} + a[v]['value'] = i.server + a[v]['desc'] = i.description + v = v + 1 + import json + print(json.dumps(a)) + + +if form.getvalue('newsavedserver'): + savedserver = form.getvalue('newsavedserver') + description = form.getvalue('newsavedserverdesc') + group = form.getvalue('newsavedservergroup') + if savedserver is None or group is None: + print(error_mess) + else: + if sql.insert_new_savedserver(savedserver, description, group): + from jinja2 import Environment, FileSystemLoader + + env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True) + template = env.get_template('/new_saved_servers.html') + + template = template.render(server=sql.select_saved_servers(server=savedserver)) + print(template) + + +if form.getvalue('updatesavedserver') is not None: + savedserver = form.getvalue('updatesavedserver') + description = form.getvalue('description') + savedserver_id = form.getvalue('id') + if savedserver is None or savedserver_id is None: + print(error_mess) + else: + sql.update_savedserver(savedserver, description, savedserver_id) + + +if form.getvalue('savedserverdel') is not None: + if sql.delete_savedserver(form.getvalue('savedserverdel')): + print("Ok") diff --git a/app/overview.py b/app/overview.py index f627e6b7..8cdcbb89 100644 --- a/app/overview.py +++ b/app/overview.py @@ -10,10 +10,7 @@ template = env.get_template('ovw.html') print('Content-type: text/html\n') -if create_db.check_db(): - if create_db.create_table(): - create_db.update_all() -create_db.update_all_silent() +# create_db.update_all_silent() funct.check_login() try: @@ -104,6 +101,7 @@ except Exception as e: is_checker_worker = '' is_metrics_worker = '' token = '' + print(str(e)) template = template.render(h2=1, @@ -124,7 +122,7 @@ template = template.render(h2=1, port_scanner=''.join(port_scanner), grafana=''.join(grafana), prometheus=''.join(prometheus), - haproxy_wi_log_id=funct.haproxy_wi_log(log_id=1, file="haproxy-wi-", with_date=1), + haproxy_wi_log_id=funct.haproxy_wi_log(log_id=1, file="roxy-wi-", with_date=1), metrics_log_id=funct.haproxy_wi_log(log_id=1, file="metrics-", with_date=1), checker_log_id=funct.haproxy_wi_log(log_id=1, file="checker-", with_date=1), keep_alive_log_id=funct.haproxy_wi_log(log_id=1, file="keep_alive"), diff --git a/app/sql.py b/app/sql.py index 1f535e97..ea967530 100644 --- a/app/sql.py +++ b/app/sql.py @@ -1,612 +1,435 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- import funct +from db_model import * mysql_enable = funct.get_config_var('mysql', 'enable') -if mysql_enable == '1': - import mysql.connector as sqltool -else: - db = "/var/www/haproxy-wi/app/roxy-wi.db" - import sqlite3 as sqltool - - -def get_cur(): - try: - if mysql_enable == '0': - con = sqltool.connect(db, isolation_level=None) - else: - mysql_user = funct.get_config_var('mysql', 'mysql_user') - mysql_password = funct.get_config_var('mysql', 'mysql_password') - mysql_db = funct.get_config_var('mysql', 'mysql_db') - mysql_host = funct.get_config_var('mysql', 'mysql_host') - mysql_port = funct.get_config_var('mysql', 'mysql_port') - con = sqltool.connect(user=mysql_user, password=mysql_password, - host=mysql_host, port=mysql_port, - database=mysql_db) - cur = con.cursor() - except sqltool.Error as e: - funct.logging('DB ', ' '+e, haproxywi=1, login=1) - else: - return con, cur - def add_user(user, email, password, role, activeuser, group): - con, cur = get_cur() if password != 'aduser': - sql = """INSERT INTO user (username, email, password, role, activeuser, `groups`) - VALUES ('%s', '%s', '%s', '%s', '%s', '%s')""" % (user, email, funct.get_hash(password), role, activeuser, group) + try: + User.insert(username=user, email=email, password=funct.get_hash(password), role=role, activeuser=activeuser, + groups=group).execute() + except Exception as e: + funct.out_error(e) + return False + else: + return True else: - sql = """INSERT INTO user (username, email, role, ldap_user, activeuser, `groups`) - VALUES ('%s', '%s', '%s', '1', '%s', '%s')""" % (user, email, role, activeuser, group) + try: + User.insert(username=user, email=email, role=role, ldap_user=ldap_user, activeuser=activeuser, + groups=group).execute() + except Exception as e: + funct.out_error(e) + return False + else: + return True + + +def update_user(user, email, role, user_id, activeuser): + user_update = User.update(username=user, email=email, role=role, activeuser=activeuser).where( + User.user_id == user_id) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + user_update.execute() + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() return False else: - cur.close() - con.close() return True -def update_user(user, email, role, id, activeuser): - con, cur = get_cur() - sql = """update user set username = '%s', - email = '%s', - role = '%s', - activeuser = '%s' - where id = '%s'""" % (user, email, role, activeuser, id) +def update_user_groups(groups, user_group_id): try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + UserGroups.insert(user_id=user_group_id, user_group_id=groups).execute() + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() return False else: - cur.close() - con.close() return True -def update_user_groups(groups, id): - con, cur = get_cur() - sql = """insert into user_groups(user_id, user_group_id) values('%s', '%s')""" % (id, groups) +def delete_user_groups(user_id): try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + group_for_delete = UserGroups.delete().where(UserGroups.user_id == user_id) + group_for_delete.execute() + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() return False else: - cur.close() - con.close() - return True - - -def delete_user_groups(id): - con, cur = get_cur() - sql = """delete from user_groups - where user_id = '%s'""" % (id) - try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: - funct.out_error(e) - con.rollback() - cur.close() - con.close() - return False - else: - cur.close() - con.close() return True def update_user_current_groups(groups, user_uuid): - con, cur = get_cur() user_id = get_user_id_by_uuid(user_uuid) - sql = """update user set groups = '%s' where id = '%s'""" % (groups, user_id) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + user_update = User.update(groups=groups).where(User.user_id == user_id) + user_update.execute() + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() return False else: - cur.close() - con.close() return True -def update_user_password(password, id): - con, cur = get_cur() - sql = """update user set password = '%s' - where id = '%s'""" % (funct.get_hash(password), id) +def update_user_password(password, user_id): try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + user_update = User.update(password=funct.get_hash(password)).where(User.user_id == user_id) + user_update.execute() + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() return False else: - cur.close() - con.close() return True -def delete_user(id): - con, cur = get_cur() - sql = """delete from user where id = '%s'""" % (id) +def delete_user(user_id): try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + user_for_delete = User.delete().where(User.user_id == user_id) + user_for_delete.execute() + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() return False else: - cur.close() - con.close() return True def add_group(name, description): - con, cur = get_cur() - sql = """INSERT INTO groups (name, description) VALUES ('%s', '%s')""" % (name, description) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + last_insert = Groups.insert(name=name, description=description) + last_insert_id = last_insert.execute() + except Exception as e: funct.out_error(e) - con.rollback() return False else: - sql = """select last_insert_rowid()""" - try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: - funct.out_error(e) - con.rollback() - else: - for g in cur.fetchall(): - group_id = g[0] - add_setting_for_new_group(group_id) - - cur.close() - con.close() + add_setting_for_new_group(last_insert_id) return True def add_setting_for_new_group(group_id): - con, cur = get_cur() group_id = str(group_id) - sql = list() - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('time_zone', 'UTC', 'main', 'Time Zone','" + group_id + "');") - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('proxy', '', 'main', 'Proxy server. Use proto://ip:port','" + group_id + "');") - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('session_ttl', '5', 'main', 'Time to live users sessions. In days', '" + group_id + "')") - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('token_ttl', '5', 'main', 'Time to live users tokens. In days','" + group_id + "');") - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('tmp_config_path', '/tmp/', 'main', 'Temp store configs, for check. Path must exist','" + group_id + "');") - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('cert_path', '/etc/ssl/certs/', 'main', 'Path to SSL dir. Folder owner must be a user which set in the SSH settings. Path must exist','" + group_id + "');") - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('local_path_logs', '/var/log/haproxy.log', 'logs', 'Logs save locally, enabled by default','" + group_id + "');") - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('syslog_server_enable', '0', 'logs', 'If exist syslog server for HAproxy logs, enable this option','" + group_id + "');") - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('syslog_server', '0', 'logs', 'IP address syslog server','" + group_id + "');") - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('stats_user', 'admin', 'haproxy', 'Username for Stats web page HAproxy','" + group_id + "');") - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('stats_password', 'password', 'haproxy', 'Password for Stats web page HAproxy','" + group_id + "');") - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('stats_port', '8085', 'haproxy', 'Port Stats web page HAproxy','" + group_id + "');") - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('stats_page', 'stats', 'haproxy', 'URI Stats web page HAproxy','" + group_id + "');") - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('haproxy_dir', '/etc/haproxy/', 'haproxy', 'Path to HAProxy dir','" + group_id + "');") - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('haproxy_config_path', '/etc/haproxy/haproxy.cfg', 'haproxy', 'Path to HAProxy config','" + group_id + "');") - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('server_state_file', '/etc/haproxy/haproxy.state', 'haproxy', 'Path to HAProxy state file','" + group_id + "');") - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('haproxy_sock', '/var/run/haproxy.sock', 'haproxy', 'Path to HAProxy sock file','" + group_id + "');") - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('haproxy_sock_port', '1999', 'haproxy', 'HAProxy sock port','" + group_id + "');") - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('nginx_path_error_logs', '/var/log/nginx/error.log', 'nginx', 'Nginx error log','" + group_id + "');") - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('nginx_stats_user', 'admin', 'nginx', 'Username for Stats web page Nginx','" + group_id + "');") - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('nginx_stats_password', 'password', 'nginx', 'Password for Stats web page Nginx','" + group_id + "');") - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('nginx_stats_port', '8086', 'nginx', 'Stats port for web page Nginx','" + group_id + "');") - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('nginx_stats_page', 'stats', 'nginx', 'URI Stats for web page Nginx','" + group_id + "');") - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('nginx_dir', '/etc/nginx/conf.d/', 'nginx', 'Path to Nginx dir','" + group_id + "');") - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('nginx_config_path', '/etc/nginx/conf.d/default.conf', 'nginx', 'Path to Nginx config','" + group_id + "');") - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('ldap_enable', '0', 'ldap', 'If 1 ldap enabled', " + group_id + ");") - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('ldap_server', '', 'ldap', 'IP address ldap server', " + group_id + ");") - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('ldap_port', '389', 'ldap', 'Default port is 389 or 636', " + group_id + ");") - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('ldap_user', '', 'ldap', 'Login for connect to LDAP server. Enter: user@domain.com', " + group_id + ");") - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('ldap_password', '', 'ldap', 'Password for connect to LDAP server', " + group_id + ");") - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('ldap_base', '', 'ldap', 'Base domain. Example: dc=domain, dc=com', " + group_id + ");") - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('ldap_domain', '', 'ldap', 'Domain for login, that after @, like user@domain.com, without user@', " + group_id + ");") - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('ldap_class_search', 'user', 'ldap', 'Class to search user', " + group_id + ");") - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('ldap_user_attribute', 'sAMAccountName', 'ldap', 'User attribute for search', " + group_id + ");") - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('ldap_search_field', 'mail', 'ldap', 'Field where user e-mail saved', " + group_id + ");") - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('ldap_type', '0', 'ldap', 'If 0 then will be used LDAP, if 1 then will be used LDAPS ', " + group_id + ");") - sql.append("INSERT INTO settings (param, value, section, `desc`, `group`) values('haproxy_enterprise', '0', 'haproxy', 'Use this option if your HAProxy is enterprise. It change service name for rebooting/reloading', " + group_id + ");") + data_source = [ + {'param': 'time_zone', 'value': 'UTC', 'section': 'main', 'desc': 'Time Zone', 'group': group_id}, + {'param': 'proxy', 'value': '', 'section': 'main', 'desc': 'Proxy server. Use proto://ip:port', + 'group': group_id}, + {'param': 'session_ttl', 'value': '5', 'section': 'main', 'desc': 'Time to live users sessions. In days', + 'group': group_id}, + {'param': 'token_ttl', 'value': '5', 'section': 'main', 'desc': 'Time to live users tokens. In days', + 'group': group_id}, + {'param': 'tmp_config_path', 'value': '/tmp/', 'section': 'main', + 'desc': 'Temp store configs, for check. Path must exist', 'group': group_id}, + {'param': 'cert_path', 'value': '/etc/ssl/certs/', 'section': 'main', + 'desc': 'Path to SSL dir. Folder owner must be a user which set in the SSH settings. Path must exist', + 'group': group_id}, + {'param': 'local_path_logs', 'value': '/var/log/haproxy.log', 'section': 'logs', + 'desc': 'Logs save locally, enabled by default', 'group': group_id}, + {'param': 'syslog_server_enable', 'value': '0', 'section': 'logs', + 'desc': 'If exist syslog server for HAProxy logs, enable this option', 'group': group_id}, + {'param': 'stats_user', 'value': 'admin', 'section': 'haproxy', 'desc': 'Username for Stats web page HAProxy', + 'group': group_id}, + {'param': 'stats_password', 'value': 'password', 'section': 'haproxy', + 'desc': 'Password for Stats web page HAProxy', 'group': group_id}, + {'param': 'stats_port', 'value': '8085', 'section': 'haproxy', 'desc': 'Port Stats web page HAProxy', + 'group': group_id}, + {'param': 'stats_page', 'value': 'stats', 'section': 'haproxy', 'desc': 'URI Stats web page HAProxy', + 'group': group_id}, + {'param': 'haproxy_dir', 'value': '/etc/haproxy', 'section': 'haproxy', 'desc': 'Path to HAProxy dir', + 'group': group_id}, + {'param': 'haproxy_config_path', 'value': '/etc/haproxy/haproxy.cfg', 'section': 'haproxy', 'desc': '', + 'group': group_id}, + {'param': 'server_state_file', 'value': 'stats', 'section': 'haproxy', 'desc': 'Path to HAProxy config', + 'group': group_id}, + {'param': 'haproxy_sock', 'value': '/etc/haproxy/haproxy.state', 'section': 'haproxy', + 'desc': 'Path to HAProxy state file', 'group': group_id}, + {'param': 'haproxy_sock_port', 'value': '1999', 'section': 'haproxy', 'desc': 'HAProxy sock port', + 'group': group_id}, + {'param': 'nginx_path_error_logs', 'value': '/var/log/nginx/error.log', 'section': 'nginx', + 'desc': 'Nginx error log', 'group': group_id}, + {'param': 'nginx_stats_user', 'value': 'admin', 'section': 'nginx', 'desc': 'Username for Stats web page Nginx', + 'group': group_id}, + {'param': 'nginx_stats_password', 'value': 'password', 'section': 'nginx', + 'desc': 'Password for Stats web page Nginx', 'group': group_id}, + {'param': 'nginx_stats_port', 'value': '8086', 'section': 'nginx', 'desc': 'Stats port for web page Nginx', + 'group': group_id}, + {'param': 'nginx_stats_page', 'value': 'stats', 'section': 'nginx', 'desc': 'URI Stats for web page Nginx', + 'group': group_id}, + {'param': 'nginx_dir', 'value': '/etc/nginx/conf.d/', 'section': 'nginx', 'desc': 'Path to Nginx dir', + 'group': group_id}, + {'param': 'nginx_config_path', 'value': '/etc/nginx/conf.d/default.conf', 'section': 'nginx', + 'desc': 'Path to Nginx config', 'group': group_id}, + {'param': 'ldap_enable', 'value': '0', 'section': 'ldap', 'desc': 'If 1 ldap enabled', 'group': group_id}, + {'param': 'ldap_server', 'value': '', 'section': 'ldap', 'desc': 'IP address ldap server', 'group': group_id}, + {'param': 'ldap_port', 'value': '389', 'section': 'ldap', 'desc': 'Default port: 389 or 636', + 'group': group_id}, + {'param': 'ldap_user', 'value': '', 'section': 'ldap', + 'desc': 'Login to connect to LDAP server. Format: user@domain.com', 'group': group_id}, + {'param': 'ldap_password', 'value': '', 'section': 'ldap', 'desc': 'Password to connect to LDAP server', + 'group': group_id}, + {'param': 'ldap_base', 'value': '', 'section': 'ldap', 'desc': 'Base domain. Example: dc=domain, dc=com', + 'group': group_id}, + {'param': 'ldap_domain', 'value': '', 'section': 'ldap', + 'desc': 'Domain for login, like user@domain.com, without user@', 'group': group_id}, + {'param': 'ldap_class_search', 'value': 'user', 'section': 'ldap', 'desc': 'Class to search user', + 'group': group_id}, + {'param': 'ldap_user_attribute', 'value': 'sAMAccountName', 'section': 'ldap', + 'desc': 'User attribute for searching', 'group': group_id}, + {'param': 'ldap_search_field', 'value': 'mail', 'section': 'ldap', 'desc': 'Field where an user e-mail saved', + 'group': group_id}, + {'param': 'ldap_type', 'value': '0', 'section': 'ldap', + 'desc': 'If 0 then will be used LDAP, if 1 then will be used LDAPS', 'group': group_id}, + {'param': 'haproxy_enterprise', 'value': '0', 'section': 'haproxy', + 'desc': 'Use this option if your HAProxy is enterprise. It changes service name for rebooting/reloading', + 'group': group_id}, + ] - for i in sql: - try: - cur.execute(i) - con.commit() - except sqltool.Error as e: - funct.out_error(e) + try: + Setting.insert_many(data_source).execute() + except Exception as e: + funct.out_error(e) else: - cur.close() - con.close() return True def delete_group_settings(group_id): - con, cur = get_cur() - sql = """ delete from settings where `group` = '%s'""" % (group_id) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + group_for_delete = Setting.delete().where(Setting.group == group_id) + group_for_delete.execute() + except Exception as e: funct.out_error(e) - con.rollback() else: - cur.close() - con.close() - return True - cur.close() - con.close() - - -def delete_group(id): - con, cur = get_cur() - sql = """ delete from groups where id = '%s'""" % (id) - try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: - funct.out_error(e) - con.rollback() - cur.close() - con.close() - return False - else: - delete_group_settings(id) - cur.close() - con.close() return True -def update_group(name, descript, id): - con, cur = get_cur() - sql = """ update groups set - name = '%s', - description = '%s' - where id = '%s'; - """ % (name, descript, id) +def delete_group(group_id): try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + group_for_delete = Groups.delete().where(Groups.group_id == group_id) + group_for_delete.execute() + except Exception as e: + funct.out_error(e) + return False + else: + delete_group_settings(group_id) + return True + + +def update_group(name, descript, group_id): + try: + group_update = Groups.update(name=name, description=descript).where(Groups.group_id == group_id) + group_update.execute() + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() return False else: - cur.close() - con.close() return True def add_server(hostname, ip, group, typeip, enable, master, cred, port, desc, haproxy, nginx, firewall): - con, cur = get_cur() - sql = """ INSERT INTO servers (hostname, ip, groups, type_ip, enable, master, cred, port, `desc`, haproxy, nginx, firewall_enable) - VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s') - """ % (hostname, ip, group, typeip, enable, master, cred, port, desc, haproxy, nginx, firewall) try: - cur.execute(sql) - con.commit() - cur.close() - con.close() + Server.insert(hostname=hostname, ip=ip, groups=group, type_ip=typeip, enable=enable, master=master, cred=cred, + port=port, desc=desc, haproxy=haproxy, nginx=nginx, firewall_enable=firewall).execute() return True - except sqltool.Error as e: + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() return False -def delete_server(id): - con, cur = get_cur() - sql = """ delete from servers where id = '%s'""" % (id) +def delete_server(server_id): try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + server_for_delete = Server.delete().where(Server.server_id == server_id) + server_for_delete.execute() + except Exception as e: funct.out_error(e) - con.rollback() else: return True - cur.close() - con.close() def update_hapwi_server(server_id, alert, metrics, active, service_name): - con, cur = get_cur() - updated_service = '' - if service_name == 'nginx': - updated_service = 'nginx_' - - sql = """ update servers set - '%salert' = '%s', - metrics = '%s', - '%sactive' = '%s' - where id = '%s'""" % (updated_service, alert, metrics, updated_service, active, server_id) - try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + if service_name == 'nginx': + update_hapwi = Server.update(nginx_alert=alert, metrics=metrics, nginx_active=active).where( + Server.server_id == server_id) + else: + update_hapwi = Server.update(alert=alert, metrics=metrics, active=active).where( + Server.server_id == server_id) + update_hapwi.execute() + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() -def update_server(hostname, group, typeip, enable, master, id, cred, port, desc, haproxy, nginx, firewall, protected): - con, cur = get_cur() - sql = """ update servers set - hostname = '%s', - groups = '%s', - type_ip = '%s', - enable = '%s', - master = '%s', - cred = '%s', - port = '%s', - `desc` = '%s', - haproxy = '%s', - nginx = '%s', - firewall_enable = '%s', - protected = '%s' - where id = '%s'""" % (hostname, group, typeip, enable, master, cred, port, desc, haproxy, nginx, firewall, protected, id) +def update_server(hostname, group, typeip, enable, master, server_id, cred, port, desc, haproxy, nginx, firewall, protected): try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + server_update = Server.update(hostname=hostname, + groups=group, + type_ip=typeip, + enable=enable, + master=master, + cred=cred, + port=port, + desc=desc, + haproxy=haproxy, + nginx=nginx, + firewall_enable=firewall, + protected=protected).where(Server.server_id == server_id) + server_update.execute() + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() def update_server_master(master, slave): - con, cur = get_cur() - sql = """ select id from servers where ip = '%s' """ % master try: - cur.execute(sql) - except sqltool.Error as e: + master_id = Server.get(Server.server_id == master) + except Exception as e: funct.out_error(e) - for id in cur.fetchall(): - sql = """ update servers set master = '%s' where ip = '%s' """ % (id[0], slave) + try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + server_update = Server.update(master=master_id).where(Server.ip == slave) + server_update.execute() + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() def select_users(**kwargs): - con, cur = get_cur() - sql = """select * from user ORDER BY id""" if kwargs.get("user") is not None: - sql = """select * from user where username='%s' """ % kwargs.get("user") - if kwargs.get("id") is not None: - sql = """select * from user where id='%s' """ % kwargs.get("id") - if kwargs.get("group") is not None: - sql = """ select user.* from user left - join user_groups as groups on user.id = groups.user_id where groups.user_group_id = '%s' group by id; - """ % kwargs.get("group") + query = User.select().where(User.username == kwargs.get("user")) + elif kwargs.get("id") is not None: + query = User.select().where(User.user_id == kwargs.get("id")) + elif kwargs.get("group") is not None: + query = (User. + select(). + join(UserGroups, on=(User.user_id == UserGroups.user_id)). + where(UserGroups.user_group_id == kwargs.get("group")) + ) + else: + query = User.select().order_by(User.user_id) try: - cur.execute(sql) - except sqltool.Error as e: + query_res = query.execute() + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - cur.close() - con.close() + return query_res -def select_user_groups(id, **kwargs): - con, cur = get_cur() - sql = """select user_group_id from user_groups where user_id = '%s' """ % id +def select_user_groups(user_id, **kwargs): if kwargs.get("limit") is not None: - sql = """select user_group_id from user_groups where user_id = '%s' limit 1 """ % id - + query = UserGroups.select().where(UserGroups.user_id == user_id).limit(1) + else: + query = UserGroups.select().where(UserGroups.user_id == user_id) try: - cur.execute(sql) - except sqltool.Error as e: + query_res = query.execute() + except Exception as e: funct.out_error(e) else: if kwargs.get("limit") is not None: - for g in cur.fetchall(): - return g[0] + for i in query_res: + return i.user_group_id else: - return cur.fetchall() - cur.close() - con.close() + return query_res def check_user_group(user_id, group_id): - con, cur = get_cur() - sql = """select * from user_groups where user_id='%s' and user_group_id = '%s' """ % (user_id, group_id) try: - cur.execute(sql) - except sqltool.Error as e: - funct.out_error(e) - print(str(e)) + query_res = UserGroups.get((UserGroups.user_id == user_id) & (UserGroups.user_group_id == group_id)) + except: + return False else: - for g in cur.fetchall(): - if g[0] != '': - return True - else: - return False - - cur.close() - con.close() - - -def select_user_groups_with_names(id, **kwargs): - con, cur = get_cur() - if kwargs.get("all") is not None: - sql = """select user_groups.user_id, groups.name from user_groups - left join groups as groups on user_groups.user_group_id = groups.id """ - else: - sql = """select user_groups.user_group_id, groups.name from user_groups - left join groups as groups on user_groups.user_group_id = groups.id - where user_groups.user_id = '%s' """ % id - try: - cur.execute(sql) - except sqltool.Error as e: - funct.out_error(e) - else: - if kwargs.get("limit") is not None: - for g in cur.fetchall(): - return g[0] + if query_res.user_id != '': + return True else: - return cur.fetchall() - cur.close() - con.close() + return False + + +def select_user_groups_with_names(user_id, **kwargs): + if kwargs.get("all") is not None: + query = (UserGroups + .select(UserGroups.user_group_id, UserGroups.user_id, Groups.name) + .join(Groups, on=(UserGroups.user_group_id == Groups.group_id)) + ) + else: + query = (UserGroups + .select(UserGroups.user_group_id, Groups.name) + .join(Groups, on=(UserGroups.user_group_id == Groups.group_id)) + .where(UserGroups.user_id == user_id) + ) + try: + query_res = query.execute() + except Exception as e: + funct.out_error(e) + else: + return query_res def select_groups(**kwargs): - con, cur = get_cur() - sql = """select * from groups ORDER BY id""" if kwargs.get("group") is not None: - sql = """select * from groups where name='%s' """ % kwargs.get("group") - if kwargs.get("id") is not None: - sql = """select * from groups where id='%s' """ % kwargs.get("id") + query = Groups.select().where(Groups.name == kwargs.get('group')) + elif kwargs.get("id") is not None: + query = Groups.select().where(Groups.group_id == kwargs.get('id')) + else: + query = Groups.select().order_by(Groups.group_id) try: - cur.execute(sql) - except sqltool.Error as e: + query_res = query.execute() + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - cur.close() - con.close() + return query_res def get_group_name_by_id(group_id): - con, cur = get_cur() - sql = """select name from groups where id = '%s' """ % group_id - try: - cur.execute(sql) - except sqltool.Error as e: + group_name = Groups.get(Groups.group_id == group_id) + except Exception as e: funct.out_error(e) else: - for name in cur.fetchone(): - return name - finally: - cur.close() - con.close() + return group_name.name def get_group_id_by_name(group_name): - con, cur = get_cur() - sql = """select id from groups where name = '%s' """ % group_name - try: - cur.execute(sql) - except sqltool.Error as e: - return funct.out_error(e) + group_id = Groups.get(Groups.name == group_name) + except Exception as e: + funct.out_error(e) else: - for group_id in cur.fetchone(): - return group_id - finally: - cur.close() - con.close() + return group_id.group_id def get_group_id_by_server_ip(server_ip): - con, cur = get_cur() - sql = """select `groups` from servers where ip = '%s' """ % server_ip - try: - cur.execute(sql) - except sqltool.Error as e: - return funct.out_error(e) + group_id = Server.get(Server.ip == server_ip) + except Exception as e: + funct.out_error(e) else: - for group_id in cur.fetchone(): - return group_id - finally: - cur.close() - con.close() + return group_id.groups def get_cred_id_by_server_ip(server_ip): - con, cur = get_cur() - sql = """select `cred` from servers where ip = '%s' """ % server_ip - try: - cur.execute(sql) - except sqltool.Error as e: + cred = Server.get(Server.ip == server_ip) + except Exception as e: return funct.out_error(e) else: - for cred_id in cur.fetchone(): - return cred_id - finally: - cur.close() - con.close() + return cred.cred def get_hostname_by_server_ip(server_ip): - con, cur = get_cur() - sql = """select `hostname` from servers where ip = '%s' """ % server_ip - try: - cur.execute(sql) - except sqltool.Error as e: + hostname = Server.get(Server.ip == server_ip) + except Exception as e: return funct.out_error(e) else: - for hostname in cur.fetchone(): - return hostname - finally: - cur.close() - con.close() + return hostname.hostname def select_server_by_name(name): - con, cur = get_cur() - sql = """select ip from servers where hostname='%s' """ % name try: - cur.execute(sql) - except sqltool.Error as e: - funct.out_error(e) + ip = Server.get(Server.hostname == name) + except Exception as e: + return funct.out_error(e) else: - for name in cur.fetchone(): - return name - cur.close() - con.close() + return ip.ip def select_servers(**kwargs): - con, cur = get_cur() + cursor = conn.cursor() sql = """select * from servers where enable = '1' ORDER BY groups """ if kwargs.get("server") is not None: @@ -630,64 +453,53 @@ def select_servers(**kwargs): if kwargs.get("server") and kwargs.get("keep_alive"): sql = """select active from servers where ip='%s' """ % kwargs.get("server") try: - cur.execute(sql) - except sqltool.Error as e: + cursor.execute(sql) + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - cur.close() - con.close() + return cursor.fetchall() def write_user_uuid(login, user_uuid): - con, cur = get_cur() + cursor = conn.cursor() session_ttl = get_setting('session_ttl') session_ttl = int(session_ttl) - sql = """ select id from user where username = '%s' """ % login + try: - cur.execute(sql) - except sqltool.Error as e: + user_id = User.get(User.username == login) + except Exception as e: funct.out_error(e) - for id in cur.fetchall(): - if mysql_enable == '1': - sql = """ insert into uuid (user_id, uuid, exp) values('%s', '%s', now()+ INTERVAL '%s' day) """ % (id[0], user_uuid, session_ttl) - else: - sql = """ insert into uuid (user_id, uuid, exp) values('%s', '%s', datetime('now', '+%s days')) """ % (id[0], user_uuid, session_ttl) + if mysql_enable == '1': + sql = """ insert into uuid (user_id, uuid, exp) values('%s', '%s', now()+ INTERVAL '%s' day) """ % (user_id, user_uuid, session_ttl) + else: + sql = """ insert into uuid (user_id, uuid, exp) values('%s', '%s', datetime('now', '+%s days')) """ % (user_id, user_uuid, session_ttl) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + cursor.execute(sql) + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() + def write_user_token(login, user_token): - con, cur = get_cur() + cursor = conn.cursor() token_ttl = get_setting('token_ttl') - sql = """ select id from user where username = '%s' """ % login try: - cur.execute(sql) - except sqltool.Error as e: + user_id = User.get(User.username == login) + except Exception as e: funct.out_error(e) - for id in cur.fetchall(): - if mysql_enable == '1': - sql = """ insert into token (user_id, token, exp) values('%s', '%s', now()+ INTERVAL %s day) """ % (id[0], user_token, token_ttl) - else: - sql = """ insert into token (user_id, token, exp) values('%s', '%s', datetime('now', '+%s days')) """ % (id[0], user_token, token_ttl) + + if mysql_enable == '1': + sql = """ insert into token (user_id, token, exp) values('%s', '%s', now()+ INTERVAL %s day) """ % (user_id, user_token, token_ttl) + else: + sql = """ insert into token (user_id, token, exp) values('%s', '%s', datetime('now', '+%s days')) """ % (user_id, user_token, token_ttl) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + cursor.execute(sql) + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() def write_api_token(user_token, group_id, user_role, user_name): - con, cur = get_cur() + cursor = conn.cursor() token_ttl = get_setting('token_ttl') if mysql_enable == '1': @@ -695,71 +507,53 @@ def write_api_token(user_token, group_id, user_role, user_name): else: sql = """ insert into api_tokens (token, user_name, user_group_id, user_role, create_date, expire_date) values('%s', '%s', '%s', '%s', datetime('now'), datetime('now', '+%s days')) """ % (user_token, user_name, group_id, user_role, token_ttl) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: - return str(e) - con.rollback() - cur.close() - con.close() + cursor.execute(sql) + except Exception as e: + funct.out_error(e) def get_api_token(token): - con, cur = get_cur() - sql = """ select token from api_tokens where token = '%s' """ % token try: - cur.execute(sql) - except sqltool.Error as e: + user_token = ApiToken.get(ApiToken.token == token) + except Exception as e: return str(e) else: - for user_token in cur.fetchall(): - return True if token == user_token[0] else False - cur.close() - con.close() + return True if token == user_token.token else False def get_username_groupid_from_api_token(token): - con, cur = get_cur() - sql = """ select user_name, user_group_id from api_tokens where token = '%s' """ % token try: - cur.execute(sql) - except sqltool.Error as e: + user_name = ApiToken.get(ApiToken.token == token) + except Exception as e: return str(e) else: - for u in cur.fetchall(): - return u[0], u[1] - cur.close() - con.close() + return user_name.user_name, user_name.user_group_id def get_token(uuid): - con, cur = get_cur() - sql = """ select token.token from token left join uuid as uuid on uuid.user_id = token.user_id where uuid.uuid = '%s' """ % uuid try: - cur.execute(sql) - except sqltool.Error as e: + query = Token.select().join(UUID, on=(Token.user_id == UUID.user_id)).where(UUID.uuid == uuid).limit(1) + query_res = query.execute() + except Exception as e: funct.out_error(e) else: - for token in cur.fetchall(): - return token[0] - cur.close() - con.close() + try: + for i in query_res: + return i.token + except: + return '' def delete_uuid(uuid): - con, cur = get_cur() - sql = """ delete from uuid where uuid = '%s' """ % uuid try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + query = UUID.delete().where(UUID.uuid == uuid) + query.execute() + except: pass - cur.close() - con.close() def delete_old_uuid(): - con, cur = get_cur() + cursor = conn.cursor() if mysql_enable == '1': sql = """ delete from uuid where exp < now() or exp is NULL """ sql1 = """ delete from token where exp < now() or exp is NULL """ @@ -767,18 +561,14 @@ def delete_old_uuid(): sql = """ delete from uuid where exp < datetime('now') or exp is NULL""" sql1 = """ delete from token where exp < datetime('now') or exp is NULL""" try: - cur.execute(sql) - cur.execute(sql1) - con.commit() - except sqltool.Error as e: + cursor.execute(sql) + cursor.execute(sql1) + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() def update_last_act_user(uuid): - con, cur = get_cur() + cursor = conn.cursor() session_ttl = get_setting('session_ttl') if mysql_enable == '1': @@ -786,163 +576,125 @@ def update_last_act_user(uuid): else: sql = """ update uuid set exp = datetime('now', '+%s days') where uuid = '%s' """ % (session_ttl, uuid) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + cursor.execute(sql) + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() def get_user_name_by_uuid(uuid): - con, cur = get_cur() - sql = """ select user.username from user left join uuid as uuid on user.id = uuid.user_id where uuid.uuid = '%s' """ % uuid try: - cur.execute(sql) - except sqltool.Error as e: + query = User.select(User.username).join(UUID, on=(User.user_id == UUID.user_id)).where(UUID.uuid == uuid) + query_res = query.execute() + except Exception as e: funct.out_error(e) else: - for user_id in cur.fetchall(): - return user_id[0] - cur.close() - con.close() + for user in query_res: + return user.username def get_user_id_by_uuid(uuid): - con, cur = get_cur() - sql = """ select user.id from user left join uuid as uuid on user.id = uuid.user_id where uuid.uuid = '%s' """ % uuid try: - cur.execute(sql) - except sqltool.Error as e: + query = User.select(User.user_id).join(UUID, on=(User.user_id == UUID.user_id)).where(UUID.uuid == uuid) + query_res = query.execute() + except Exception as e: funct.out_error(e) else: - for user_id in cur.fetchall(): - return user_id[0] - cur.close() - con.close() + for user in query_res: + return user.user_id def get_user_role_by_uuid(uuid): - con, cur = get_cur() try: - if mysql_enable == '1': - cur.execute( """ select role.id from user left join uuid as uuid on user.id = uuid.user_id left join role on role.name = user.role where uuid.uuid = '%s' """ % uuid ) - else: - cur.execute("select role.id from user left join uuid as uuid on user.id = uuid.user_id left join role on role.name = user.role where uuid.uuid = ?", (uuid,)) - except sqltool.Error as e: + query = (Role.select(Role.role_id) + .join(UUID, on=(User.user_id == UUID.user_id)) + .join(User, on=(Role.name == User.role)) + .where(UUID.uuid == uuid)) + query_res = query.execute() + except Exception as e: funct.out_error(e) else: - for user_id in cur.fetchall(): - return int(user_id[0]) - cur.close() - con.close() + for user_id in query_res: + return int(user_id.role_id) def get_role_id_by_name(name): - con, cur = get_cur() - sql = """ select id from role where name = '%s' """ % name try: - cur.execute(sql) - except sqltool.Error as e: + role_id = Role.get(Role.name == name) + except Exception as e: funct.out_error(e) else: - for user_id in cur.fetchall(): - return user_id[0] - cur.close() - con.close() + return int(role_id.role_id) def get_user_telegram_by_group(group): - con, cur = get_cur() - sql = """ select telegram.* from telegram where groups = '%s' """ % group + query = Telegram.select().where(Telegram.groups == group) try: - cur.execute(sql) - except sqltool.Error as e: + query_res = query.execute() + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - cur.close() - con.close() + return query_res def get_telegram_by_ip(ip): - con, cur = get_cur() - sql = """ select telegram.* from telegram left join servers as serv on serv.groups = telegram.groups where serv.ip = '%s' """ % ip + query = Telegram.select().join(Server, on=(Server.groups == Telegram.groups)).where(Server.ip == ip) try: - cur.execute(sql) - except sqltool.Error as e: + query_res = query.execute() + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - cur.close() - con.close() + return query_res -def get_telegram_by_id(id): - con, cur = get_cur() - sql = """ select * from telegram where id = '%s' """ % id +def get_telegram_by_id(telegram_id): + query = Telegram.select().where(Telegram.id == telegram_id) try: - cur.execute(sql) - except sqltool.Error as e: + query_res = query.execute() + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - cur.close() - con.close() + return query_res def get_user_slack_by_group(group): - con, cur = get_cur() - sql = """ select slack.* from slack where groups = '%s' """ % group + query = Slack.select().where(Slack.groups == group) try: - cur.execute(sql) - except sqltool.Error as e: + query_res = query.execute() + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - cur.close() - con.close() + return query_res def get_slack_by_ip(ip): - con, cur = get_cur() - sql = """ select slack.* from slack left join servers as serv on serv.groups = slack.groups where serv.ip = '%s' """ % ip + query = Slack.select().join(Server, on=(Server.groups == Slack.groups)).where(Server.ip == ip) try: - cur.execute(sql) - except sqltool.Error as e: + query_res = query.execute() + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - cur.close() - con.close() + return query_res -def get_slack_by_id(id): - con, cur = get_cur() - sql = """ select * from slack where id = '%s' """ % id +def get_slack_by_id(slack_id): + query = Slack.select().where(Slack.id == slack_id) try: - cur.execute(sql) - except sqltool.Error as e: + query_res = query.execute() + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - cur.close() - con.close() + return query_res def get_dick_permit(**kwargs): import http.cookies import os if kwargs.get('username'): - # user = kwargs.get('username') grp = kwargs.get('group_id') else: cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) - # user_id = cookie.get('uuid') group = cookie.get('group') grp = group.value - # user = get_user_id_by_uuid(user_id.value) if kwargs.get('token'): token = kwargs.get('token') else: @@ -970,7 +722,7 @@ def get_dick_permit(**kwargs): keepalived = "and keepalived = 1" if funct.check_user_group(token=token): - con, cur = get_cur() + cursor = conn.cursor() if grp == '1' and not only_group: sql = """ select * from servers where enable = 1 %s %s %s %s %s order by pos""" % (disable, type_ip, nginx, keepalived, ip) else: @@ -978,557 +730,409 @@ def get_dick_permit(**kwargs): """.format(group=grp, disable=disable, type_ip=type_ip, ip=ip, haproxy=haproxy, nginx=nginx, keepalived=keepalived) try: - cur.execute(sql) - except sqltool.Error as e: + cursor.execute(sql) + except Exception as e: funct.out_error(e) else: - return cur.fetchall() + return cursor.fetchall() - cur.close() - con.close() else: print('Atata!') def is_master(ip, **kwargs): - con, cur = get_cur() - sql = """ select slave.ip, slave.hostname from servers as master left join servers as slave on master.id = slave.master where master.ip = '%s' """ % ip + cursor = conn.cursor() if kwargs.get('master_slave'): - sql = """ select master.hostname, master.ip, slave.hostname, slave.ip from servers as master left join servers as slave on master.id = slave.master where slave.master > 0 """ + sql = """ select master.hostname, master.ip, slave.hostname, slave.ip + from servers as master + left join servers as slave on master.id = slave.master + where slave.master > 0 """ + else: + sql = """ select slave.ip, slave.hostname from servers as master + left join servers as slave on master.id = slave.master + where master.ip = '%s' """ % ip try: - cur.execute(sql) - except sqltool.Error as e: + cursor.execute(sql) + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - cur.close() - con.close() + return cursor.fetchall() def select_ssh(**kwargs): - con, cur = get_cur() - sql = """select * from cred """ if kwargs.get("name") is not None: - sql = """select * from cred where name = '%s' """ % kwargs.get("name") - if kwargs.get("id") is not None: - sql = """select * from cred where id = '%s' """ % kwargs.get("id") - if kwargs.get("serv") is not None: - sql = """select serv.cred, cred.* from servers as serv left join cred on cred.id = serv.cred where serv.ip = '%s' """ % kwargs.get("serv") - if kwargs.get("group") is not None: - sql = """select * from cred where groups = '%s' """ % kwargs.get("group") + query = Cred.select().where(Cred.name == kwargs.get('name')) + elif kwargs.get("id") is not None: + query = Cred.select().where(Cred.id == kwargs.get('id')) + elif kwargs.get("serv") is not None: + query = Cred.select().join(Server, on=(Cred.id == Server.cred)).where(Server.ip == kwargs.get('serv')) + elif kwargs.get("group") is not None: + query = Cred.select() + else: + query = Cred.select() try: - cur.execute(sql) - except sqltool.Error as e: + query_res = query.execute() + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - cur.close() - con.close() + return query_res def insert_new_ssh(name, enable, group, username, password): - con, cur = get_cur() - sql = """insert into cred(name, enable, groups, username, password) values ('%s', '%s', '%s', '%s', '%s') """ % (name, enable, group, username, password) + if password is None: + password = 'None' try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + Cred.insert(name=name, enable=enable, groups=group, username=username, password=password).execute() + except Exception as e: + funct.out_error(e) + return False + else: + return True + + +def delete_ssh(ssh_id): + query = Cred.delete().where(Cred.id == ssh_id) + try: + query.execute() + except Exception as e: + funct.out_error(e) + else: + return True + + +def update_ssh(cred_id, name, enable, group, username, password): + if password is None: + password = 'None' + + cred_update = Cred.update(name=name, enable=enable, groups=group, username=username, password=password).where( + Cred.id == cred_id) + try: + cred_update.execute() + except Exception as e: + funct.out_error(e) + + +def insert_backup_job(server, rserver, rpath, backup_type, time, cred, description): + try: + Backup.insert(server=server, rhost=rserver, rpath=rpath, backup_type=backup_type, time=time, + cred=cred, description=description).execute() + except Exception as e: funct.out_error(e) - con.rollback() - else: - return True - cur.close() - con.close() - - -def delete_ssh(id): - con, cur = get_cur() - sql = """ delete from cred where id = %s """ % (id) - try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: - funct.out_error(e) - con.rollback() - else: - return True - cur.close() - con.close() - - -def update_ssh(id, name, enable, group, username, password): - con, cur = get_cur() - sql = """ update cred set - name = '%s', - enable = '%s', - groups = %s, - username = '%s', - password = '%s' where id = '%s' """ % (name, enable, group, username, password, id) - try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: - funct.out_error(e) - con.rollback() - cur.close() - con.close() - - -def insert_backup_job(server, rserver, rpath, type, time, cred, description): - con, cur = get_cur() - sql = """insert into backups(server, rhost, rpath, `type`, `time`, `cred`, `description`) - values ('%s', '%s', '%s', '%s', '%s', '%s', '%s') """ % (server, rserver, rpath, type, time, cred, description) - try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: - funct.out_error(e) - print('error: '+str(e)) - con.rollback() return False else: return True - cur.close() - con.close() def select_backups(**kwargs): - con, cur = get_cur() - sql = """select * from backups ORDER BY id""" if kwargs.get("server") is not None and kwargs.get("rserver") is not None: - sql = """select * from backups where server='%s' and rhost = '%s' """ % (kwargs.get("server"), kwargs.get("rserver")) + query = Backup.select().where((Backup.server == kwargs.get("server")) & (Backup.rhost == kwargs.get("rserver"))) + else: + query = Backup.select().order_by(Backup.id) + try: - cur.execute(sql) - except sqltool.Error as e: + query_res = query.execute() + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - cur.close() - con.close() + return query_res -def update_backup(server, rserver, rpath, type, time, cred, description, id): - con, cur = get_cur() - sql = """update backups set server = '%s', - rhost = '%s', - rpath = '%s', - type = '%s', - time = '%s', - cred = '%s', - description = '%s' where id = '%s' """ % (server, rserver, rpath, type, time, cred, description, id) +def update_backup(server, rserver, rpath, backup_type, time, cred, description, backup_id): + backup_update = Backup.update(server=server, rhost=rserver, rpath=rpath, backup_type=backup_type, time=time, + cred=cred, description=description).where(Backup.id == backup_id) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + backup_update.execute() + except Exception as e: funct.out_error(e) - con.rollback() return False else: return True - cur.close() - con.close() -def delete_backups(id): - con, cur = get_cur() - sql = """ delete from backups where id = %s """ % (id) +def delete_backups(backup_id): + query = Backup.delete().where(Backup.id == backup_id) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + query.execute() + except Exception as e: funct.out_error(e) - con.rollback() + return False else: return True - cur.close() - con.close() def check_exists_backup(server): - con, cur = get_cur() - sql = """ select id from backups where server = '%s' """ % server try: - cur.execute(sql) - except sqltool.Error as e: - funct.out_error(e) + backup = Backup.get(Backup.server == server) + except: + pass else: - for s in cur.fetchall(): - if s[0] is not None: - return True - else: - return False - cur.close() - con.close() + if backup.id is not None: + return True + else: + return False -def delete_telegram(id): - con, cur = get_cur() - sql = """ delete from telegram where id = %s """ % (id) +def delete_telegram(telegram_id): + query = Telegram.delete().where(Telegram.id == telegram_id) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + query.execute() + except Exception as e: funct.out_error(e) - con.rollback() + return False else: return True - cur.close() - con.close() def select_telegram(**kwargs): - con, cur = get_cur() - sql = """select * from telegram """ - if kwargs.get('group'): - sql = """select * from telegram where groups = '%s' """ % kwargs.get('group') if kwargs.get('token'): - sql = """select * from telegram where token = '%s' """ % kwargs.get('token') - if kwargs.get('id'): - sql = """select * from telegram where id = '%s' """ % kwargs.get('id') + query = Telegram.select().where(Telegram.token == kwargs.get('token')) + elif kwargs.get('id'): + query = Telegram.select().where(Telegram.id == kwargs.get('id')) + else: + query = Telegram.select() try: - cur.execute(sql) - except sqltool.Error as e: + query_res = query.execute() + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - cur.close() - con.close() + return query_res def insert_new_telegram(token, chanel, group): - con, cur = get_cur() - sql = """insert into telegram(`token`, `chanel_name`, `groups`) values ('%s', '%s', '%s') """ % (token, chanel, group) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + Telegram.insert(token=token, chanel_name=chanel, groups=group).execute() + except Exception as e: funct.out_error(e) - con.rollback() + return False else: return True - cur.close() - con.close() -def update_telegram(token, chanel, group, id): - con, cur = get_cur() - sql = """ update telegram set - `token` = '%s', - `chanel_name` = '%s', - `groups` = '%s' - where id = '%s' """ % (token, chanel, group, id) +def update_telegram(token, chanel, group, telegram_id): + telegram_update = Telegram.update(token=token, chanel_name=chanel, groups=group).where(Telegram.id == telegram_id) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + telegram_update.execute() + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() - - -def delete_slack(id): - con, cur = get_cur() - sql = """ delete from slack where id = %s """ % (id) - try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: - funct.out_error(e) - con.rollback() + return False + else: + return True + + +def delete_slack(slack_id): + query = Slack.delete().where(Slack.id == slack_id) + try: + query.execute() + except Exception as e: + funct.out_error(e) + return False else: return True - cur.close() - con.close() def select_slack(**kwargs): - con, cur = get_cur() - sql = """select * from slack """ - if kwargs.get('group'): - sql = """select * from slack where groups = '%s' """ % kwargs.get('group') if kwargs.get('token'): - sql = """select * from slack where token = '%s' """ % kwargs.get('token') - if kwargs.get('id'): - sql = """select * from slack where id = '%s' """ % kwargs.get('id') + query = Slack.select().where(Slack.token == kwargs.get('token')) + elif kwargs.get('id'): + query = Slack.select().where(Slack.id == kwargs.get('id')) + else: + query = Slack.select() try: - cur.execute(sql) - except sqltool.Error as e: + query_res = query.execute() + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - cur.close() - con.close() + return query_res def insert_new_slack(token, chanel, group): - con, cur = get_cur() - sql = """insert into slack(`token`, `chanel_name`, `groups`) values ('%s', '%s', '%s') """ % (token, chanel, group) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + Slack.insert(token=token, chanel_name=chanel, groups=group).execute() + except Exception as e: funct.out_error(e) - con.rollback() + return False else: return True - cur.close() - con.close() -def update_slack(token, chanel, group, id): - con, cur = get_cur() - sql = """ update slack set - `token` = '%s', - `chanel_name` = '%s', - `groups` = '%s' - where id = '%s' """ % (token, chanel, group, id) +def update_slack(token, chanel, group, slack_id): + query_update = Slack.update(token=token, chanel_name=chanel, groups=group).where(Slack.id == slack_id) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + query_update.execute() + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() - - -def insert_new_option(option, group): - con, cur = get_cur() - sql = """insert into options(`options`, `groups`) values ('%s', '%s') """ % (option, group) - try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: - funct.out_error(e) - con.rollback() + return False + else: + return True + +def insert_new_option(saved_option, group): + try: + Option.insert(options=saved_option, groups=group).execute() + except Exception as e: + funct.out_error(e) + return False else: return True - cur.close() - con.close() def select_options(**kwargs): - con, cur = get_cur() - sql = """select * from options """ if kwargs.get('option'): - sql = """select * from options where options = '%s' """ % kwargs.get('option') - if kwargs.get('group'): - sql = """select options from options where groups = '{}' and options like '{}%' """.format(kwargs.get('group'), kwargs.get('term')) + query = Option.select().where(Option.options == kwargs.get('option')) + elif kwargs.get('group'): + query = Option.select(Option.options).where((Option.groups == kwargs.get('group')) & (Option.options.startswith(kwargs.get('term')))) + else: + query = Option.select() try: - cur.execute(sql) - except sqltool.Error as e: + query_res = query.execute() + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - cur.close() - con.close() + return query_res -def update_options(option, id): - con, cur = get_cur() - sql = """ update options set - options = '%s' - where id = '%s' """ % (option, id) +def update_options(option, option_id): + query_update = Option.update(options=option).where(Option.id == option_id) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + query_update.execute() + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() - - -def delete_option(id): - con, cur = get_cur() - sql = """ delete from options where id = %s """ % (id) - try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: - funct.out_error(e) - con.rollback() + return False + else: + return True + + +def delete_option(option_id): + query = Option.delete().where(Option.id == option_id) + try: + query.execute() + except Exception as e: + funct.out_error(e) + return False else: return True - cur.close() - con.close() def insert_new_savedserver(server, description, group): - con, cur = get_cur() - sql = """insert into saved_servers(`server`, `description`, `groups`) values ('%s', '%s', '%s') """ % (server, description, group) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + SavedServer.insert(server=server, description=description, groups=group).execute() + except Exception as e: funct.out_error(e) - con.rollback() + return False else: return True - cur.close() - con.close() def select_saved_servers(**kwargs): - con, cur = get_cur() - sql = """select * from saved_servers """ if kwargs.get('server'): - sql = """select * from saved_servers where server = '%s' """ % kwargs.get('server') - if kwargs.get('group'): - sql = """select server,description from saved_servers where groups = '{}' and server like '{}%' """.format(kwargs.get('group'), kwargs.get('term')) + query = SavedServer.select().where(SavedServer.server == kwargs.get('server')) + elif kwargs.get('group'): + query = SavedServer.select(SavedServer.server, SavedServer.description).where( + (SavedServer.groups == kwargs.get('group')) & (SavedServer.server.startswith(kwargs.get('term')))) + else: + query = SavedServer.select() try: - cur.execute(sql) - except sqltool.Error as e: + query_res = query.execute() + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - cur.close() - con.close() + return query_res -def update_savedserver(server, description, id): - con, cur = get_cur() - sql = """ update saved_servers set - server = '%s', - description = '%s' - where id = '%s' """ % (server, description, id) +def update_savedserver(server, description, saved_id): + query_update = SavedServer.update(server=server, description=description).where(SavedServer.id == saved_id) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + query_update.execute() + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() - - -def delete_savedserver(id): - con, cur = get_cur() - sql = """ delete from saved_servers where id = %s """ % (id) - try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: - funct.out_error(e) - con.rollback() + return False + else: + return True + + +def delete_savedserver(saved_id): + query = SavedServer.delete().where(SavedServer.id == saved_id) + try: + query.execute() + except Exception as e: + funct.out_error(e) + return False else: return True - cur.close() - con.close() def insert_metrics(serv, curr_con, cur_ssl_con, sess_rate, max_sess_rate): - con, cur = get_cur() - if mysql_enable == '1': - sql = """ insert into metrics (serv, curr_con, cur_ssl_con, sess_rate, max_sess_rate, date) values('%s', '%s', '%s', '%s', '%s', now()) """ % (serv, curr_con, cur_ssl_con, sess_rate, max_sess_rate) - else: - sql = """ insert into metrics (serv, curr_con, cur_ssl_con, sess_rate, max_sess_rate, date) values('%s', '%s', '%s', '%s', '%s', datetime('now', 'localtime')) """ % (serv, curr_con, cur_ssl_con, sess_rate, max_sess_rate) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + Metrics.insert(serv=serv, curr_con=curr_con, cur_ssl_con=cur_ssl_con, sess_rate=sess_rate, + max_sess_rate=max_sess_rate, date=funct.get_data('regular')).execute() + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() def insert_metrics_http(serv, http_2xx, http_3xx, http_4xx, http_5xx): - con, cur = get_cur() - if mysql_enable == '1': - sql = """ insert into metrics_http_status (serv, `2xx`, `3xx`, `4xx`, `5xx`, date) values('%s', '%s', '%s', '%s', '%s', now()) """ % (serv, http_2xx, http_3xx, http_4xx, http_5xx) - else: - sql = """ insert into metrics_http_status (serv, `2xx`, `3xx`, `4xx`, `5xx`, date) values('%s', '%s', '%s', '%s', '%s', datetime('now', 'localtime')) """ % (serv, http_2xx, http_3xx, http_4xx, http_5xx) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + MetricsHttpStatus.insert(serv=serv, ok_ans=http_2xx, redir_ans=http_3xx, not_found_ans=http_4xx, + err_ans=http_5xx, date=funct.get_data('regular')).execute() + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() def select_waf_metrics_enable_server(ip): - con, cur = get_cur() - sql = """ select waf.metrics from waf left join servers as serv on waf.server_id = serv.id where ip = '%s' """ % ip + query = Waf.select(Waf.metrics).join(Server, on=(Waf.server_id == Server.server_id)).where(Server.ip == ip) try: - cur.execute(sql) - except sqltool.Error as e: + query_res = query.execute() + except Exception as e: funct.out_error(e) else: - for enable in cur.fetchall(): - return enable[0] - cur.close() - con.close() + for en in query_res: + return en.metrics def select_waf_servers(serv): - con, cur = get_cur() - sql = """ select serv.ip from waf left join servers as serv on waf.server_id = serv.id where serv.ip = '%s' """ % serv + query = Server.select(Server.ip).join(Waf, on=(Waf.server_id == Server.server_id)).where(Server.ip == serv) try: - cur.execute(sql) - except sqltool.Error as e: + query_res = query.execute() + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - cur.close() - con.close() - - -def select_all_waf_servers(): - con, cur = get_cur() - sql = """ select serv.ip from waf left join servers as serv on waf.server_id = serv.id """ - try: - cur.execute(sql) - except sqltool.Error as e: - funct.out_error(e) - else: - return cur.fetchall() - cur.close() - con.close() + for en in query_res: + return en.ip def select_waf_servers_metrics_for_master(): - con, cur = get_cur() + cursor = conn.cursor() sql = """ select servers.ip from servers left join waf as waf on waf.server_id = servers.id where servers.enable = 1 and waf.metrics = '1' """ try: - cur.execute(sql) - except sqltool.Error as e: + cursor.execute(sql) + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - cur.close() - con.close() + return cursor.fetchall() -def select_waf_servers_metrics(uuid, **kwargs): - con, cur = get_cur() - sql = """ select * from user where username = '%s' """ % get_user_name_by_uuid(uuid) +def select_waf_servers_metrics(uuid): + cursor = conn.cursor() try: - cur.execute(sql) - except sqltool.Error as e: - print("An error occurred:", e) + user_group = User.get(User.username == get_user_name_by_uuid(uuid)) + except Exception as e: + funct.out_error(e) else: - for group in cur: - if group[5] == '1': - sql = """ select servers.ip from servers left join waf as waf on waf.server_id = servers.id where servers.enable = 1 and waf.metrics = '1' """ - else: - sql = """ select servers.ip from servers left join waf as waf on waf.server_id = servers.id where servers.enable = 1 and waf.metrics = '1' and servers.groups like '%{group}%' """.format(group=group[5]) + if user_group.groups == '1': + sql = """ select servers.ip from servers left join waf as waf on waf.server_id = servers.id + where servers.enable = 1 and waf.metrics = '1' """ + else: + sql = """ select servers.ip from servers left join waf as waf on waf.server_id = servers.id + where servers.enable = 1 and waf.metrics = '1' and servers.groups like '%{group}%' """.format(group=user_group.groups) try: - cur.execute(sql) - except sqltool.Error as e: + cursor.execute(sql) + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - cur.close() - con.close() + return cursor.fetchall() def select_waf_metrics(serv, **kwargs): - con, cur = get_cur() + cursor = conn.cursor() if mysql_enable == '1': if kwargs.get('time_range') == '60': @@ -1556,197 +1160,173 @@ def select_waf_metrics(serv, **kwargs): sql = """ select * from (select * from waf_metrics where serv = '{serv}' {date_from} order by `date`) order by `date` """.format(serv=serv, date_from=date_from) try: - cur.execute(sql) - except sqltool.Error as e: + cursor.execute(sql) + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - cur.close() - con.close() + return cursor.fetchall() def insert_waf_metrics_enable(serv, enable): - con, cur = get_cur() - sql = """ insert into waf (server_id, metrics) values((select id from servers where ip = '%s'), '%s') """ % (serv, enable) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + server_id = Server.get(Server.ip == serv).server_id + Waf.inser(server_id=server_id, metrics=enable).execute() + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() def insert_waf_rules(serv): - con, cur = get_cur() - sql = list() - sql.append("INSERT INTO waf_rules (serv, rule_name, rule_file, `desc`) values('%s', 'Ignore static', 'modsecurity_crs_10_ignore_static.conf', 'This ruleset will skip all tests for media files, but will skip only the request body phase (phase 2) for text files. To skip the outbound stage for text files, add file 47 (skip_outbound_checks) to your configuration, in addition to this fileth/aws/login');" % serv) - sql.append("INSERT INTO waf_rules (serv, rule_name, rule_file, `desc`) values('%s', 'Brute force protection', 'modsecurity_crs_11_brute_force.conf', 'Anti-Automation Rule for specific Pages (Brute Force Protection) This is a rate-limiting rule set and does not directly correlate whether the authentication attempt was successful or not');" % serv) - sql.append("INSERT INTO waf_rules (serv, rule_name, rule_file, `desc`) values('%s', 'DOS Protections', 'modsecurity_crs_11_dos_protection.conf', 'Enforce an existing IP address block and log only 1-time/minute. We do not want to get flooded by alerts during an attack or scan so we are only triggering an alert once/minute. You can adjust how often you want to receive status alerts by changing the expirevar setting below');" % serv) - sql.append("INSERT INTO waf_rules (serv, rule_name, rule_file, `desc`) values('%s', 'XML enabler', 'modsecurity_crs_13_xml_enabler.conf', 'The rules in this file will trigger the XML parser upon an XML request');" % serv) - sql.append("INSERT INTO waf_rules (serv, rule_name, rule_file, `desc`) values('%s', 'Protocol violations', 'modsecurity_crs_20_protocol_violations.conf', 'Some protocol violations are common in application layer attacks. Validating HTTP requests eliminates a large number of application layer attacks. The purpose of this rules file is to enforce HTTP RFC requirements that state how the client is supposed to interact with the server. http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html');" % serv) - sql.append("INSERT INTO waf_rules (serv, rule_name, rule_file, `desc`) values('%s', 'Protocol anomalies', 'modsecurity_crs_21_protocol_anomalies.conf', 'Some common HTTP usage patterns are indicative of attacks but may also be used by non-browsers for legitimate uses. Do not accept requests without common headers. All normal web browsers include Host, User-Agent and Accept headers. Implies either an attacker or a legitimate automation client');" % serv) - sql.append("INSERT INTO waf_rules (serv, rule_name, rule_file, `desc`) values('%s', 'Detect CC#', 'modsecurity_crs_25_cc_known.conf', 'Detect CC# in input, log transaction and sanitize');" % serv) - sql.append("INSERT INTO waf_rules (serv, rule_name, rule_file, `desc`) values('%s', 'CC traker', 'modsecurity_crs_25_cc_track_pan.conf', 'Credit Card Track 1 and 2 and PAN Leakage Checks');" % serv) - sql.append("INSERT INTO waf_rules (serv, rule_name, rule_file, `desc`) values('%s', 'HTTP policy', 'modsecurity_crs_30_http_policy.conf', 'HTTP policy enforcement The HTTP policy enforcement rule set sets limitations on the use of HTTP by clients. Few applications require the breadth and depth of the HTTP protocol. On the other hand many attacks abuse valid but rare HTTP use patterns. Restricting HTTP protocol usage is effective in therefore effective in blocking many application layer attacks');" % serv) - sql.append("INSERT INTO waf_rules (serv, rule_name, rule_file, `desc`) values('%s', 'Bad robots', 'modsecurity_crs_35_bad_robots.conf', 'Bad robots detection is based on checking elements easily controlled by the client. As such a determined attacked can bypass those checks. Therefore bad robots detection should not be viewed as a security mechanism against targeted attacks but rather as a nuisance reduction, eliminating most of the random attacks against your web site');" % serv) - sql.append("INSERT INTO waf_rules (serv, rule_name, rule_file, `desc`) values('%s', 'OS Injection Attacks', 'modsecurity_crs_40_generic_attacks.conf', 'OS Command Injection Attacks');" % serv) - sql.append("INSERT INTO waf_rules (serv, rule_name, rule_file, `desc`) values('%s', 'SQL injection', 'modsecurity_crs_41_sql_injection_attacks.conf', 'SQL injection protection');" % serv) - sql.append("INSERT INTO waf_rules (serv, rule_name, rule_file, `desc`) values('%s', 'XSS Protections', 'modsecurity_crs_41_xss_attacks.conf', 'XSS attacks protection');" % serv) - sql.append("INSERT INTO waf_rules (serv, rule_name, rule_file, `desc`) values('%s', 'Comment spam', 'modsecurity_crs_42_comment_spam.conf', 'Comment spam is an attack against blogs, guestbooks, wikis and other types of interactive web sites that accept and display hyperlinks submitted by visitors. The spammers automatically post specially crafted random comments which include links that point to the spammer\'s web site. The links artificially increas the site's search engine ranking and may make the site more noticable in search results.');" % serv) - sql.append("INSERT INTO waf_rules (serv, rule_name, rule_file, `desc`) values('%s', 'Trojans Protections', 'modsecurity_crs_45_trojans.conf ', 'The trojan access detection rules detects access to known Trojans already installed on a server. Uploading of Trojans is part of the Anti-Virus rules and uses external Anti Virus program when uploading files. Detection of Trojans access is especially important in a hosting environment where the actual Trojan upload may be done through valid methods and not through hacking');" % serv) - sql.append("INSERT INTO waf_rules (serv, rule_name, rule_file, `desc`) values('%s', 'RFI Protections', 'modsecurity_crs_46_slr_et_lfi_attacks.conf', 'Remote file inclusion is an attack targeting vulnerabilities in web applications that dynamically reference external scripts. The perpetrator’s goal is to exploit the referencing function in an application to upload malware (e.g., backdoor shells) from a remote URL located within a different domain');" % serv) - sql.append("INSERT INTO waf_rules (serv, rule_name, rule_file, `desc`) values('%s', 'RFI Protections 2', 'modsecurity_crs_46_slr_et_rfi_attacks.conf', 'Remote file inclusion is an attack targeting vulnerabilities in web applications that dynamically reference external scripts. The perpetrator’s goal is to exploit the referencing function in an application to upload malware (e.g., backdoor shells) from a remote URL located within a different domain');" % serv) - sql.append("INSERT INTO waf_rules (serv, rule_name, rule_file, `desc`) values('%s', 'SQLi Protections', 'modsecurity_crs_46_slr_et_sqli_attacks.conf', 'SQLi injection attacks protection');" % serv) - sql.append("INSERT INTO waf_rules (serv, rule_name, rule_file, `desc`) values('%s', 'XSS Protections 2', 'modsecurity_crs_46_slr_et_xss_attacks.conf', 'XSS attacks protection');" % serv) - sql.append("INSERT INTO waf_rules (serv, rule_name, rule_file, `desc`) values('%s', 'Common exceptions', 'modsecurity_crs_47_common_exceptions.conf', 'This file is used as an exception mechanism to remove common false positives that may be encountered');" % serv) - for i in sql: - try: - cur.execute(i) - con.commit() - except sqltool.Error as e: - pass + data_source = [ + {'serv': serv, 'rule_name': 'Ignore static', 'rule_file': 'modsecurity_crs_10_ignore_static.conf', + 'desc': 'This ruleset will skip all tests for media files, but will skip only the request body phase (phase 2) for text files. To skip the outbound stage for text files, add file 47 (skip_outbound_checks) to your configuration, in addition to this fileth/aws/login'}, + {'serv': serv, 'rule_name': 'Brute force protection', 'rule_file': 'modsecurity_crs_11_brute_force.conf', + 'desc': 'Anti-Automation Rule for specific Pages (Brute Force Protection) This is a rate-limiting rule set and does not directly correlate whether the authentication attempt was successful or not'}, + {'serv': serv, 'rule_name': 'DOS Protections', 'rule_file': 'modsecurity_crs_11_dos_protection.conf', + 'desc': 'Enforce an existing IP address block and log only 1-time/minute. We do not want to get flooded by alerts during an attack or scan so we are only triggering an alert once/minute. You can adjust how often you want to receive status alerts by changing the expirevar setting below'}, + {'serv': serv, 'rule_name': 'XML enabler', 'rule_file': 'modsecurity_crs_13_xml_enabler.conf', + 'desc': 'The rules in this file will trigger the XML parser upon an XML request'}, + {'serv': serv, 'rule_name': 'Protocol violations', 'rule_file': 'modsecurity_crs_20_protocol_violations.conf', + 'desc': 'Some protocol violations are common in application layer attacks. Validating HTTP requests eliminates a large number of application layer attacks. The purpose of this rules file is to enforce HTTP RFC requirements that state how the client is supposed to interact with the server. http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html'}, + {'serv': serv, 'rule_name': 'Protocol anomalies', 'rule_file': 'modsecurity_crs_21_protocol_anomalies.conf', + 'desc': 'Some common HTTP usage patterns are indicative of attacks but may also be used by non-browsers for legitimate uses. Do not accept requests without common headers. All normal web browsers include Host, User-Agent and Accept headers. Implies either an attacker or a legitimate automation client'}, + {'serv': serv, 'rule_name': 'Detect CC#', 'rule_file': 'modsecurity_crs_25_cc_known.conf', + 'desc': 'Detect CC# in input, log transaction and sanitize'}, + {'serv': serv, 'rule_name': 'CC traker', 'rule_file': 'modsecurity_crs_25_cc_track_pan.conf', + 'desc': 'Credit Card Track 1 and 2 and PAN Leakage Checks'}, + {'serv': serv, 'rule_name': 'HTTP policy', 'rule_file': 'modsecurity_crs_30_http_policy.conf', + 'desc': 'HTTP policy enforcement The HTTP policy enforcement rule set sets limitations on the use of HTTP by clients. Few applications require the breadth and depth of the HTTP protocol. On the other hand many attacks abuse valid but rare HTTP use patterns. Restricting HTTP protocol usage is effective in therefore effective in blocking many application layer attacks'}, + {'serv': serv, 'rule_name': 'Bad robots', 'rule_file': 'modsecurity_crs_35_bad_robots.conf', + 'desc': 'Bad robots detection is based on checking elements easily controlled by the client. As such a determined attacked can bypass those checks. Therefore bad robots detection should not be viewed as a security mechanism against targeted attacks but rather as a nuisance reduction, eliminating most of the random attacks against your web site'}, + {'serv': serv, 'rule_name': 'OS Injection Attacks', 'rule_file': 'modsecurity_crs_40_generic_attacks.conf', + 'desc': 'OS Command Injection Attacks'}, + {'serv': serv, 'rule_name': 'SQL injection', 'rule_file': 'modsecurity_crs_41_sql_injection_attacks.conf', + 'desc': 'SQL injection protection'}, + {'serv': serv, 'rule_name': 'XSS Protections', 'rule_file': 'modsecurity_crs_41_xss_attacks.conf', + 'desc': 'XSS attacks protection'}, + {'serv': serv, 'rule_name': 'Comment spam', 'rule_file': 'modsecurity_crs_42_comment_spam.conf', + 'desc': 'Comment spam is an attack against blogs, guestbooks, wikis and other types of interactive web sites that accept and display hyperlinks submitted by visitors. The spammers automatically post specially crafted random comments which include links that point to the spammer\'s web site. The links artificially increas the site\'s search engine ranking and may make the site more noticable in search results.'}, + {'serv': serv, 'rule_name': 'Trojans Protections', 'rule_file': 'modsecurity_crs_45_trojans.conf ', + 'desc': 'The trojan access detection rules detects access to known Trojans already installed on a server. Uploading of Trojans is part of the Anti-Virus rules and uses external Anti Virus program when uploading files. Detection of Trojans access is especially important in a hosting environment where the actual Trojan upload may be done through valid methods and not through hacking'}, + {'serv': serv, 'rule_name': 'RFI Protections', 'rule_file': 'modsecurity_crs_46_slr_et_lfi_attacks.conf', + 'desc': 'Remote file inclusion is an attack targeting vulnerabilities in web applications that dynamically reference external scripts. The perpetrator’s goal is to exploit the referencing function in an application to upload malware (e.g., backdoor shells) from a remote URL located within a different domain'}, + {'serv': serv, 'rule_name': 'RFI Protections 2', 'rule_file': 'modsecurity_crs_46_slr_et_rfi_attacks.conf', + 'desc': 'Remote file inclusion is an attack targeting vulnerabilities in web applications that dynamically reference external scripts. The perpetrator’s goal is to exploit the referencing function in an application to upload malware (e.g., backdoor shells) from a remote URL located within a different domain'}, + {'serv': serv, 'rule_name': 'SQLi Protections', 'rule_file': 'modsecurity_crs_46_slr_et_sqli_attacks.conf', + 'desc': 'SQLi injection attacks protection'}, + {'serv': serv, 'rule_name': 'XSS Protections 2', 'rule_file': 'modsecurity_crs_46_slr_et_xss_attacks.conf', + 'desc': 'XSS attacks protection'}, + {'serv': serv, 'rule_name': 'Common exceptions', 'rule_file': 'modsecurity_crs_47_common_exceptions.conf', + 'desc': 'This file is used as an exception mechanism to remove common false positives that may be encountered'}, + ] + try: + WafRules.insert_many(data_source).execute() + except Exception as e: + funct.out_error(e) else: - if kwargs.get('silent') != 1: - print('Updating... one more for version 4.0.0') return True - cur.close() - con.close() def select_waf_rules(serv): - con, cur = get_cur() - sql = """ select id, rule_name, en, `desc` from waf_rules where serv = '%s' """ % serv + query = WafRules.select(WafRules.id, WafRules.rule_name, WafRules.en, WafRules.desc).where(WafRules.serv == serv) try: - cur.execute(sql) - except sqltool.Error as e: + query_res = query.execute() + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - cur.close() - con.close() + return query_res -def select_waf_rule_by_id(id): - con, cur = get_cur() - sql = """ select rule_file from waf_rules where id = '%s' """ % id +def delete_waf_rules(serv): + query = WafRules.delete().where(WafRules.serv == serv) try: - cur.execute(sql) - except sqltool.Error as e: + query.execute() + except Exception as e: + funct.out_error(e) + + +def select_waf_rule_by_id(rule_id): + try: + query = WafRules.get(WafRules.id == rule_id) + except Exception as e: funct.out_error(e) else: - for rule_file in cur.fetchall(): - return rule_file[0] - cur.close() - con.close() + return query.rule_file -def update_enable_waf_rules(id, serv, en): - con, cur = get_cur() - sql = """ update waf_rules set `en` = '%s' where id = '%s' and serv = '%s' """ % (en, id, serv) +def update_enable_waf_rules(rule_id, serv, en): + query = WafRules.update(WafRules=en).where((WafRules.id == rule_id) & (WafRules.serv == serv)) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + query.execute() + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() -def delete_waf_server(id): - con, cur = get_cur() - sql = """ delete from waf where server_id = '%s' """ % id +def delete_waf_server(server_id): + query = Waf.delete().where(Waf.server_id == server_id) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + query.execute() + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() def insert_waf_metrics(serv, conn): - con, cur = get_cur() - if mysql_enable == '1': - sql = """ insert into waf_metrics (serv, conn, date) values('%s', '%s', now()) """ % (serv, conn) - else: - sql = """ insert into waf_metrics (serv, conn, date) values('%s', '%s', datetime('now', 'localtime')) """ % (serv, conn) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + WafMetrics.insert(serv=serv, conn=conn, date=funct.get_data('regular')).execute() + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() def delete_waf_metrics(): - con, cur = get_cur() + cursor = conn.cursor() if mysql_enable == '1': sql = """ delete from metrics where date < now() - INTERVAL 3 day """ else: sql = """ delete from metrics where date < datetime('now', '-3 days') """ try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + cursor.execute(sql) + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() def update_waf_metrics_enable(name, enable): - con, cur = get_cur() - sql = """ update waf set metrics = %s where server_id = (select id from servers where hostname = '%s') """ % (enable, name) + server_id = 0 try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + server_id = Server.get(Server.hostname == name).server_id + except Exception as e: + funct.out_error(e) + + try: + Waf.update(metrics=enable).where(Waf.server_id == server_id).execute() + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() def delete_metrics(): - con, cur = get_cur() + cursor = conn.cursor() if mysql_enable == '1': sql = """ delete from metrics where date < now() - INTERVAL 3 day """ else: sql = """ delete from metrics where date < datetime('now', '-3 days') """ try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + cursor.execute(sql) + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() def delete_http_metrics(): - con, cur = get_cur() + cursor = conn.cursor() if mysql_enable == '1': sql = """ delete from metrics_http_status where date < now() - INTERVAL 3 day """ else: sql = """ delete from metrics_http_status where date < datetime('now', '-3 days') """ try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + cursor.execute(sql) + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() def select_metrics(serv, **kwargs): - con, cur = get_cur() + cursor = conn.cursor() if mysql_enable == '1': if kwargs.get('time_range') == '60': @@ -1775,18 +1355,15 @@ def select_metrics(serv, **kwargs): sql = """ select * from (select * from metrics where serv = '{serv}' {date_from} order by `date`) order by `date` """.format(serv=serv, date_from=date_from) try: - cur.execute(sql) - except sqltool.Error as e: + cursor.execute(sql) + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - - cur.close() - con.close() + return cursor.fetchall() def select_metrics_http(serv, **kwargs): - con, cur = get_cur() + cursor = conn.cursor() if mysql_enable == '1': if kwargs.get('time_range') == '60': @@ -1815,67 +1392,50 @@ def select_metrics_http(serv, **kwargs): sql = """ select * from (select * from metrics_http_status where serv = '{serv}' {date_from} order by `date`) order by `date` """.format(serv=serv, date_from=date_from) try: - cur.execute(sql) - except sqltool.Error as e: + cursor.execute(sql) + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - - cur.close() - con.close() + return cursor.fetchall() def select_servers_metrics_for_master(**kwargs): - con, cur = get_cur() + cursor = conn.cursor() sql = """select ip from servers where metrics = 1 """ if kwargs.get('group') is not None: sql = """select ip from servers where metrics = 1 and groups = '%s' """ % kwargs.get('group') try: - cur.execute(sql) - except sqltool.Error as e: + cursor.execute(sql) + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - cur.close() - con.close() + return cursor.fetchall() -def select_servers_metrics(uuid, **kwargs): - con, cur = get_cur() - import http.cookies - import os - cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) - group = cookie.get('group') - group = group.value - +def select_servers_metrics(): + group_id = funct.get_user_group(id=1) if funct.check_user_group(): - if group == '1': - sql = """ select ip from servers where enable = 1 and metrics = '1' """ + if group_id == '1': + query = Server.select(Server.ip).where((Server.enable == 1) & (Server.metrics == 1)) else: - sql = """ select ip from servers where groups = '{group}' and metrics = '1'""".format(group=group) + query = Server.select(Server.ip).where((Server.groups == group_id) & (Server.metrics == 1)) try: - cur.execute(sql) - except sqltool.Error as e: + query_res = query.execute() + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - cur.close() - con.close() + return query_res def select_table_metrics(): - con, cur = get_cur() - import http.cookies - import os - cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) - group = cookie.get('group') - group = group.value + cursor = conn.cursor() + group_id = funct.get_user_group(id=1) if funct.check_user_group(): - if group == '1': + if group_id == '1': groups = "" else: - groups = "and servers.groups = '{group}' ".format(group=group) + groups = "and servers.groups = '{group}' ".format(group=group_id) if mysql_enable == '1': sql = """ select ip.ip, hostname, avg_sess_1h, avg_sess_24h, avg_sess_3d, max_sess_1h, max_sess_24h, max_sess_3d, avg_cur_1h, avg_cur_24h, avg_cur_3d, max_con_1h, max_con_24h, max_con_3d from @@ -1970,8 +1530,6 @@ def select_table_metrics(): and ip.ip=max_con_3d.ip group by hostname.ip """ % groups - - else: sql = """ select ip.ip, hostname, avg_sess_1h, avg_sess_24h, avg_sess_3d, max_sess_1h, max_sess_24h, max_sess_3d, avg_cur_1h, avg_cur_24h, avg_cur_3d, max_con_1h, max_con_24h, max_con_3d from @@ -2068,13 +1626,11 @@ def select_table_metrics(): group by hostname.ip """ % groups try: - cur.execute(sql) - except sqltool.Error as e: + cursor.execute(sql) + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - cur.close() - con.close() + return cursor.fetchall() def get_setting(param, **kwargs): @@ -2086,264 +1642,195 @@ def get_setting(param, **kwargs): if user_group == '' or param == 'lists_path' or param == 'ssl_local_path': user_group = '1' - con, cur = get_cur() - sql = """select value from `settings` where param='%s' and `group` = '%s'""" % (param, user_group) if kwargs.get('all'): - sql = """select * from `settings` where `group` = '%s' order by section desc""" % user_group + query = Setting.select().where(Setting.group == user_group).order_by(Setting.section.desc()) + else: + query = Setting.select().where((Setting.param == param) & (Setting.group == user_group)) + try: - cur.execute(sql) - except sqltool.Error as e: + query_res = query.execute() + except Exception as e: funct.out_error(e) else: if kwargs.get('all'): - return cur.fetchall() + return query_res else: - for value in cur.fetchone(): - return value - cur.close() - con.close() + for setting in query_res: + return setting.value def update_setting(param, val): user_group = funct.get_user_group(id=1) if funct.check_user_group(): - con, cur = get_cur() - sql = """update `settings` set `value` = '%s' where param = '%s' and `group` = '%s' """ % (val, param, user_group) + query = Setting.update(value=val).where((Setting.param == param) & (Setting.group == user_group)) try: - cur.execute(sql) - con.commit() - cur.close() - con.close() + query.execute() return True - except sqltool.Error as e: + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() return False def get_ver(): - con, cur = get_cur() - sql = """ select * from version; """ try: - cur.execute(sql) - except sqltool.Error as e: + ver = Version.get() + except Exception as e: funct.out_error(e) else: - for ver in cur.fetchall(): - return ver[0] - cur.close() - con.close() + return ver.version -def select_roles(**kwargs): - con, cur = get_cur() - sql = """select * from role ORDER BY id""" - if kwargs.get("roles") is not None: - sql = """select * from role where name='%s' """ % kwargs.get("roles") +def select_roles(): + query = Role.select() try: - cur.execute(sql) - except sqltool.Error as e: + query_res = query.execute() + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - cur.close() - con.close() + return query_res def select_alert(**kwargs): - con, cur = get_cur() + cursor = conn.cursor() sql = """select ip from servers where alert = 1 and enable = 1 """ if kwargs.get("group") is not None: sql = """select ip from servers where alert = 1 and `groups` = '%s' and enable = 1 """ % kwargs.get("group") try: - cur.execute(sql) - except sqltool.Error as e: + cursor.execute(sql) + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - cur.close() - con.close() + return cursor.fetchall() def select_all_alerts(**kwargs): - con, cur = get_cur() - sql = """select ip from servers where alert = 1 or nginx_alert = 1 and enable = 1 """ if kwargs.get("group") is not None: - sql = """select ip from servers where (alert = 1 or nginx_alert = 1) and `groups` = '%s' and enable = 1 """ % kwargs.get("group") + query = Server.select(Server.ip).where( + ((Server.alert == 1) | (Server.nginx_alert == 1)) & + (Server.enable == 1) & + (Server.groups == kwargs.get('group'))) + else: + query = Server.select(Server.ip).where(((Server.alert == 1) | (Server.nginx_alert == 1)) & (Server.enable == 1)) try: - cur.execute(sql) - except sqltool.Error as e: + query_res = query.execute() + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - cur.close() - con.close() + return query_res def select_nginx_alert(**kwargs): - con, cur = get_cur() + cursor = conn.cursor() sql = """select ip from servers where nginx_alert = 1 and enable = 1 """ if kwargs.get("group") is not None: sql = """select ip from servers where nginx_alert = 1 and `groups` = '%s' and enable = 1 """ % kwargs.get("group") try: - cur.execute(sql) - except sqltool.Error as e: + cursor.execute(sql) + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - cur.close() - con.close() + return cursor.fetchall() -def select_keep_alive(**kwargs): - con, cur = get_cur() +def select_keep_alive(): + cursor = conn.cursor() sql = """select ip from servers where active = 1 """ try: - cur.execute(sql) - except sqltool.Error as e: + cursor.execute(sql) + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - cur.close() - con.close() + return cursor.fetchall() -def select_nginx_keep_alive(**kwargs): - con, cur = get_cur() +def select_nginx_keep_alive(): + cursor = conn.cursor() sql = """select ip from servers where nginx_active = 1 """ try: - cur.execute(sql) - except sqltool.Error as e: + cursor.execute(sql) + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - cur.close() - con.close() + return cursor.fetchall() -def select_keealived(serv, **kwargs): - con, cur = get_cur() - sql = """select keepalived from `servers` where ip='%s' """ % serv +def select_keepalived(serv): try: - cur.execute(sql) - except sqltool.Error as e: + keepalived = Server.get(Server.ip == serv).keepalived + except Exception as e: funct.out_error(e) else: - for value in cur.fetchone(): - return value - finally: - cur.close() - con.close() + return keepalived def update_keepalived(serv): - con, cur = get_cur() - sql = """update `servers` set `keepalived` = '1' where ip = '%s' """ % serv + query = Server.update(keepalived='1').where(Server.ip == serv) try: - cur.execute(sql) - con.commit() - return True - except sqltool.Error as e: + query.execute() + except Exception as e: funct.out_error(e) - con.rollback() return False - finally: - cur.close() - con.close() + else: + return True def select_nginx(serv): - con, cur = get_cur() - sql = """select nginx from `servers` where ip='%s' """ % serv try: - cur.execute(sql) - except sqltool.Error as e: + query_res = Server.get(Server.ip == serv).nginx + except Exception as e: funct.out_error(e) else: - for value in cur.fetchone(): - return value - cur.close() - con.close() + return query_res def update_nginx(serv): - con, cur = get_cur() - sql = """update `servers` set `nginx` = '1' where ip = '%s' """ % serv + query = Server.update(nginx=1).where(Server.ip == serv) try: - cur.execute(sql) - con.commit() + query.execute() return True - except sqltool.Error as e: + except Exception as e: funct.out_error(e) - con.rollback() return False - finally: - cur.close() - con.close() def select_haproxy(serv): - con, cur = get_cur() - sql = """select haproxy from `servers` where ip='%s' """ % serv try: - cur.execute(sql) - except sqltool.Error as e: + query_res = Server.get(Server.ip == serv).haproxy + except Exception as e: funct.out_error(e) else: - for value in cur.fetchone(): - return value - cur.close() - con.close() + return query_res def update_haproxy(serv): - con, cur = get_cur() - sql = """update `servers` set `haproxy` = '1' where ip = '%s' """ % serv + query = Server.update(haproxy=1).where(Server.ip == serv) try: - cur.execute(sql) - con.commit() + query.execute() return True - except sqltool.Error as e: + except Exception as e: funct.out_error(e) - con.rollback() return False - finally: - cur.close() - con.close() def update_firewall(serv): - con, cur = get_cur() - sql = """update `servers` set `firewall_enable` = '1' where ip = '%s' """ % serv + query = Server.update(firewall_enable=1).where(Server.ip == serv) try: - cur.execute(sql) - con.commit() + query.execute() return True - except sqltool.Error as e: + except Exception as e: funct.out_error(e) - con.rollback() return False - finally: - cur.close() - con.close() def update_server_pos(pos, server_id): - con, cur = get_cur() - sql = """ update servers set - pos = '%s' - where id = '%s'""" % (pos, server_id) + query = Server.update(pos=pos).where(Server.server_id == server_id) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + query.execute() + return True + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() + return False def check_token_exists(token): @@ -2365,6 +1852,7 @@ def check_token_exists(token): funct.logging('localhost', ' Cannot check token', haproxywi=1, login=1) except: funct.logging('localhost', ' Cannot check token', haproxywi=1) + finally: return False @@ -2373,25 +1861,19 @@ def insert_smon(server, port, enable, proto, uri, body, group, desc, telegram, u http = proto+':'+uri except: http = '' - con, cur = get_cur() - sql = """INSERT INTO smon (ip, port, en, `desc`, `group`, http, body, telegram_channel_id, user_group, `status`) - VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '3') - """ % (server, port, enable, desc, group, http, body, telegram, user_group) + try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + SMON.insert(ip=server, port=port, en=enable, desc=desc, group=group, http=http, body=body, + telegram_channel_id=telegram, user_group=user_group, status='3').execute() + except Exception as e: funct.out_error(e) - con.rollback() return False else: return True - cur.close() - con.close() def select_smon(user_group, **kwargs): - con, cur = get_cur() + cursor = conn.cursor() funct.check_user_group() @@ -2403,6 +1885,11 @@ def select_smon(user_group, **kwargs): else: user_group = "where user_group='%s'" % user_group + if kwargs.get('body') is None: + body = '' + else: + body = kwargs.get('body') + if kwargs.get('ip'): try: http = kwargs.get('proto')+':'+kwargs.get('uri') @@ -2410,68 +1897,48 @@ def select_smon(user_group, **kwargs): http = '' sql = """select id, ip, port, en, http, body, telegram_channel_id, `desc`, `group`, user_group from smon where ip='%s' and port='%s' and http='%s' and body='%s' %s - """ % (kwargs.get('ip'), kwargs.get('port'), http, kwargs.get('body'), user_group) + """ % (kwargs.get('ip'), kwargs.get('port'), http, body, user_group) elif kwargs.get('action') == 'add': sql = """select id, ip, port, en, http, body, telegram_channel_id, `desc`, `group`, user_group from smon %s order by `group`""" % user_group else: sql = """select * from `smon` %s """ % user_group + print(sql) try: - cur.execute(sql) - except sqltool.Error as e: + cursor.execute(sql) + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - cur.close() - con.close() + return cursor.fetchall() -def delete_smon(id, user_group): - con, cur = get_cur() - +def delete_smon(smon_id, user_group): funct.check_user_group() - sql = """delete from smon - where id = '%s' and user_group = '%s' """ % (id, user_group) + query = SMON.delete().where((SMON.id == smon_id) & (SMON.user_group == user_group)) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + query.execute() + except Exception as e: funct.out_error(e) - con.rollback() return False else: return True - cur.close() - con.close() -def update_smon(id, ip, port, body, telegram, group, desc, en): +def update_smon(smon_id, ip, port, body, telegram, group, desc, en): funct.check_user_group() - con, cur = get_cur() - sql = """ update smon set - ip = '%s', - port = '%s', - body = '%s', - telegram_channel_id = '%s', - `group` = '%s', - `desc` = '%s', - en = '%s' - where id = '%s'""" % (ip, port, body, telegram, group, desc, en, id) + query = (SMON.update(ip=ip, port=port, body=body, telegram_channel_id=telegram, group=group, desc=desc, en=en) + .where(SMON.id == smon_id)) try: - cur.execute(sql) - con.commit() + query.execute() return True - except sqltool.Error as e: + except Exception as e: funct.out_error(e) - con.rollback() return False - cur.close() - con.close() def alerts_history(service, user_group, **kwargs): - con, cur = get_cur() + cursor = conn.cursor() and_host = '' if kwargs.get('host'): @@ -2487,164 +1954,146 @@ def alerts_history(service, user_group, **kwargs): f"where service = '{service}' {sql_user_group} {and_host} " f"order by date desc; ") try: - cur.execute(sql) - except sqltool.Error as e: + cursor.execute(sql) + except Exception as e: funct.out_error(e) else: - return cur.fetchall() + return cursor.fetchall() def select_en_service(): - con, cur = get_cur() + cursor = conn.cursor() sql = """ select ip, port, telegram_channel_id, id, user_group from smon where en = 1""" try: - cur.execute(sql) - except sqltool.Error as e: + cursor.execute(sql) + except Exception as e: funct.out_error(e) else: - return cur.fetchall() + return cursor.fetchall() -def select_status(id): - con, cur = get_cur() - sql = """ select status from smon where id = '%s' """ % (id) +def select_status(smon_id): try: - cur.execute(sql) - except sqltool.Error as e: + query_res = SMON.get(SMON.id == smon_id).status + except Exception as e: funct.out_error(e) else: - for status in cur: - return status[0] + return query_res -def select_http_status(id): - con, cur = get_cur() - sql = """ select http_status from smon where id = '%s' """ % (id) +def select_http_status(smon_id): try: - cur.execute(sql) - except sqltool.Error as e: - print("An error occurred:", e) + query_res = SMON.get(SMON.id == smon_id).http_status + except Exception as e: + funct.out_error(e) else: - for status in cur: - return status[0] + return query_res -def select_body_status(id): - con, cur = get_cur() - sql = """ select body_status from smon where id = '%s' """ % (id) +def select_body_status(smon_id): try: - cur.execute(sql) - except sqltool.Error as e: - print("An error occurred:", e) + query_res = SMON.get(SMON.id == smon_id).body_status + except Exception as e: + funct.out_error(e) else: - for status in cur: - return status[0] + return query_res -def select_script(id): - con, cur = get_cur() - sql = """ select script from smon where id = '%s' """ % (id) +def select_script(smon_id): try: - cur.execute(sql) - except sqltool.Error as e: - print("An error occurred:", e) + query_res = SMON.get(SMON.id == smon_id).script + except Exception as e: + funct.out_error(e) else: - for script in cur: - return script[0] + return query_res -def select_http(id): - con, cur = get_cur() - sql = """ select http from smon where id = '%s' """ % (id) +def select_http(smon_id): try: - cur.execute(sql) - except sqltool.Error as e: - print("An error occurred:", e) + query_res = SMON.get(SMON.id == smon_id).http + except Exception as e: + funct.out_error(e) else: - for script in cur: - return script[0] + return query_res -def select_body(id): - con, cur = get_cur() - sql = """ select body from smon where id = '%s' """ % (id) +def select_body(smon_id): try: - cur.execute(sql) - except sqltool.Error as e: - print("An error occurred:", e) + query_res = SMON.get(SMON.id == smon_id).body + except Exception as e: + funct.out_error(e) else: - for script in cur: - return script[0] + return query_res -def change_status(status, id): - con, cur = get_cur() - sql = """ update smon set status = '%s' where id = '%s' """ % (status, id) +def change_status(status, smon_id): + query = SMON.update(status=status).where(SMON.id == smon_id) try: - cur.executescript(sql) - except sqltool.Error as e: - print("An error occurred:", e) - cur.close() - con.close() + query.execute() + except Exception as e: + funct.out_error(e) + return False + else: + return True -def change_http_status(status, id): - con, cur = get_cur() - sql = """ update smon set http_status = '%s' where id = '%s' """ % (status, id) +def change_http_status(status, smon_id): + query = SMON.update(http_status=status).where(SMON.id == smon_id) try: - cur.executescript(sql) - except sqltool.Error as e: - print("An error occurred:", e) - cur.close() - con.close() + query.execute() + except Exception as e: + funct.out_error(e) + return False + else: + return True -def change_body_status(status, id): - con, cur = get_cur() - sql = """ update smon set body_status = '%s' where id = '%s' """ % (status, id) +def change_body_status(status, smon_id): + query = SMON.update(body_status=status).where(SMON.id == smon_id) try: - cur.executescript(sql) - except sqltool.Error as e: - print("An error occurred:", e) - cur.close() - con.close() + query.execute() + except Exception as e: + funct.out_error(e) + return False + else: + return True -def add_sec_to_state_time(time, id): - con, cur = get_cur() - sql = """ update smon set time_state = '%s' where id = '%s' """ % (time, id) +def add_sec_to_state_time(time, smon_id): + query = SMON.update(time_state=time).where(SMON.id == smon_id) try: - cur.executescript(sql) - except sqltool.Error as e: - print("An error occurred:", e) - cur.close() - con.close() + query.execute() + except Exception as e: + funct.out_error(e) + return False + else: + return True -def set_to_zero_time_state(id): - con, cur = get_cur() - sql = """ update smon set time_state = 0 where id = '%s' """ % (id) +def set_to_zero_time_state(smon_id): + query = SMON.update(time_state=0).where(SMON.id == smon_id) try: - cur.executescript(sql) - except sqltool.Error as e: - print("An error occurred:", e) - cur.close() - con.close() + query.execute() + except Exception as e: + funct.out_error(e) + return False + else: + return True -def response_time(time, id): - con, cur = get_cur() - sql = """ update smon set response_time = '%s' where id = '%s' """ % (time, id) +def response_time(time, smon_id): + query = SMON.update(response_time=time).where(SMON.id == smon_id) try: - cur.executescript(sql) - except sqltool.Error as e: - print("An error occurred:", e) - cur.close() - con.close() + query.execute() + except Exception as e: + funct.out_error(e) + return False + else: + return True def smon_list(user_group): - con, cur = get_cur() + cursor = conn.cursor() if user_group == 1: user_group = '' @@ -2654,368 +2103,251 @@ def smon_list(user_group): sql = """ select ip,port,status,en,`desc`,response_time,time_state,`group`,script,http,http_status,body,body_status from smon %s order by `group` desc """ % user_group try: - cur.execute(sql) - except sqltool.Error as e: - out_error(e) + cursor.execute(sql) + except Exception as e: + funct.out_error(e) else: - return cur.fetchall() + return cursor.fetchall() def insert_alerts(user_group, level, ip, port, message, service): - con, cur = get_cur() - if mysql_enable == '1': - sql = """ insert into alerts (user_group, message, level, ip, port, service, date) values('%s', '%s', '%s', '%s', '%s', '%s', now()) """ % (user_group, message, level, ip, port, service) - else: - sql = """ insert into alerts (user_group, message, level, ip, port, service, date) values('%s', '%s', '%s', '%s', '%s', '%s', datetime('now', 'localtime')) """ % (user_group, message, level, ip, port, service) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + Alerts.insert(user_group=user_group, message=message, level=level, ip=ip, port=port, service=service, + date=funct.get_data('regular')).execute() + return True + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() + return False def select_alerts(user_group): - con, cur = get_cur() + cursor = conn.cursor() if mysql_enable == '1': sql = """ select level, message, `date` from alerts where user_group = '%s' and `date` <= (now()+ INTERVAL 10 second) """ % (user_group) else: sql = """ select level, message, `date` from alerts where user_group = '%s' and `date` >= datetime('now', '-20 second', 'localtime') and `date` <= datetime('now', 'localtime') ; """ % (user_group) try: - cur.execute(sql) - except sqltool.Error as e: - print("An error occurred:", e) + cursor.execute(sql) + except Exception as e: + funct.out_error(e) else: - return cur.fetchall() + return cursor.fetchall() def is_cloud(): - con, cur = get_cur() + cursor = conn.cursor() sql = """ select * from cloud_uuid """ try: - cur.execute(sql) - except sqltool.Error as e: - cur.close() - con.close() + cursor.execute(sql) + except: return "" else: - for cl_uuid in cur.fetchall(): - cloud_uuid = cl_uuid[0] - cur.close() - con.close() - return cloud_uuid + for cl_uuid in cursor.fetchall(): + return cl_uuid[0] def return_firewall(serv): - con, cur = get_cur() - sql = """ select firewall_enable from servers where ip = '%s' """ % serv try: - cur.execute(sql) - except sqltool.Error as e: - cur.close() - con.close() + query_res = Server.get(Server.ip == serv).firewall_enable + except: return False else: - for server in cur.fetchall(): - firewall = server[0] - - cur.close() - con.close() - return True if firewall == 1 else False + return True if query_res == 1 else False def select_geoip_country_codes(): - con, cur = get_cur() - sql = """ select * from geoip_codes""" + query = GeoipCodes.select() try: - cur.execute(sql) - except sqltool.Error as e: + query_res = query.execute() + except Exception as e: funct.out_error(e) else: - return cur.fetchall() + return query_res def insert_port_scanner_settings(server_id, user_group_id, enabled, notify, history): - con, cur = get_cur() - sql = """ insert into port_scanner_settings values('%s', '%s', '%s', '%s', '%s') """ % (server_id, user_group_id, enabled, notify, history) try: - cur.execute(sql) - con.commit() + PortScannerSettings.insert(server_id=server_id, user_group_id=user_group_id, enabled=enabled, + notify=notify, history=history).execute() return True - except sqltool.Error as e: - con.rollback() + except Exception as e: + funct.out_error(e) return False - finally: - cur.close() - con.close() def update_port_scanner_settings(server_id, user_group_id, enabled, notify, history): - con, cur = get_cur() - sql = """ update port_scanner_settings set - user_group_id = '%s', - enabled = '%s', - notify = '%s', - history = '%s' - where server_id = '%s' """ % (user_group_id, enabled, notify, history, server_id) + query = PortScannerSettings.update(user_group_id=user_group_id, enabled=enabled, + notify=notify, history=history).where(PortScannerSettings.server_id == server_id) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + query.execute() + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() def select_port_scanner_settings(user_group): - con, cur = get_cur() - sql_group = '' if user_group != 1: - sql_group = "where user_group_id = '%s'" % str(user_group) - - sql = """select * from port_scanner_settings %s """ % sql_group + query = PortScannerSettings.select().where(PortScannerSettings.user_group_id == str(user_group)) + else: + query = PortScannerSettings.select() try: - cur.execute(sql) - except sqltool.Error as e: + query_res = query.execute() + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - cur.close() - con.close() + return query_res def select_port_scanner_settings_for_service(): - con, cur = get_cur() - sql = """select * from port_scanner_settings """ - + query = PortScannerSettings.select() try: - cur.execute(sql) - except sqltool.Error as e: + query_res = query.execute() + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - cur.close() - con.close() + return query_res def delete_port_scanner_settings(server_id): - con, cur = get_cur() - sql = """ delete from port_scanner_settings where server_id = '%s' """ % server_id - + query = PortScannerSettings.delete().where(PortScannerSettings.server_id == server_id) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: - con.rollback() - cur.close() - con.close() + query.execute() + except Exception as e: + funct.out_error(e) def insert_port_scanner_port(serv, user_group_id, port, service_name): - con, cur = get_cur() - if mysql_enable == '1': - sql = """ insert into port_scanner_ports values('%s', '%s', '%s', '%s', now()) """ % (serv, user_group_id, port, service_name) - else: - sql = """ insert into port_scanner_ports values('%s', '%s', '%s', '%s', datetime('now', 'localtime')) """ % (serv, user_group_id, port, service_name) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + PortScannerPorts.insert(serv=serv, port=port, user_group_id=user_group_id, service_name=service_name, + date=funct.get_data('regular')).execute() + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() def select_ports(serv): - con, cur = get_cur() + cursor = conn.cursor() sql = """select port from port_scanner_ports where serv = '%s' """ % serv try: - cur.execute(sql) - except sqltool.Error as e: + cursor.execute(sql) + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - cur.close() - con.close() + return cursor.fetchall() def select_port_name(serv, port): - con, cur = get_cur() - sql = """select service_name from port_scanner_ports where serv = '%s' and port = '%s' """ % (serv, port) - + query = PortScannerPorts.select(PortScannerPorts.service_name).where( + (PortScannerPorts.serv == serv) & (PortScannerPorts.port == port)) try: - cur.execute(sql) - except sqltool.Error as e: + query_res = query.execute() + except Exception as e: funct.out_error(e) else: - for port in cur.fetchall(): - return port[0] - cur.close() - con.close() + for port in query_res: + return port.service_name def select_count_opened_ports(serv): - con, cur = get_cur() - sql = """ select date, count(port) from port_scanner_ports where serv = '%s' """ % serv + query = PortScannerPorts.select(PortScannerPorts.date, + fn.Count(PortScannerPorts.port).alias('count')).where(PortScannerPorts.serv == serv) try: - cur.execute(sql) - except sqltool.Error as e: - cur.close() - con.close() - return "" + query_res = query.execute() + except Exception as e: + funct.out_error(e) else: port = list() - for ports in cur.fetchall(): - port.append([ports[1], ports[0]]) - cur.close() - con.close() - return port + for ports in query_res: + port.append([ports.count, ports.date]) + return port def delete_ports(serv): - con, cur = get_cur() - sql = """ delete from port_scanner_ports where serv = '%s' """ % serv - + query = PortScannerPorts.delete().where(PortScannerPorts.serv == serv) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + query.execute() + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() def insert_port_scanner_history(serv, port, port_status, service_name): - con, cur = get_cur() - if mysql_enable == '1': - sql = """ insert into port_scanner_history values('%s', '%s', '%s', '%s', now()) """ % (serv, port, port_status, service_name) - else: - sql = """ insert into port_scanner_history values('%s', '%s', '%s', '%s', datetime('now', 'localtime')) """ % (serv, port, port_status, service_name) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + PortScannerHistory.insert(serv=serv, port=port, status=port_status, service_name=service_name, + date=funct.get_data('regular')).execute() + cursor.execute(sql) + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() def delete_alert_history(keep_interval: int, service: str): - con, cur = get_cur() + cursor = conn.cursor() if mysql_enable == '1': sql = """ delete from alerts where date < now() - INTERVAL %s day and service = '%s'""" % (keep_interval, service) else: sql = """ delete from alerts where date < datetime('now', '-%s days') and service = '%s'""" % (keep_interval, service) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + cursor.execute(sql) + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() def delete_portscanner_history(keep_interval: int): - con, cur = get_cur() - + cursor = conn.cursor() if mysql_enable == '1': sql = """ delete from port_scanner_history where date < now() - INTERVAL %s day""" % keep_interval else: sql = """ delete from port_scanner_history where date < datetime('now', '-%s days')""" % keep_interval try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + cursor.execute(sql) + except Exception as e: funct.out_error(e) - con.rollback() - finally: - cur.close() - con.close() def select_port_scanner_history(serv): - con, cur = get_cur() - sql = """select * from port_scanner_history where serv = '%s' """ % serv - + query = PortScannerHistory.select().where(PortScannerHistory.serv == serv) try: - cur.execute(sql) - except sqltool.Error as e: + query_res = query.execute() + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - cur.close() - con.close() + return query_res def add_provider_do(provider_name, provider_group, provider_token): - con, cur = get_cur() - if mysql_enable == '1': - sql = """ insert into providers_creds (name, type, `group`, key, create_date, edit_date) values ('%s', 'do', '%s', '%s', now(), now())""" % (provider_name, provider_group, provider_token) - else: - sql = """ insert into providers_creds (name, type, `group`, key, create_date, edit_date) values ('%s', 'do', '%s', '%s', datetime('now', 'localtime'), datetime('now', 'localtime'))""" % (provider_name, provider_group, provider_token) - try: - cur.execute(sql) + ProvidersCreds.insert(name=provider_name, type='do', group=provider_group, key=provider_token, + create_date=funct.get_data('regular'), edit_date=funct.get_data('regular')).execute() return True - except sqltool.Error as e: + except Exception as e: funct.out_error(e) return False - finally: - cur.close() - con.close() def add_provider_aws(provider_name, provider_group, provider_key, provider_secret): - con, cur = get_cur() - - if mysql_enable == '1': - sql = """ insert into providers_creds (name, type, `group`, key, secret, create_date, edit_date) values ('%s', 'aws', '%s', '%s', '%s', now(), now())""" % (provider_name, provider_group, provider_key, provider_secret) - else: - sql = """ insert into providers_creds (name, type, `group`, key, secret, create_date, edit_date) values ('%s', 'aws', '%s', '%s', '%s', datetime('now', 'localtime'), datetime('now', 'localtime'))""" % (provider_name, provider_group, provider_key, provider_secret) - try: - cur.execute(sql) + ProvidersCreds.insert(name=provider_name, type='aws', group=provider_group, key=provider_key, + secret=provider_secret, create_date=funct.get_data('regular'), + edit_date=funct.get_data('regular')).execute() return True - except sqltool.Error as e: + except Exception as e: funct.out_error(e) return False - finally: - cur.close() - con.close() def add_provider_gcore(provider_name, provider_group, provider_user, provider_pass): - con, cur = get_cur() - - if mysql_enable == '1': - sql = """ insert into providers_creds (name, type, `group`, key, secret, create_date, edit_date) values ('%s', 'gcore', '%s', '%s', '%s', now(), now())""" % (provider_name, provider_group, provider_user, provider_pass) - else: - sql = """ insert into providers_creds (name, type, `group`, key, secret, create_date, edit_date) values ('%s', 'gcore', '%s', '%s', '%s', datetime('now', 'localtime'), datetime('now', 'localtime'))""" % (provider_name, provider_group, provider_user, provider_pass) - try: - cur.execute(sql) + ProvidersCreds.insert(name=provider_name, type='gcore', group=provider_group, key=provider_user, + secret=provider_pass, create_date=funct.get_data('regular'), + edit_date=funct.get_data('regular')).execute() return True - except sqltool.Error as e: + except Exception as e: funct.out_error(e) return False - finally: - cur.close() - con.close() def select_providers(user_group, **kwargs): - con, cur = get_cur() - + cursor = conn.cursor() if user_group == 1: user_group = '' if kwargs.get('key'): @@ -3028,635 +2360,283 @@ def select_providers(user_group, **kwargs): sql = """ select * from providers_creds %s""" % user_group try: - cur.execute(sql) - except sqltool.Error as e: + cursor.execute(sql) + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - finally: - cur.close() - con.close() + return cursor.fetchall() def delete_provider(provider_id): - con, cur = get_cur() - sql = """ delete from providers_creds where id = '%s'""" % provider_id - + query = ProvidersCreds.delete().where(ProvidersCreds.id == provider_id) try: - cur.execute(sql) + query.execute() return True - except sqltool.Error as e: + except Exception as e: funct.out_error(e) return False - finally: - cur.close() - con.close() - + def add_server_aws(region, instance_type, public_ip, floating_ip, volume_size, ssh_key_name, name, os, firewall, provider_id, group_id, status, delete_on_termination, volume_type): - con, cur = get_cur() - if mysql_enable == '1': - sql = """ insert into provisioned_servers - (region, instance_type, public_ip, floating_ip, volume_size, volume_type, ssh_key_name, name, os, firewall, provider_id, group_id, type, status, date, delete_on_termination) - values ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', 'aws', '%s', now()), '%s'""" % ( - region, instance_type, public_ip, floating_ip, volume_size, volume_type, ssh_key_name, name, os, firewall, provider_id, - group_id, status, delete_on_termination) - - else: - sql = """ insert into provisioned_servers - (region, instance_type, public_ip, floating_ip, volume_size, volume_type, ssh_key_name, name, os, firewall, provider_id, group_id, type, status, date, delete_on_termination) - values ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', 'aws', '%s', datetime('now', 'localtime'), '%s')""" % ( - region, instance_type, public_ip, floating_ip, volume_size, volume_type, ssh_key_name, name, os, firewall, provider_id, - group_id, status, delete_on_termination) - try: - cur.execute(sql) + ProvisionedServers.insert(region=region, instance_type=instance_type, public_ip=public_ip, + floating_ip=floating_ip, volume_size=volume_size, volume_type=volume_type, + ssh_key_name=ssh_key_name, name=name, os=os, firewall=firewall, + provider_id=provider_id, group_id=group_id, delete_on_termination=delete_on_termination, + type='aws', status=status, date=funct.get_data('regular')).execute() return True - except sqltool.Error as e: + except Exception as e: funct.out_error(e) return False - finally: - cur.close() - con.close() -def add_server_gcore(project ,region, instance_type, network_type, network_name, volume_size, ssh_key_name, name, os, firewall, provider_id, group_id, status, delete_on_termination, volume_type): - con, cur = get_cur() - if mysql_enable == '1': - sql = """ insert into provisioned_servers - (region, instance_type, public_ip, network_name, volume_size, volume_type, ssh_key_name, name, os, firewall, provider_id, group_id, type, status, date, delete_on_termination, project) - values ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', 'gcore', '%s', now()), '%s', '%s'""" % ( - region, instance_type, network_type, network_name, volume_size, volume_type, ssh_key_name, name, os, firewall, provider_id, - group_id, status, delete_on_termination, project) - - else: - sql = """ insert into provisioned_servers - (region, instance_type, public_ip, network_name, volume_size, volume_type, ssh_key_name, name, os, firewall, provider_id, group_id, type, status, date, delete_on_termination, project) - values ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', 'gcore', '%s', datetime('now', 'localtime'), '%s', '%s')""" % ( - region, instance_type, network_type, network_name, volume_size, volume_type, ssh_key_name, name, os, firewall, provider_id, - group_id, status, delete_on_termination, project) - +def add_server_gcore(project ,region, instance_type, network_type, network_name, volume_size, ssh_key_name, name, os, + firewall, provider_id, group_id, status, delete_on_termination, volume_type): try: - cur.execute(sql) + ProvisionedServers.insert(region=region, instance_type=instance_type, public_ip=network_type, network_name=network_name, + volume_size=volume_size, volume_type=volume_type, ssh_key_name=ssh_key_name, name=name, + os=os, firewall=firewall, provider_id=provider_id, group_id=group_id, type='gcore', + delete_on_termination=delete_on_termination, project=project, status=status, + date=funct.get_data('regular')).execute() return True - except sqltool.Error as e: + except Exception as e: funct.out_error(e) return False - finally: - cur.close() - con.close() -def add_server_do(region, size, privet_net, floating_ip, ssh_ids, ssh_key_name, name, oss, firewall, monitoring, backup, provider_id, group_id, status): - con, cur = get_cur() - if mysql_enable == '1': - sql = """ insert into provisioned_servers - (region, instance_type, private_networking, floating_ip, ssh_ids, ssh_key_name, name, os, firewall, monitoring, backup, provider_id, group_id, type, status, date) - values ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', 'do', '%s', now())""" % ( - region, size, privet_net, floating_ip, ssh_ids, ssh_key_name, name, oss, firewall, monitoring, backup, provider_id, - group_id, status) - - else: - sql = """ insert into provisioned_servers - (region, instance_type, private_networking, floating_ip, ssh_ids, ssh_key_name, name, os, firewall, monitoring, backup, provider_id, group_id, type, status, date) - values ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', 'do', '%s', datetime('now', 'localtime'))""" % ( - region, size, privet_net, floating_ip, ssh_ids, ssh_key_name, name, oss, firewall, monitoring, backup, provider_id, - group_id, status) - +def add_server_do(region, size, privet_net, floating_ip, ssh_ids, ssh_key_name, name, oss, firewall, monitoring, backup, + provider_id, group_id, status): try: - cur.execute(sql) + ProvisionedServers.insert(region=region, instance_type=size, private_networking=privet_net, floating_ip=floating_ip, + ssh_ids=ssh_ids, ssh_key_name=ssh_key_name, name=name, os=oss, firewall=firewall, + monitoring=monitoring, backup=backup, provider_id=provider_id, group_id=group_id, + type='do', status=status, date=funct.get_data('regular')).execute() return True - except sqltool.Error as e: + except Exception as e: funct.out_error(e) return False - finally: - cur.close() - con.close() def select_aws_server(server_id): - con, cur = get_cur() - sql = """ select region, instance_type, public_ip, floating_ip, volume_size, ssh_key_name, name, os, firewall, provider_id, group_id, id, delete_on_termination, volume_type - from provisioned_servers where id = '%s' """ % server_id - + prov_serv = ProvisionedServers.alias() + query = ( + prov_serv.select(prov_serv.region, prov_serv.instance_type, prov_serv.public_ip, prov_serv.floating_ip, + prov_serv.volume_size, prov_serv.ssh_key_name, prov_serv.name, prov_serv.os, + prov_serv.firewall, prov_serv.provider_id, prov_serv.group_id, prov_serv.id, + prov_serv.delete_on_termination, prov_serv.volume_type) + .where(prov_serv.id == server_id)) try: - cur.execute(sql) - except sqltool.Error as e: + query_res = query.execute() + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - finally: - cur.close() - con.close() + return query_res def select_gcore_server(server_id): - con, cur = get_cur() - sql = """ select region, instance_type, public_ip, floating_ip, volume_size, ssh_key_name, name, os, firewall, - provider_id, group_id, id, delete_on_termination, project, network_name, volume_type, name_template - from provisioned_servers where id = '%s' """ % server_id - + prov_serv = ProvisionedServers.alias() + query = ( + prov_serv.select(prov_serv.region, prov_serv.instance_type, prov_serv.public_ip, prov_serv.floating_ip, + prov_serv.volume_size, prov_serv.ssh_key_name, prov_serv.name, prov_serv.os, prov_serv.firewall, + prov_serv.provider_id, prov_serv.group_id, prov_serv.id, prov_serv.delete_on_termination, + prov_serv.project, prov_serv.network_name, prov_serv.volume_type, prov_serv.name_template) + .where(prov_serv.id == server_id)) try: - cur.execute(sql) - except sqltool.Error as e: + query_res = query.execute() + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - finally: - cur.close() - con.close() + return query_res def select_do_server(server_id): - con, cur = get_cur() - sql = """ select region, instance_type, private_networking, floating_ip, ssh_ids, ssh_key_name, name, os, firewall, backup, monitoring, provider_id, group_id, id - from provisioned_servers where id = '%s' """ % server_id - + prov_serv = ProvisionedServers.alias() + query = (prov_serv.select(prov_serv.region, prov_serv.instance_type, prov_serv.private_networking, prov_serv.floating_ip, + prov_serv.ssh_ids, prov_serv.ssh_key_name, prov_serv.name, prov_serv.os, prov_serv.firewall, + prov_serv.backup, prov_serv.monitoring, prov_serv.provider_id, prov_serv.group_id, prov_serv.id) + .where(prov_serv.id == server_id)) try: - cur.execute(sql) - except sqltool.Error as e: + query_res = query.execute() + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - finally: - cur.close() - con.close() + return query_res def update_provisioning_server_status(status, user_group_id, name, provider_id, **kwargs): - con, cur = get_cur() - - sql = """ update provisioned_servers set status = '%s ' where group_id = '%s' - and name = '%s' and provider_id = '%s' """ % (status, user_group_id, name, provider_id) - if kwargs.get('update_ip'): - sql = """ update provisioned_servers set - status = '%s', - IP = '%s' - where group_id = '%s' - and name = '%s' and provider_id = '%s' """ % (status, kwargs.get('update_ip'), user_group_id, name, provider_id) - + query = ProvisionedServers.update(status=status, IP=kwargs.get('update_ip')).where( + (ProvisionedServers.name == name) & + (ProvisionedServers.group_id == user_group_id) & + (ProvisionedServers.provider_id == provider_id)) + else: + query = ProvisionedServers.update(status=status).where( + (ProvisionedServers.name == name) & + (ProvisionedServers.group_id == user_group_id) & + (ProvisionedServers.provider_id == provider_id)) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + query.execute() + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() def update_provisioning_server_gcore_name(name, template_name, user_group_id, provider_id): - con, cur = get_cur() - - sql = """update provisioned_servers set name_template = '%s' - where group_id = '%s' and name = '%s' and provider_id = '%s' """ % (template_name, user_group_id, name, provider_id) - + query = ProvisionedServers.update(name_template=template_name).where( + (ProvisionedServers.name == name) & + (ProvisionedServers.group_id == user_group_id) & + (ProvisionedServers.provider_id == provider_id)) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + query.execute() + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() def update_provisioning_server_error(status, user_group_id, name, provider_id): - con, cur = get_cur() - - sql = """ update provisioned_servers set last_error = '%s ' where group_id = '%s' - and name = '%s' and provider_id = '%s' """ % (status, user_group_id, name, provider_id) - + query = ProvisionedServers.update(last_error=status).where( + (ProvisionedServers.name == name) & + (ProvisionedServers.group_id == user_group_id) & + (ProvisionedServers.provider_id == provider_id)) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + query.execute() + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() def update_server_aws(region, size, public_ip, floating_ip, volume_size, ssh_name, workspace, oss, firewall, provider, group, status, server_id, delete_on_termination, volume_type): - con, cur = get_cur() - sql = """ update provisioned_servers set - region = '%s', - instance_type = '%s', - public_ip = '%s', - floating_ip = '%s', - volume_size = '%s', - ssh_key_name = '%s', - name = '%s', - os = '%s', - firewall = '%s', - provider_id = '%s', - group_id = '%s', - status = '%s', - delete_on_termination = '%s', - volume_type = '%s' - where id = '%s' """ % (region, size, public_ip, floating_ip, volume_size, ssh_name, workspace, oss, firewall, provider, group, status, delete_on_termination, volume_type, server_id) - + query = ProvisionedServers.update(region=region, instance_type=size, public_ip=public_ip, floating_ip=floating_ip, + volume_size=volume_size, ssh_key_name=ssh_name, name=workspace, os=oss, + firewall=firewall, provider_id=provider, group_id=group, status=status, + delete_on_termination=delete_on_termination, + volume_type=volume_type).where(ProvisionedServers.id == server_id) try: - cur.execute(sql) - con.commit() + query.execute() return True - except sqltool.Error as e: + except Exception as e: funct.out_error(e) - con.rollback() return False - finally: - cur.close() - con.close() -def update_server_gcore(region, size, network_type, network_name, volume_size, ssh_name, workspace, oss, firewall, provider, group, status, server_id, delete_on_termination, volume_type, project): - con, cur = get_cur() - sql = """ update provisioned_servers set - region = '%s', - instance_type = '%s', - public_ip = '%s', - network_name = '%s', - volume_size = '%s', - ssh_key_name = '%s', - name = '%s', - os = '%s', - firewall = '%s', - provider_id = '%s', - group_id = '%s', - status = '%s', - delete_on_termination = '%s', - volume_type = '%s', - project = '%s' - where id = '%s' """ % (region, size, network_type, network_name, volume_size, ssh_name, workspace, oss, firewall, provider, group, status, delete_on_termination, volume_type, project, server_id) - +def update_server_gcore(region, size, network_type, network_name, volume_size, ssh_name, workspace, oss, firewall, + provider, group, status, server_id, delete_on_termination, volume_type, project): + query = ProvisionedServers.update(region=region, instance_type=size, public_ip=network_type, network_name=network_name, + volume_size=volume_size, ssh_key_name=ssh_name, name=workspace, os=oss, + firewall=firewall, provider_id=provider, group_id=group, status=status, + delete_on_termination=delete_on_termination, volume_type=volume_type, + project=project).where(ProvisionedServers.id == server_id) try: - cur.execute(sql) - con.commit() + query.execute() return True - except sqltool.Error as e: + except Exception as e: funct.out_error(e) - con.rollback() return False - finally: - cur.close() - con.close() def update_server_do(size, privet_net, floating_ip, ssh_ids, ssh_name, oss, firewall, monitoring, backup, provider, group, status, server_id): - con, cur = get_cur() - sql = """ update provisioned_servers set - instance_type = '%s', - private_networking = '%s', - floating_ip = '%s', - ssh_ids = '%s', - ssh_key_name = '%s', - os = '%s', - firewall = '%s', - monitoring = '%s', - backup = '%s', - provider_id = '%s', - group_id = '%s', - status = '%s' - where id = '%s' """ % ( - size, privet_net, floating_ip, ssh_ids, ssh_name, oss, firewall, monitoring, backup, provider, group, status, server_id) - + query = ProvisionedServers.update(instance_type=size, private_networking=privet_net, + floating_ip=floating_ip, ssh_ids=ssh_ids, ssh_key_name=ssh_name, + os=oss,firewall=firewall, monitoring=monitoring, backup=backup, + provider_id=provider, + group_id=group, status=status).where(ProvisionedServers.id == server_id) try: - cur.execute(sql) - con.commit() + query.execute() return True - except sqltool.Error as e: + except Exception as e: funct.out_error(e) - con.rollback() return False - finally: - cur.close() - con.close() def delete_provisioned_servers(server_id): - con, cur = get_cur() - sql = """ delete from provisioned_servers where id = '%s' """ % server_id + query = ProvisionedServers.delete().where(ProvisionedServers.id == server_id) try: - cur.execute(sql) - con.commit() - except sqltool.Error as e: + query.execute() + except Exception as e: funct.out_error(e) - con.rollback() - cur.close() - con.close() def select_provisioned_servers(**kwargs): - con, cur = get_cur() - sql = """select id, name, provider_id, type, group_id, instance_type, status, date, region, os, IP, last_error, name_template from provisioned_servers""" - - if kwargs.get('all'): - sql = """select * from provisioned_servers where id = '%s' """ % kwargs.get('all') - + prov_serv = ProvisionedServers.alias() if kwargs.get('new'): - sql = """select id, name, provider_id, type, group_id, instance_type, status, date, region, os, IP, last_error from provisioned_servers - where name = '%s' and group_id = '%s' and type = '%s' """ % (kwargs.get('new'), kwargs.get('group'), kwargs.get('type')) + query = ( + prov_serv.select(prov_serv.id, prov_serv.name, prov_serv.provider_id, prov_serv.type, + prov_serv.group_id, prov_serv.instance_type, prov_serv.status, prov_serv.date, + prov_serv.region, prov_serv.os, prov_serv.IP, prov_serv.last_error, prov_serv.name_template) + .where((prov_serv.name == kwargs.get('new')) & + (prov_serv.group_id == kwargs.get('group')) & + (prov_serv.type == kwargs.get('type')))) + else: + query = prov_serv.select(prov_serv.id, prov_serv.name, prov_serv.provider_id, prov_serv.type, prov_serv.group_id, + prov_serv.instance_type, prov_serv.status, prov_serv.date, prov_serv.region, prov_serv.os, + prov_serv.IP, prov_serv.last_error, prov_serv.name_template) try: - cur.execute(sql) - except sqltool.Error as e: + query_res = query.execute() + except Exception as e: funct.out_error(e) else: - return cur.fetchall() - cur.close() - con.close() + return query_res def select_aws_provider(provider_id): - con, cur = get_cur() - sql = """ select key, secret from providers_creds where id = '%s'""" % provider_id - try: - cur.execute(sql) - except sqltool.Error as e: - cur.close() - con.close() + query_res = ProvidersCreds.get(ProvidersCreds.id == provider_id) + except: return "" else: - for p in cur.fetchall(): - aws_key = p[0] - aws_secret = p[1] - cur.close() - con.close() - return aws_key, aws_secret + return query_res.key, query_res.secret def select_gcore_provider(provider_id): - con, cur = get_cur() - sql = """ select key, secret from providers_creds where id = '%s'""" % provider_id - try: - cur.execute(sql) - except sqltool.Error as e: - cur.close() - con.close() + query_res = ProvidersCreds.get(ProvidersCreds.id == provider_id) + except: return "" else: - for p in cur.fetchall(): - user_name = p[0] - password = p[1] - cur.close() - con.close() - return user_name, password + return query_res.key, query_res.secret def select_do_provider(provider_id): - con, cur = get_cur() - sql = """ select key from providers_creds where id = '%s'""" % provider_id - try: - cur.execute(sql) - except sqltool.Error as e: - cur.close() - con.close() + query_res = ProvidersCreds.get(ProvidersCreds.id == provider_id) + except: return "" else: - for p in cur.fetchall(): - token = p[0] - cur.close() - con.close() - return token + return query_res.key def update_do_provider(new_name, new_token, provider_id): - con, cur = get_cur() - - if mysql_enable == '1': - sql = """ update providers_creds set - name = '%s', - key = '%s', - edit_date = now() - where id = '%s' """ % (new_name, new_token, provider_id) - else: - sql = """ update providers_creds set - name = '%s', - key = '%s', - edit_date = datetime('now', 'localtime') - where id = '%s' """ % (new_name, new_token, provider_id) - try: - cur.execute(sql) - con.commit() + ProvidersCreds.update(name=new_name, key=new_token, + edit_date=funct.get_data('regular')).where(ProvidersCreds.id == provider_id).execute() return True - except sqltool.Error as e: + except Exception as e: funct.out_error(e) - con.rollback() return False - finally: - cur.close() - con.close() def update_gcore_provider(new_name, new_user, new_pass, provider_id): - con, cur = get_cur() - - if mysql_enable == '1': - sql = """ update providers_creds set - name = '%s', - key = '%s', - secret = '%s', - edit_date = now() - where id = '%s' """ % (new_name, new_user, new_pass, provider_id) - else: - sql = """ update providers_creds set - name = '%s', - key = '%s', - secret = '%s', - edit_date = datetime('now', 'localtime') - where id = '%s' """ % (new_name, new_user, new_pass, provider_id) - try: - cur.execute(sql) - con.commit() + ProvidersCreds.update(name=new_name, key=new_user, secret=new_pass, + edit_date=funct.get_data('regular')).where(ProvidersCreds.id == provider_id).execute() return True - except sqltool.Error as e: + except Exception as e: funct.out_error(e) - con.rollback() return False - finally: - cur.close() - con.close() def update_aws_provider(new_name, new_key, new_secret, provider_id): - con, cur = get_cur() - - if mysql_enable == '1': - sql = """ update providers_creds set - name = '%s', - key = '%s', - secret = '%s', - edit_date = now() - where id = '%s' """ % (new_name, new_key, new_secret, provider_id) - else: - sql = """ update providers_creds set - name = '%s', - key = '%s', - secret = '%s', - edit_date = datetime('now', 'localtime') - where id = '%s' """ % (new_name, new_key, new_secret, provider_id) - try: - cur.execute(sql) - con.commit() + ProvidersCreds.update(name=new_name, key=new_key, secret=new_secret, + edit_date=funct.get_data('regular')).where(ProvidersCreds.id == provider_id).execute() return True - except sqltool.Error as e: + except Exception as e: funct.out_error(e) - con.rollback() return False - finally: - cur.close() - con.close() def is_serv_protected(serv): - con, cur = get_cur() - sql = """ select protected from servers where ip = '%s'""" % serv - try: - cur.execute(sql) - except sqltool.Error as e: - cur.close() - con.close() + query_res = Server.get(Server.ip == serv) + except: return "" else: - for p in cur.fetchall(): - return True if p[0] else False - cur.close() - con.close() - - -form = funct.form -error_mess = 'error: All fields must be completed' - - -def check_token(): - if not check_token_exists(form.getvalue('token')): - print('Content-type: text/html\n') - print("error: Your token has been expired") - import sys - sys.exit() - - -def show_update_option(option): - from jinja2 import Environment, FileSystemLoader - env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True) - template = env.get_template('/new_option.html') - - print('Content-type: text/html\n') - template = template.render(options=select_options(option=option)) - print(template) - - -def show_update_savedserver(server): - from jinja2 import Environment, FileSystemLoader - env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True) - template = env.get_template('/new_saved_servers.html') - - print('Content-type: text/html\n') - template = template.render(server=select_saved_servers(server=server)) - print(template) - - -if form.getvalue('getoption'): - group = form.getvalue('getoption') - term = form.getvalue('term') - print('Content-type: application/json\n') - check_token() - options = select_options(group=group,term=term) - - a = {} - v = 0 - for i in options: - a[v] = i[0] - v = v + 1 - import json - print(json.dumps(a)) - - -if form.getvalue('newtoption'): - option = form.getvalue('newtoption') - group = form.getvalue('newoptiongroup') - print('Content-type: text/html\n') - check_token() - if option is None or group is None: - print(error_mess) - 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') - check_token() - if option is None or id is None: - print('Content-type: text/html\n') - print(error_mess) - else: - update_options(option, id) - - -if form.getvalue('optiondel') is not None: - print('Content-type: text/html\n') - check_token() - if delete_option(form.getvalue('optiondel')): - print("Ok") - - -if form.getvalue('getsavedserver'): - group = form.getvalue('getsavedserver') - term = form.getvalue('term') - print('Content-type: application/json\n') - check_token() - servers = select_saved_servers(group=group,term=term) - - a = {} - v = 0 - for i in servers: - a[v] = {} - a[v]['value'] = {} - a[v]['desc'] = {} - a[v]['value'] = i[0] - a[v]['desc'] = i[1] - v = v + 1 - import json - print(json.dumps(a)) - - -if form.getvalue('newsavedserver'): - savedserver = form.getvalue('newsavedserver') - description = form.getvalue('newsavedserverdesc') - group = form.getvalue('newsavedservergroup') - print('Content-type: text/html\n') - check_token() - if savedserver is None or group is None: - print(error_mess) - 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') - id = form.getvalue('id') - print('Content-type: text/html\n') - check_token() - if savedserver is None or id is 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") + return True if query_res.protected else False diff --git a/app/templates/add.html b/app/templates/add.html index 2b2a6199..7c188097 100644 --- a/app/templates/add.html +++ b/app/templates/add.html @@ -761,15 +761,15 @@ {% for option in options %} - {% if option.2 == group or group == '1' %} + {% if option.groups == group or group == '1' %} - {{ option.0 }} + {{ option.id }} - + - + {% endif %} @@ -815,16 +815,16 @@ {% for s in saved_servers %} - - {% if s.3 == group or group == '1' %} + + {% if s.groups == group or group == '1' %} - + - + - + {% endif %} @@ -846,7 +846,7 @@ {{ input('new-saved-servers-description', size='50') }} - + diff --git a/app/templates/admin.html b/app/templates/admin.html index 8c0b463b..fa805da1 100644 --- a/app/templates/admin.html +++ b/app/templates/admin.html @@ -35,26 +35,26 @@ {% for group in groups %} - - {% if group.1 == "All" %} - {{ group.1 }} - {{ group.2 }} + + {% if group.name == "All" %} + {{ group.name }} + {{ group.description }} {% else %} {% set id = 'name-' + group.0|string() %} - {{ input(id, value=group.1) }} + {{ input(id, value=group.name) }} - {% set id = 'descript-' + group.0|string() %} - {% if group.2 != "None" %} - {{ input(id, value=group.2, size='60') }} + {% set id = 'descript-' + group.group_id|string() %} + {% if group.description is not none %} + {{ input(id, value=group.description, size='60') }} {% else %} {{ input(id, value='', size='60') }} {% endif %} - + {% endif %} @@ -149,7 +149,7 @@ diff --git a/app/templates/smon.html b/app/templates/smon.html index 8c21385b..f3a48993 100644 --- a/app/templates/smon.html +++ b/app/templates/smon.html @@ -52,7 +52,7 @@ Telegram Group Description - + @@ -119,7 +119,7 @@ diff --git a/app/templates/waf.html b/app/templates/waf.html index 083f81e8..f26a4272 100644 --- a/app/templates/waf.html +++ b/app/templates/waf.html @@ -16,17 +16,17 @@ {% for r in rules %} - - {{r.1}} + + {{r.rule_name}} - {% set id = 'rule_id-' + r.0|string() %} - {% if r.2 == 1 %} + {% set id = 'rule_id-' + r.id|string() %} + {% if r.en == 1 %} {{ checkbox(id, checked='checked') }} {% else %} {{ checkbox(id) }} {% endif %} - {{r.3}} + {{r.desc}} {% endfor %} diff --git a/inc/add.js b/inc/add.js index 1389ea71..36e6b2df 100644 --- a/inc/add.js +++ b/inc/add.js @@ -437,7 +437,7 @@ $( function() { }); $( "#saved-options" ).autocomplete({ dataType: "json", - source: "sql.py?getoption="+$('#group').val()+'&token='+$('#token').val(), + source: "options.py?getoption="+$('#group').val()+'&token='+$('#token').val(), autoFocus: true, minLength: 1, select: function( event, ui ) { @@ -459,7 +459,7 @@ $( function() { $( "#saved-options1" ).autocomplete({ dataType: "json", - source: "sql.py?getoption="+$('#group').val()+'&token='+$('#token').val(), + source: "options.py?getoption="+$('#group').val()+'&token='+$('#token').val(), autoFocus: true, minLength: 1, select: function( event, ui ) { @@ -480,7 +480,7 @@ $( function() { }); $( "#saved-options2" ).autocomplete({ dataType: "json", - source: "sql.py?getoption="+$('#group').val()+'&token='+$('#token').val(), + source: "options.py?getoption="+$('#group').val()+'&token='+$('#token').val(), autoFocus: true, minLength: 1, select: function( event, ui ) { @@ -496,8 +496,7 @@ $( function() { }); $('#add-option-new').click(function() { $.ajax( { - - url: "sql.py", + url: "options.py", data: { newtoption: $('#new-option').val(), newoptiongroup: $('#group').val(), @@ -523,7 +522,7 @@ $( function() { }); $( '[name=servers]' ).autocomplete({ - source: "sql.py?getsavedserver="+$('#group').val()+'&token='+$('#token').val(), + source: "options.py?getsavedserver="+$('#group').val()+'&token='+$('#token').val(), autoFocus: true, minLength: 1, select: function( event, ui ) { @@ -544,7 +543,7 @@ $( function() { $('#add-saved-server-new').click(function() { $.ajax( { - url: "sql.py", + url: "options.py", data: { newsavedserver: $('#new-saved-servers').val(), newsavedservergroup: $('#group').val(), @@ -1312,7 +1311,7 @@ function confirmDeleteOption(id) { function removeOption(id) { $("#option-"+id).css("background-color", "#f2dede"); $.ajax( { - url: "sql.py", + url: "options.py", data: { optiondel: id, token: $('#token').val() @@ -1329,7 +1328,7 @@ function removeOption(id) { function updateOptions(id) { toastr.clear(); $.ajax( { - url: "sql.py", + url: "options.py", data: { updateoption: $('#option-body-'+id).val(), id: id, @@ -1370,7 +1369,7 @@ function confirmDeleteSavedServer(id) { function removeSavedServer(id) { $("#servers-saved-"+id).css("background-color", "#f2dede"); $.ajax( { - url: "sql.py", + url: "options.py", data: { savedserverdel: id, token: $('#token').val() @@ -1378,7 +1377,7 @@ function removeSavedServer(id) { type: "POST", success: function( data ) { data = data.replace(/\s+/g,' '); - if(data == "Ok ") { + if(data.indexOf('Ok') != '-1') { $("#servers-saved-"+id).remove(); } } @@ -1387,7 +1386,7 @@ function removeSavedServer(id) { function updateSavedServer(id) { toastr.clear(); $.ajax( { - url: "sql.py", + url: "options.py", data: { updatesavedserver: $('#servers-ip-'+id).val(), description: $('#servers-desc-'+id).val(), @@ -1816,4 +1815,4 @@ function showUserlists() { } }); } -} \ No newline at end of file +} diff --git a/inc/awesome.css b/inc/awesome.css index 41d0b333..12f5b9c5 100644 --- a/inc/awesome.css +++ b/inc/awesome.css @@ -70,7 +70,7 @@ font-family: "Font Awesome 5 Solid"; content: "\f24d"; } -.add .fa-clone, .plus .fa-plus { +.add .fa-clone, .plus .fa-plus, .plus-after .fa-plus, .minus-after .fa-minus { color: var(--green-color); } .add-proxy::before { @@ -273,11 +273,25 @@ font-family: "Font Awesome 5 Solid"; content: "\f068"; } +.minus-after::after { + display: none; + font-family: "Font Awesome 5 Solid"; + content: "\f068"; +} .plus::before { display: none; font-family: "Font Awesome 5 Solid"; content: "\f067"; } +.plus-after::after { + display: none; + font-family: "Font Awesome 5 Solid"; + content: "\f067"; +} +.plus-after .fa-plus, .minus-after .fa-minus { + padding-left: 10px; + margin-bottom: -2px; +} .row-down::after { display: none; font-family: "Font Awesome 5 Solid"; diff --git a/inc/metrics.js b/inc/metrics.js index e09f047d..a6ae91d6 100644 --- a/inc/metrics.js +++ b/inc/metrics.js @@ -1,4 +1,8 @@ function getHttpChartData(server) { + var hide_http_metrics = localStorage.getItem('hide_http_metrics'); + if (hide_http_metrics == 'disabled') { + return false; + } $.ajax({ url: "options.py", data: { @@ -450,6 +454,30 @@ $( function() { $('#dis_table_metric').css('display', 'inline'); loadMetrics(); }); + + // Check is showing http metrics enabled + var hide_http_metrics = localStorage.getItem('hide_http_metrics'); + if(hide_http_metrics === null) { + $('#hide_http_metrics').prop('checked', false); + $('#hide_http_metrics').checkboxradio('refresh'); + $('#http_metrics_div').show(); + } else if (hide_http_metrics === 'disabled') { + $('#hide_http_metrics').prop('checked', true); + $('#hide_http_metrics').checkboxradio('refresh'); + $('#http_metrics_div').hide(); + } + // Disable or enable showing http metrics + $('#hide_http_metrics').change(function() { + if($(this).is(':checked')) { + localStorage.setItem('hide_http_metrics', 'disabled'); + $('#http_metrics_div').hide(); + showMetrics(); + } else { + localStorage.removeItem('hide_http_metrics'); + $('#http_metrics_div').show(); + showMetrics(); + } + }); }); function removeData() { for (i = 0; i < charts.length; i++) { diff --git a/inc/script.js b/inc/script.js index 8bf729c4..4a3bcad7 100644 --- a/inc/script.js +++ b/inc/script.js @@ -889,9 +889,8 @@ $( function() { showCurrentGroup(this); $( this ).dialog( "close" ); }, - Close: function() { - $( this ).dialog( "close" ); - clearTips(); + Logout: function() { + window.location.replace(window.location.origin+'/app/login.py?logout=logout'); } } }); diff --git a/inc/style.css b/inc/style.css index 78e38830..67376577 100644 --- a/inc/style.css +++ b/inc/style.css @@ -1007,7 +1007,13 @@ label { height: 100px; } .server-desc { - width: 300px; + width: 380px; + } + .add_proxy { + width: 300px; + } + .chart-container { + width: 48.3%; } } @media (max-width: 1280px) {