mirror of
https://github.com/WGDashboard/WGDashboard-PRW.git
synced 2026-08-04 06:52:58 +00:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a14147eadc |
+2
-2
@@ -14,7 +14,7 @@ from modules.database.database import database
|
||||
from modules.utilities.utilities import utilities as util
|
||||
from modules.utilities.logger import setup_logger
|
||||
|
||||
from modules.routes.routes_general import routes_general
|
||||
from modules.routes.routes import routes
|
||||
from modules.routes.routes_welcome import routes_welcome
|
||||
|
||||
if __name__ == '__main__':
|
||||
@@ -46,7 +46,7 @@ if __name__ == '__main__':
|
||||
template_folder=os.path.abspath("./static/dist/WGDashboardAdmin"),
|
||||
static_folder=os.path.abspath("./static/dist/WGDashboardAdmin")
|
||||
)
|
||||
app.register_blueprint(routes_general, url_prefix=prefix)
|
||||
app.register_blueprint(routes, url_prefix=prefix)
|
||||
app.register_blueprint(routes_welcome, url_prefix=prefix)
|
||||
|
||||
app.wgd_config = config_data
|
||||
|
||||
@@ -20,7 +20,7 @@ from ..config.config import config
|
||||
from ..utilities.utilities import utilities
|
||||
from ..utilities.statistics import statistics
|
||||
|
||||
routes_general = flask.Blueprint("routes_general", __name__)
|
||||
routes = flask.Blueprint("routes", __name__)
|
||||
|
||||
white_list = [
|
||||
"/",
|
||||
@@ -37,7 +37,7 @@ white_list = [
|
||||
"sharePeer/get",
|
||||
]
|
||||
|
||||
@routes_general.before_request
|
||||
@routes.before_request
|
||||
def authentication_required():
|
||||
if flask.request.method.lower() == "options":
|
||||
return make_resp_obj(True, "", {"status": True}, 200)
|
||||
@@ -70,7 +70,11 @@ def authentication_required():
|
||||
|
||||
return make_resp_obj(False, "Unauthorized access", {}, 401)
|
||||
|
||||
@routes_general.route('/api/authenticate', methods=["POST"])
|
||||
@routes.route('/', methods=["GET"])
|
||||
def index_handler():
|
||||
return flask.render_template("index.html")
|
||||
|
||||
@routes.route('/api/auth', methods=["POST"])
|
||||
def api_authenticate():
|
||||
ok, config_server = config.filter(flask.current_app.wgd_config, 'SERVER')
|
||||
if not ok:
|
||||
@@ -173,18 +177,7 @@ def api_authenticate():
|
||||
else:
|
||||
return make_resp_obj(False, "Sorry, your username or password is incorrect.", {}, 401)
|
||||
|
||||
@routes_general.route('/')
|
||||
def index_handler():
|
||||
return flask.render_template("index.html")
|
||||
|
||||
@routes_general.route('/api/locale')
|
||||
def api_locale_handler():
|
||||
locale_manager = localeman()
|
||||
locale_data = locale_manager.get_language()
|
||||
|
||||
return make_resp_obj(True, "", locale_data, 200)
|
||||
|
||||
@routes_general.route('/api/validateAuthentication')
|
||||
@routes.route('/api/auth/validate', methods=["GET"])
|
||||
def api_validate_auth():
|
||||
ok, config_server = config.filter(flask.current_app.wgd_config, 'SERVER')
|
||||
if not ok:
|
||||
@@ -199,8 +192,36 @@ def api_validate_auth():
|
||||
return make_resp_obj(False, "Invalid authentication", {}, 200)
|
||||
return make_resp_obj()
|
||||
|
||||
@routes_general.route('/api/getDashboardVersion')
|
||||
def api_retrieve_dashboard_version():
|
||||
@routes.route('/api/dashboard/locale', methods=["GET"])
|
||||
def api_retrieve_locale():
|
||||
locale_manager = localeman()
|
||||
locale_data = locale_manager.get_language()
|
||||
|
||||
return make_resp_obj(True, "", locale_data, 200)
|
||||
|
||||
@routes.route('/api/dashboard/locale', methods=["PATCH"])
|
||||
def api_locale_update():
|
||||
req_data = flask.request.get_json()
|
||||
if "lang_id" not in req_data.keys():
|
||||
return make_resp_obj(False, "Please specify a language id: lang_id")
|
||||
|
||||
language_id = req_data.get("lang_id")
|
||||
|
||||
locale_manager = localeman
|
||||
ok = locale_manager.update_language(language_id)
|
||||
if not ok:
|
||||
return make_resp_obj(False, "Failed to update the language id")
|
||||
|
||||
locale_data = locale_manager.get_language()
|
||||
return make_resp_obj(True, "", locale_data)
|
||||
|
||||
@routes.route('/api/dashboard/locale/available', methods=["GET"])
|
||||
def api_retrieve_available_locales():
|
||||
locale_manager = localeman()
|
||||
|
||||
|
||||
@routes.route('/api/dashboard/version', methods=["GET"])
|
||||
def api_retrieve_version():
|
||||
ok, config_server = config.filter(flask.current_app.wgd_config, 'SERVER')
|
||||
if not ok:
|
||||
log.error("failed to filter the config in-memory")
|
||||
@@ -208,8 +229,8 @@ def api_retrieve_dashboard_version():
|
||||
|
||||
return make_resp_obj(True, "", config_server.get("version"))
|
||||
|
||||
@routes_general.route('/api/getDashboardTheme')
|
||||
def api_retrieve_dashboard_theme():
|
||||
@routes.route('/api/dashboard/theme', methods=["GET"])
|
||||
def api_retrieve_theme():
|
||||
ok, config_server = config.filter(flask.current_app.wgd_config, 'SERVER')
|
||||
if not ok:
|
||||
log.error("failed to filter the config in-memory")
|
||||
@@ -217,26 +238,16 @@ def api_retrieve_dashboard_theme():
|
||||
|
||||
return make_resp_obj(True, "", config_server.get("wgdashboard_theme"), 200)
|
||||
|
||||
@routes_general.route('/api/getDashboardUpdate')
|
||||
def api_retrieve_dashboard_update():
|
||||
ok, config_server = config.filter(flask.current_app.wgd_config, 'SERVER')
|
||||
if not ok:
|
||||
log.error("failed to filter the config in-memory")
|
||||
return make_resp_obj(False, "Internal error", {}, 500)
|
||||
@routes.route('/api/dashboard/updatestatus', methods=["GET"])
|
||||
def api_retrieve_update_status():
|
||||
utilities.update_available()
|
||||
return make_resp_obj()
|
||||
|
||||
ok, upgradable, latest_version_link = utilities.update_info(config_server.get("version"))
|
||||
if ok and upgradable:
|
||||
return make_resp_obj(True, 'There is an update available for this instance', data=latest_version_link)
|
||||
elif ok and not upgradable:
|
||||
return make_resp_obj(True, 'This instance is running the latest version')
|
||||
else:
|
||||
return make_resp_obj(False)
|
||||
|
||||
@routes_general.route('/api/getDashboardConfiguration')
|
||||
def api_retrieve_dashboard_config():
|
||||
@routes.route('/api/dashboard/configuration', methods=["GET"])
|
||||
def api_retrieve_config():
|
||||
return make_resp_obj(data=flask.current_app.wgd_config)
|
||||
|
||||
@routes_general.route('/api/isTotpEnabled')
|
||||
@routes.route('/api/dashboard/totp', methods=["GET"])
|
||||
def api_totp_status():
|
||||
ok, config_account = config.filter(flask.current_app.wgd_config, 'ACCOUNT')
|
||||
if not ok:
|
||||
@@ -247,7 +258,7 @@ def api_totp_status():
|
||||
|
||||
return make_resp_obj(True, "", data, 200)
|
||||
|
||||
@routes_general.route('/api/getWireguardConfigurations')
|
||||
@routes.route('/api/dashboard/wireguard/interfaces', methods=["GET"])
|
||||
def api_retrieve_wireguard_configurations():
|
||||
ok, config_server = config.filter(flask.current_app.wgd_config, 'SERVER')
|
||||
if not ok:
|
||||
@@ -266,12 +277,12 @@ def api_retrieve_wireguard_configurations():
|
||||
|
||||
return make_resp_obj(True, 'Wireguard', {}, 200)
|
||||
|
||||
@routes_general.route('/api/systemStatus')
|
||||
@routes.route('/api/dashboard/statistics', methods=["GET"])
|
||||
def api_system_status():
|
||||
status = statistics()
|
||||
return make_resp_obj(True, "", status.to_json(), 200)
|
||||
|
||||
@routes_general.route('/health', methods=["GET"])
|
||||
@routes_general.route('/healthz', methods=["GET"])
|
||||
@routes.route('/health', methods=["GET"])
|
||||
@routes.route('/healthz', methods=["GET"])
|
||||
def health_handler():
|
||||
return make_resp_obj(True, "Health Endpoint", {"status": "ok"}, 200)
|
||||
@@ -4,6 +4,7 @@ import psutil
|
||||
import shutil
|
||||
import subprocess
|
||||
import time
|
||||
import flask
|
||||
|
||||
import psutil, shutil, subprocess, time
|
||||
from flask import current_app
|
||||
@@ -32,19 +33,19 @@ class statistics:
|
||||
|
||||
def retrieve_memory_stats(self):
|
||||
try:
|
||||
virtmem = psutil.virtual_memory()
|
||||
swapmem = psutil.swap_memory()
|
||||
v = psutil.virtual_memory()
|
||||
s = psutil.swap_memory()
|
||||
|
||||
return {
|
||||
"VirtualMemory": {
|
||||
"total": virtmem.total,
|
||||
"available": virtmem.available,
|
||||
"percent": virtmem.percent
|
||||
"total": v.total,
|
||||
"available": v.available,
|
||||
"percent": v.percent
|
||||
},
|
||||
"SwapMemory": {
|
||||
"total": swapmem.total,
|
||||
"available": swapmem.free,
|
||||
"percent": swapmem.percent
|
||||
"total": s.total,
|
||||
"available": s.free,
|
||||
"percent": s.percent
|
||||
}
|
||||
}
|
||||
except Exception as e:
|
||||
@@ -55,14 +56,14 @@ class statistics:
|
||||
disks = []
|
||||
try:
|
||||
for p in psutil.disk_partitions():
|
||||
diskuse = psutil.disk_usage(p.mountpoint)
|
||||
d = psutil.disk_usage(p.mountpoint)
|
||||
|
||||
disks.append({
|
||||
"mountPoint": p.mountpoint,
|
||||
"total": diskuse.total,
|
||||
"used": diskuse.used,
|
||||
"free": diskuse.free,
|
||||
"percent": diskuse.percent
|
||||
"total": d.total,
|
||||
"used": d.used,
|
||||
"free": d.free,
|
||||
"percent": d.percent
|
||||
})
|
||||
except Exception as e:
|
||||
current_app.logger.error("Disk error %s", e)
|
||||
|
||||
@@ -2,11 +2,9 @@
|
||||
|
||||
import logging as log
|
||||
|
||||
import json
|
||||
import os
|
||||
import urllib.request
|
||||
|
||||
from packaging import version
|
||||
import json
|
||||
|
||||
class utilities():
|
||||
@staticmethod
|
||||
@@ -27,22 +25,11 @@ class utilities():
|
||||
return False
|
||||
|
||||
@staticmethod
|
||||
def update_info(running_version: str) -> tuple[bool, bool, str]:
|
||||
def update_available() -> bool:
|
||||
request = urllib.request.urlopen("https://api.github.com/repos/WGDashboard/WGDashboard/releases/latest", timeout=5).read()
|
||||
|
||||
data = json.loads(request)
|
||||
latest_version = data.get('tag_name')
|
||||
latest_version_link = data.get('html_url')
|
||||
|
||||
try:
|
||||
if version.parse(latest_version) > version.parse(running_version):
|
||||
log.info('there is an update available for this instance')
|
||||
return True, True, latest_version_link
|
||||
else:
|
||||
log.info('this instance is running the latest version')
|
||||
return True, False, latest_version_link
|
||||
except:
|
||||
return False, False, ''
|
||||
log.info(data)
|
||||
|
||||
@staticmethod
|
||||
def ProtocolsEnabled() -> list[str]:
|
||||
|
||||
@@ -4,6 +4,5 @@ gunicorn==25.3.0
|
||||
sqlalchemy==2.0.48
|
||||
Flask==3.1.3
|
||||
Werkzeug==3.1.7
|
||||
packaging==26.2
|
||||
pyotp==2.9.0
|
||||
psutil==7.2.2
|
||||
Generated
+66
-55
@@ -9,7 +9,7 @@
|
||||
"version": "4.3.2",
|
||||
"dependencies": {
|
||||
"@volar/language-server": "2.4.28",
|
||||
"@vue/language-server": "3.2.5",
|
||||
"@vue/language-server": "3.2.6",
|
||||
"@vuepic/vue-datepicker": "^12.1.0",
|
||||
"@vueuse/core": "^14.2.1",
|
||||
"@vueuse/shared": "^14.1.0",
|
||||
@@ -1509,9 +1509,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@vue/language-core": {
|
||||
"version": "3.2.5",
|
||||
"resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.2.5.tgz",
|
||||
"integrity": "sha512-d3OIxN/+KRedeM5wQ6H6NIpwS3P5gC9nmyaHgBk+rO6dIsjY+tOh4UlPpiZbAh3YtLdCGEX4M16RmsBqPmJV+g==",
|
||||
"version": "3.2.6",
|
||||
"resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.2.6.tgz",
|
||||
"integrity": "sha512-xYYYX3/aVup576tP/23sEUpgiEnujrENaoNRbaozC1/MA9I6EGFQRJb4xrt/MmUCAGlxTKL2RmT8JLTPqagCkg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@volar/language-core": "2.4.28",
|
||||
@@ -1523,16 +1523,29 @@
|
||||
"picomatch": "^4.0.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@vue/language-plugin-pug": {
|
||||
"version": "3.2.6",
|
||||
"resolved": "https://registry.npmjs.org/@vue/language-plugin-pug/-/language-plugin-pug-3.2.6.tgz",
|
||||
"integrity": "sha512-lYspwAkAYRvydsxm+2bRMfb88amjsCi0TAYpqgZprRT7V5O0vGc4bNbV9Zm4WzSPbcsUMXCSntxyDfj6CSEj3A==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@volar/source-map": "2.4.28",
|
||||
"muggle-string": "^0.4.1",
|
||||
"pug-lexer": "^5.0.1",
|
||||
"pug-parser": "^6.0.0",
|
||||
"vscode-languageserver-textdocument": "^1.0.11"
|
||||
}
|
||||
},
|
||||
"node_modules/@vue/language-server": {
|
||||
"version": "3.2.5",
|
||||
"resolved": "https://registry.npmjs.org/@vue/language-server/-/language-server-3.2.5.tgz",
|
||||
"integrity": "sha512-heOphAHSAOJanlmiIH7gZOmh0DVfNkhTvbk+gOnfnwKQpwA8KqpgYb8On5/WIuLBlJuJavSfVdm75WdZGQM2Rg==",
|
||||
"version": "3.2.6",
|
||||
"resolved": "https://registry.npmjs.org/@vue/language-server/-/language-server-3.2.6.tgz",
|
||||
"integrity": "sha512-quU6+4aa7xEOorwYNoS7FT85K6jVfMiCHew2YtKtVWUxI/UjRePpvewrhXYykiwUZ498U5Lf5V4vJSQsAxI/5w==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@volar/language-server": "2.4.28",
|
||||
"@vue/language-core": "3.2.5",
|
||||
"@vue/language-service": "3.2.5",
|
||||
"@vue/typescript-plugin": "3.2.5",
|
||||
"@vue/language-core": "3.2.6",
|
||||
"@vue/language-service": "3.2.6",
|
||||
"@vue/typescript-plugin": "3.2.6",
|
||||
"vscode-uri": "^3.0.8"
|
||||
},
|
||||
"bin": {
|
||||
@@ -1543,22 +1556,22 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@vue/language-service": {
|
||||
"version": "3.2.5",
|
||||
"resolved": "https://registry.npmjs.org/@vue/language-service/-/language-service-3.2.5.tgz",
|
||||
"integrity": "sha512-Bzu75iKy3Lf3afn/2WswhAmyV/0Yn7ZhKlBnHTtC+qKWXPAMlk75P018yFssOc1EAbPDmKSVNrCZJhjtWEMJPg==",
|
||||
"version": "3.2.6",
|
||||
"resolved": "https://registry.npmjs.org/@vue/language-service/-/language-service-3.2.6.tgz",
|
||||
"integrity": "sha512-UlZrmbodqzHptmeD2D6tNu4Ot63gr1u19j17F6t+3QWmr+xPf6ynShaM1FTuISXibWIDIlByZsDDI72vvAix1g==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@volar/language-service": "2.4.28",
|
||||
"@vue/language-core": "3.2.5",
|
||||
"@vue/language-core": "3.2.6",
|
||||
"@vue/shared": "^3.5.0",
|
||||
"path-browserify": "^1.0.1",
|
||||
"volar-service-css": "0.0.68",
|
||||
"volar-service-emmet": "0.0.68",
|
||||
"volar-service-html": "0.0.68",
|
||||
"volar-service-json": "0.0.68",
|
||||
"volar-service-pug": "0.0.68",
|
||||
"volar-service-pug-beautify": "0.0.68",
|
||||
"volar-service-typescript": "0.0.68",
|
||||
"volar-service-css": "0.0.70",
|
||||
"volar-service-emmet": "0.0.70",
|
||||
"volar-service-html": "0.0.70",
|
||||
"volar-service-json": "0.0.70",
|
||||
"volar-service-pug": "0.0.70",
|
||||
"volar-service-pug-beautify": "0.0.70",
|
||||
"volar-service-typescript": "0.0.70",
|
||||
"vscode-html-languageservice": "^5.2.0",
|
||||
"vscode-uri": "^3.0.8"
|
||||
}
|
||||
@@ -1614,16 +1627,16 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@vue/typescript-plugin": {
|
||||
"version": "3.2.5",
|
||||
"resolved": "https://registry.npmjs.org/@vue/typescript-plugin/-/typescript-plugin-3.2.5.tgz",
|
||||
"integrity": "sha512-efEFD1QEq4tQhLpsVOdPXNiJlhQU4Z4yG52ggvuXK8r+wrLLNMAlrM47lfzk7Mua7HCeVzxXL1r401JcCVVNMw==",
|
||||
"version": "3.2.6",
|
||||
"resolved": "https://registry.npmjs.org/@vue/typescript-plugin/-/typescript-plugin-3.2.6.tgz",
|
||||
"integrity": "sha512-D7DO3/MDrdRAxZSpZU8SFBgk4a3d1yk75eKbDqAg7eM/AgpL7ur+PEuwqnOQiwFGEdtrhuFhiqksUtnzJHiq+w==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@volar/typescript": "2.4.28",
|
||||
"@vue/language-core": "3.2.5",
|
||||
"@vue/language-core": "3.2.6",
|
||||
"@vue/shared": "^3.5.0",
|
||||
"path-browserify": "^1.0.1",
|
||||
"vue-component-meta": "3.2.5"
|
||||
"vue-component-meta": "3.2.6"
|
||||
}
|
||||
},
|
||||
"node_modules/@vuepic/vue-datepicker": {
|
||||
@@ -8256,9 +8269,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/volar-service-css": {
|
||||
"version": "0.0.68",
|
||||
"resolved": "https://registry.npmjs.org/volar-service-css/-/volar-service-css-0.0.68.tgz",
|
||||
"integrity": "sha512-lJSMh6f3QzZ1tdLOZOzovLX0xzAadPhx8EKwraDLPxBndLCYfoTvnNuiFFV8FARrpAlW5C0WkH+TstPaCxr00Q==",
|
||||
"version": "0.0.70",
|
||||
"resolved": "https://registry.npmjs.org/volar-service-css/-/volar-service-css-0.0.70.tgz",
|
||||
"integrity": "sha512-K1qyOvBpE3rzdAv3e4/6Rv5yizrYPy5R/ne3IWCAzLBuMO4qBMV3kSqWzj6KUVe6S0AnN6wxF7cRkiaKfYMYJw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"vscode-css-languageservice": "^6.3.0",
|
||||
@@ -8275,9 +8288,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/volar-service-emmet": {
|
||||
"version": "0.0.68",
|
||||
"resolved": "https://registry.npmjs.org/volar-service-emmet/-/volar-service-emmet-0.0.68.tgz",
|
||||
"integrity": "sha512-nHvixrRQ83EzkQ4G/jFxu9Y4eSsXS/X2cltEPDM+K9qZmIv+Ey1w0tg1+6caSe8TU5Hgw4oSTwNMf/6cQb3LzQ==",
|
||||
"version": "0.0.70",
|
||||
"resolved": "https://registry.npmjs.org/volar-service-emmet/-/volar-service-emmet-0.0.70.tgz",
|
||||
"integrity": "sha512-xi5bC4m/VyE3zy/n2CXspKeDZs3qA41tHLTw275/7dNWM/RqE2z3BnDICQybHIVp/6G1iOQj5c1qXMgQC08TNg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@emmetio/css-parser": "^0.4.1",
|
||||
@@ -8295,9 +8308,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/volar-service-html": {
|
||||
"version": "0.0.68",
|
||||
"resolved": "https://registry.npmjs.org/volar-service-html/-/volar-service-html-0.0.68.tgz",
|
||||
"integrity": "sha512-fru9gsLJxy33xAltXOh4TEdi312HP80hpuKhpYQD4O5hDnkNPEBdcQkpB+gcX0oK0VxRv1UOzcGQEUzWCVHLfA==",
|
||||
"version": "0.0.70",
|
||||
"resolved": "https://registry.npmjs.org/volar-service-html/-/volar-service-html-0.0.70.tgz",
|
||||
"integrity": "sha512-eR6vCgMdmYAo4n+gcT7DSyBQbwB8S3HZZvSagTf0sxNaD4WppMCFfpqWnkrlGStPKMZvMiejRRVmqsX9dYcTvQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"vscode-html-languageservice": "^5.3.0",
|
||||
@@ -8314,9 +8327,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/volar-service-json": {
|
||||
"version": "0.0.68",
|
||||
"resolved": "https://registry.npmjs.org/volar-service-json/-/volar-service-json-0.0.68.tgz",
|
||||
"integrity": "sha512-2d73Khlffwa0o6B6nA4vCyvqqTBuik1aj1i+EPC8a2UdmjMBAvHhGUcUiF3EscGhenv42UxL7f3tWbsITBNGZg==",
|
||||
"version": "0.0.70",
|
||||
"resolved": "https://registry.npmjs.org/volar-service-json/-/volar-service-json-0.0.70.tgz",
|
||||
"integrity": "sha512-cRP18LqxZU3vYsSqm2wQ5de689SlTnQ7iuHj/9SeVvfUncu8S0pmobMPnSZCzqkQzt2tbAvz4UNugVOyqhkQLw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"vscode-json-languageservice": "^5.4.0",
|
||||
@@ -8332,24 +8345,22 @@
|
||||
}
|
||||
},
|
||||
"node_modules/volar-service-pug": {
|
||||
"version": "0.0.68",
|
||||
"resolved": "https://registry.npmjs.org/volar-service-pug/-/volar-service-pug-0.0.68.tgz",
|
||||
"integrity": "sha512-/nZ8fYKDDrV/fqlBoMACWaghFfaIFZMH+qO9YiRsdGbekAvSZqjQAKl1DSJwWqAkabA68Md51mRIdzYzqleipQ==",
|
||||
"version": "0.0.70",
|
||||
"resolved": "https://registry.npmjs.org/volar-service-pug/-/volar-service-pug-0.0.70.tgz",
|
||||
"integrity": "sha512-9P+hgNVfd0BpdwBcErBNLESH4K66BEOZIPwjAb3DBpbTkPfQXa2r6MAvz/nkIh/bOG7/OO3W1eEPJRUEqzUOmw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@volar/language-service": "~2.4.0",
|
||||
"muggle-string": "^0.4.1",
|
||||
"pug-lexer": "^5.0.1",
|
||||
"pug-parser": "^6.0.0",
|
||||
"volar-service-html": "0.0.68",
|
||||
"@vue/language-plugin-pug": "~3.2.2",
|
||||
"volar-service-html": "0.0.70",
|
||||
"vscode-html-languageservice": "^5.3.0",
|
||||
"vscode-languageserver-textdocument": "^1.0.11"
|
||||
}
|
||||
},
|
||||
"node_modules/volar-service-pug-beautify": {
|
||||
"version": "0.0.68",
|
||||
"resolved": "https://registry.npmjs.org/volar-service-pug-beautify/-/volar-service-pug-beautify-0.0.68.tgz",
|
||||
"integrity": "sha512-CUKfD2l9aPam7jeZT0bQtAOfSWm6XmOmTXOfYDMILuK6+5uYiMKbPW2y+OdK2FnHjcAC53GnHpUrIbfxojRoFQ==",
|
||||
"version": "0.0.70",
|
||||
"resolved": "https://registry.npmjs.org/volar-service-pug-beautify/-/volar-service-pug-beautify-0.0.70.tgz",
|
||||
"integrity": "sha512-4Ji7d4srisSSaFs6AfcobtzjAJUVobs3UfyWVhxuJnjcL5DsqbwFv2iwGCvGGTJmZxm1PbPN9r5tkUnPr8ZAOA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@johnsoncodehk/pug-beautify": "^0.2.2"
|
||||
@@ -8364,9 +8375,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/volar-service-typescript": {
|
||||
"version": "0.0.68",
|
||||
"resolved": "https://registry.npmjs.org/volar-service-typescript/-/volar-service-typescript-0.0.68.tgz",
|
||||
"integrity": "sha512-z7B/7CnJ0+TWWFp/gh2r5/QwMObHNDiQiv4C9pTBNI2Wxuwymd4bjEORzrJ/hJ5Yd5+OzeYK+nFCKevoGEEeKw==",
|
||||
"version": "0.0.70",
|
||||
"resolved": "https://registry.npmjs.org/volar-service-typescript/-/volar-service-typescript-0.0.70.tgz",
|
||||
"integrity": "sha512-l46Bx4cokkUedTd74ojO5H/zqHZJ8SUuyZ0IB8JN4jfRqUM3bQFBHoOwlZCyZmOeO0A3RQNkMnFclxO4c++gsg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"path-browserify": "^1.0.1",
|
||||
@@ -8515,13 +8526,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/vue-component-meta": {
|
||||
"version": "3.2.5",
|
||||
"resolved": "https://registry.npmjs.org/vue-component-meta/-/vue-component-meta-3.2.5.tgz",
|
||||
"integrity": "sha512-i7v7S6atD9aZZPouwceJoqcmBzjI4uRIxOj5dDcBPiIhFoY+U5kmy7PnEaAOh/iilJQI7I8F3lKdyZmRdplUpA==",
|
||||
"version": "3.2.6",
|
||||
"resolved": "https://registry.npmjs.org/vue-component-meta/-/vue-component-meta-3.2.6.tgz",
|
||||
"integrity": "sha512-Tlo84lGrHrsE5nJ2lAQDiN+hP9nagKxR3E7kXEidAyYrQzBixaDD/6jwLgDYlmIoyjGCn3BLEC7gGNGObU2Y7w==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@volar/typescript": "2.4.28",
|
||||
"@vue/language-core": "3.2.5",
|
||||
"@vue/language-core": "3.2.6",
|
||||
"path-browserify": "^1.0.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@volar/language-server": "2.4.28",
|
||||
"@vue/language-server": "3.2.5",
|
||||
"@vue/language-server": "3.2.6",
|
||||
"@vuepic/vue-datepicker": "^12.1.0",
|
||||
"@vueuse/core": "^14.2.1",
|
||||
"@vueuse/shared": "^14.1.0",
|
||||
|
||||
@@ -39,6 +39,7 @@ export default {
|
||||
password: "",
|
||||
totp: "",
|
||||
},
|
||||
loginError: false,
|
||||
loginErrorMessage: "",
|
||||
loading: false
|
||||
}
|
||||
@@ -56,39 +57,42 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
GetLocale,
|
||||
async auth() {
|
||||
if (!this.formValid) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.loading = true;
|
||||
|
||||
try {
|
||||
await fetchPost("/api/authenticate", this.data, (response) => {
|
||||
if (response.status) {
|
||||
this.$refs.signInBtn.classList.add("signedIn");
|
||||
|
||||
if (response.message) {
|
||||
this.$router.push("/welcome");
|
||||
} else if (this.store.Redirect) {
|
||||
this.$router.push(this.store.Redirect);
|
||||
} else {
|
||||
this.$router.push("/");
|
||||
async auth(){
|
||||
if (this.formValid){
|
||||
this.loading = true
|
||||
await fetchPost("/api/auth", this.data, (response) => {
|
||||
if (response.status){
|
||||
this.loginError = false;
|
||||
this.$refs["signInBtn"].classList.add("signedIn")
|
||||
if (response.message){
|
||||
this.$router.push('/welcome')
|
||||
}else{
|
||||
if (this.store.Redirect !== undefined){
|
||||
this.$router.push(this.store.Redirect)
|
||||
}else{
|
||||
this.$router.push('/')
|
||||
}
|
||||
}
|
||||
} else {
|
||||
this.store.newMessage("Server", "Failed to authenticate", "danger");
|
||||
}else{
|
||||
this.store.newMessage("Server", response.message, "danger")
|
||||
document.querySelectorAll("input[required]").forEach(x => {
|
||||
x.classList.remove("is-valid")
|
||||
x.classList.add("is-invalid")
|
||||
});
|
||||
this.loading = false
|
||||
}
|
||||
|
||||
})
|
||||
}else{
|
||||
document.querySelectorAll("input[required]").forEach(x => {
|
||||
if (x.value.length === 0){
|
||||
x.classList.remove("is-valid")
|
||||
x.classList.add("is-invalid")
|
||||
}else{
|
||||
x.classList.remove("is-invalid")
|
||||
x.classList.add("is-valid")
|
||||
}
|
||||
});
|
||||
} catch (err) {
|
||||
this.store.newMessage(
|
||||
"Server",
|
||||
"Unable to contact the server.",
|
||||
"danger"
|
||||
);
|
||||
|
||||
console.error(err);
|
||||
} finally {
|
||||
this.loading = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user