mirror of
https://github.com/donaldzou/WGDashboard.git
synced 2024-11-22 15:20:09 +01:00
Figuring out with Gunicorn...
This commit is contained in:
parent
327d66bb80
commit
9baefec541
@ -11,23 +11,16 @@ import secrets
|
|||||||
import subprocess
|
import subprocess
|
||||||
import time
|
import time
|
||||||
import re
|
import re
|
||||||
import urllib.parse
|
|
||||||
import urllib.request
|
|
||||||
import urllib.error
|
|
||||||
import uuid
|
import uuid
|
||||||
from dataclasses import dataclass
|
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from json import JSONEncoder
|
from typing import Any
|
||||||
from operator import itemgetter
|
|
||||||
from typing import Dict, Any, Tuple
|
|
||||||
|
|
||||||
import bcrypt
|
import bcrypt
|
||||||
# PIP installed library
|
# PIP installed library
|
||||||
import ifcfg
|
import ifcfg
|
||||||
import psutil
|
import psutil
|
||||||
import pyotp
|
import pyotp
|
||||||
from flask import Flask, request, render_template, redirect, url_for, session, jsonify, g
|
from flask import Flask, request, render_template, session
|
||||||
from flask.json.provider import JSONProvider
|
|
||||||
from json import JSONEncoder
|
from json import JSONEncoder
|
||||||
|
|
||||||
from icmplib import ping, traceroute
|
from icmplib import ping, traceroute
|
||||||
@ -1547,6 +1540,25 @@ def backGroundThread():
|
|||||||
time.sleep(10)
|
time.sleep(10)
|
||||||
|
|
||||||
|
|
||||||
|
def gunicornConfig():
|
||||||
|
_, app_ip = DashboardConfig.GetConfig("Server", "app_ip")
|
||||||
|
_, app_port = DashboardConfig.GetConfig("Server", "app_port")
|
||||||
|
return app_ip, app_port
|
||||||
|
|
||||||
|
|
||||||
|
def runGunicorn():
|
||||||
|
sqldb = sqlite3.connect(os.path.join(CONFIGURATION_PATH, 'db', 'wgdashboard.db'), check_same_thread=False)
|
||||||
|
sqldb.row_factory = sqlite3.Row
|
||||||
|
cursor = sqldb.cursor()
|
||||||
|
_, app_ip = DashboardConfig.GetConfig("Server", "app_ip")
|
||||||
|
_, app_port = DashboardConfig.GetConfig("Server", "app_port")
|
||||||
|
WireguardConfigurations = _getConfigurationList()
|
||||||
|
bgThread = threading.Thread(target=backGroundThread)
|
||||||
|
bgThread.daemon = True
|
||||||
|
bgThread.start()
|
||||||
|
return app
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
sqldb = sqlite3.connect(os.path.join(CONFIGURATION_PATH, 'db', 'wgdashboard.db'), check_same_thread=False)
|
sqldb = sqlite3.connect(os.path.join(CONFIGURATION_PATH, 'db', 'wgdashboard.db'), check_same_thread=False)
|
||||||
sqldb.row_factory = sqlite3.Row
|
sqldb.row_factory = sqlite3.Row
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
import multiprocessing
|
import multiprocessing
|
||||||
import dashboard
|
import dashboard
|
||||||
|
|
||||||
app_host, app_port = dashboard.get_host_bind()
|
app_host, app_port = dashboard.gunicornConfig()
|
||||||
|
|
||||||
worker_class = 'gthread'
|
worker_class = 'gthread'
|
||||||
workers = multiprocessing.cpu_count() * 2 + 1
|
workers = multiprocessing.cpu_count() * 2 + 1
|
||||||
threads = 4
|
threads = 2
|
||||||
bind = f"{app_host}:{app_port}"
|
bind = f"{app_host}:{app_port}"
|
||||||
daemon = True
|
daemon = True
|
||||||
pidfile = './gunicorn.pid'
|
pidfile = './gunicorn.pid'
|
||||||
|
113
src/util.py
113
src/util.py
@ -1,113 +0,0 @@
|
|||||||
import re
|
|
||||||
import subprocess
|
|
||||||
import dashboard
|
|
||||||
"""
|
|
||||||
Helper Functions
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
# Regex Match
|
|
||||||
def regex_match(regex, text):
|
|
||||||
pattern = re.compile(regex)
|
|
||||||
return pattern.search(text) is not None
|
|
||||||
|
|
||||||
|
|
||||||
# Check IP format
|
|
||||||
def check_IP(ip):
|
|
||||||
ip_patterns = (
|
|
||||||
r"((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$)){4}",
|
|
||||||
r"[0-9a-fA-F]{0,4}(:([0-9a-fA-F]{0,4})){1,7}$"
|
|
||||||
)
|
|
||||||
for match_pattern in ip_patterns:
|
|
||||||
match_result = regex_match(match_pattern, ip)
|
|
||||||
if match_result:
|
|
||||||
result = match_result
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
result = None
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
# Clean IP
|
|
||||||
def clean_IP(ip):
|
|
||||||
return ip.replace(' ', '')
|
|
||||||
|
|
||||||
|
|
||||||
# Clean IP with range
|
|
||||||
def clean_IP_with_range(ip):
|
|
||||||
return clean_IP(ip).split(',')
|
|
||||||
|
|
||||||
|
|
||||||
# Check IP with range
|
|
||||||
def check_IP_with_range(ip):
|
|
||||||
ip_patterns = (
|
|
||||||
r"((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|\/)){4}([0-9]{1,2})(,|$)",
|
|
||||||
r"[0-9a-fA-F]{0,4}(:([0-9a-fA-F]{0,4})){1,7}\/([0-9]{1,3})(,|$)"
|
|
||||||
)
|
|
||||||
|
|
||||||
for match_pattern in ip_patterns:
|
|
||||||
match_result = regex_match(match_pattern, ip)
|
|
||||||
if match_result:
|
|
||||||
result = match_result
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
result = None
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
# Check allowed ips list
|
|
||||||
def check_Allowed_IPs(ip):
|
|
||||||
ip = clean_IP_with_range(ip)
|
|
||||||
for i in ip:
|
|
||||||
if not check_IP_with_range(i): return False
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
# Check DNS
|
|
||||||
def check_DNS(dns):
|
|
||||||
dns = dns.replace(' ', '').split(',')
|
|
||||||
status = True
|
|
||||||
for i in dns:
|
|
||||||
if not (check_IP(i) or regex_match("(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z][a-z]{0,61}[a-z]", i)):
|
|
||||||
return False
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
# Check remote endpoint
|
|
||||||
def check_remote_endpoint(address):
|
|
||||||
return (check_IP(address) or regex_match("(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z][a-z]{0,61}[a-z]",
|
|
||||||
address))
|
|
||||||
|
|
||||||
|
|
||||||
def deletePeers(config_name, delete_keys, cur, db):
|
|
||||||
sql_command = []
|
|
||||||
wg_command = ["wg", "set", config_name]
|
|
||||||
for delete_key in delete_keys:
|
|
||||||
if delete_key not in dashboard.get_conf_peer_key(config_name):
|
|
||||||
return "This key does not exist"
|
|
||||||
sql_command.append("DELETE FROM " + config_name + " WHERE id = '" + delete_key + "';")
|
|
||||||
wg_command.append("peer")
|
|
||||||
wg_command.append(delete_key)
|
|
||||||
wg_command.append("remove")
|
|
||||||
try:
|
|
||||||
print("deleting...")
|
|
||||||
remove_wg = subprocess.check_output(" ".join(wg_command),
|
|
||||||
shell=True, stderr=subprocess.STDOUT)
|
|
||||||
save_wg = subprocess.check_output(f"wg-quick save {config_name}", shell=True, stderr=subprocess.STDOUT)
|
|
||||||
cur.executescript(' '.join(sql_command))
|
|
||||||
db.commit()
|
|
||||||
except subprocess.CalledProcessError as exc:
|
|
||||||
return exc.output.strip()
|
|
||||||
return "true"
|
|
||||||
|
|
||||||
def checkJSONAllParameter(required, data):
|
|
||||||
if len(data) == 0:
|
|
||||||
return False
|
|
||||||
for i in required:
|
|
||||||
if i not in list(data.keys()) or len(data[i]) == 0:
|
|
||||||
return False
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
@ -102,7 +102,7 @@ gunicorn_start () {
|
|||||||
export PATH=$PATH:/usr/local/bin:$HOME/.local/bin
|
export PATH=$PATH:/usr/local/bin:$HOME/.local/bin
|
||||||
fi
|
fi
|
||||||
gunicorn --access-logfile log/access_"$d".log \
|
gunicorn --access-logfile log/access_"$d".log \
|
||||||
--error-logfile log/error_"$d".log 'dashboard:run_dashboard()'
|
--error-logfile log/error_"$d".log 'dashboard:runGunicorn()'
|
||||||
printf "| Log files is under log/ |\n"
|
printf "| Log files is under log/ |\n"
|
||||||
printf "%s\n" "$dashes"
|
printf "%s\n" "$dashes"
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user