From 04689797f723a5c8d1b9fe8869845b8a102edd91 Mon Sep 17 00:00:00 2001 From: Kobe Date: Wed, 11 Jun 2025 10:29:58 +0200 Subject: [PATCH] add connections --- NGINX_swagger.json | 274 +++++++ app.py | 3 + routes/__pycache__/main.cpython-313.pyc | Bin 81995 -> 88744 bytes routes/admin_api.py | 334 +++++++- routes/main.py | 179 ++++- .../components/connection_modals.html | 89 +++ templates/settings/settings.html | 15 + templates/settings/tabs/connections.html | 732 ++++++++++++++++++ 8 files changed, 1622 insertions(+), 4 deletions(-) create mode 100644 NGINX_swagger.json create mode 100644 templates/settings/components/connection_modals.html create mode 100644 templates/settings/tabs/connections.html diff --git a/NGINX_swagger.json b/NGINX_swagger.json new file mode 100644 index 0000000..4a502b4 --- /dev/null +++ b/NGINX_swagger.json @@ -0,0 +1,274 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "Nginx Proxy Manager API", + "version": "2.x.x" + }, + "servers": [ + { + "url": "http://127.0.0.1:81/api" + } + ], + "components": { + "securitySchemes": { + "bearerAuth": { + "type": "http", + "scheme": "bearer", + "bearerFormat": "JWT" + } + } + }, + "paths": { + "/": { + "get": { + "$ref": "./paths/get.json" + } + }, + "/audit-log": { + "get": { + "$ref": "./paths/audit-log/get.json" + } + }, + "/nginx/access-lists": { + "get": { + "$ref": "./paths/nginx/access-lists/get.json" + }, + "post": { + "$ref": "./paths/nginx/access-lists/post.json" + } + }, + "/nginx/access-lists/{listID}": { + "get": { + "$ref": "./paths/nginx/access-lists/listID/get.json" + }, + "put": { + "$ref": "./paths/nginx/access-lists/listID/put.json" + }, + "delete": { + "$ref": "./paths/nginx/access-lists/listID/delete.json" + } + }, + "/nginx/certificates": { + "get": { + "$ref": "./paths/nginx/certificates/get.json" + }, + "post": { + "$ref": "./paths/nginx/certificates/post.json" + } + }, + "/nginx/certificates/validate": { + "post": { + "$ref": "./paths/nginx/certificates/validate/post.json" + } + }, + "/nginx/certificates/test-http": { + "get": { + "$ref": "./paths/nginx/certificates/test-http/get.json" + } + }, + "/nginx/certificates/{certID}": { + "get": { + "$ref": "./paths/nginx/certificates/certID/get.json" + }, + "delete": { + "$ref": "./paths/nginx/certificates/certID/delete.json" + } + }, + "/nginx/certificates/{certID}/download": { + "get": { + "$ref": "./paths/nginx/certificates/certID/download/get.json" + } + }, + "/nginx/certificates/{certID}/renew": { + "post": { + "$ref": "./paths/nginx/certificates/certID/renew/post.json" + } + }, + "/nginx/certificates/{certID}/upload": { + "post": { + "$ref": "./paths/nginx/certificates/certID/upload/post.json" + } + }, + "/nginx/proxy-hosts": { + "get": { + "$ref": "./paths/nginx/proxy-hosts/get.json" + }, + "post": { + "$ref": "./paths/nginx/proxy-hosts/post.json" + } + }, + "/nginx/proxy-hosts/{hostID}": { + "get": { + "$ref": "./paths/nginx/proxy-hosts/hostID/get.json" + }, + "put": { + "$ref": "./paths/nginx/proxy-hosts/hostID/put.json" + }, + "delete": { + "$ref": "./paths/nginx/proxy-hosts/hostID/delete.json" + } + }, + "/nginx/proxy-hosts/{hostID}/enable": { + "post": { + "$ref": "./paths/nginx/proxy-hosts/hostID/enable/post.json" + } + }, + "/nginx/proxy-hosts/{hostID}/disable": { + "post": { + "$ref": "./paths/nginx/proxy-hosts/hostID/disable/post.json" + } + }, + "/nginx/redirection-hosts": { + "get": { + "$ref": "./paths/nginx/redirection-hosts/get.json" + }, + "post": { + "$ref": "./paths/nginx/redirection-hosts/post.json" + } + }, + "/nginx/redirection-hosts/{hostID}": { + "get": { + "$ref": "./paths/nginx/redirection-hosts/hostID/get.json" + }, + "put": { + "$ref": "./paths/nginx/redirection-hosts/hostID/put.json" + }, + "delete": { + "$ref": "./paths/nginx/redirection-hosts/hostID/delete.json" + } + }, + "/nginx/redirection-hosts/{hostID}/enable": { + "post": { + "$ref": "./paths/nginx/redirection-hosts/hostID/enable/post.json" + } + }, + "/nginx/redirection-hosts/{hostID}/disable": { + "post": { + "$ref": "./paths/nginx/redirection-hosts/hostID/disable/post.json" + } + }, + "/nginx/dead-hosts": { + "get": { + "$ref": "./paths/nginx/dead-hosts/get.json" + }, + "post": { + "$ref": "./paths/nginx/dead-hosts/post.json" + } + }, + "/nginx/dead-hosts/{hostID}": { + "get": { + "$ref": "./paths/nginx/dead-hosts/hostID/get.json" + }, + "put": { + "$ref": "./paths/nginx/dead-hosts/hostID/put.json" + }, + "delete": { + "$ref": "./paths/nginx/dead-hosts/hostID/delete.json" + } + }, + "/nginx/dead-hosts/{hostID}/enable": { + "post": { + "$ref": "./paths/nginx/dead-hosts/hostID/enable/post.json" + } + }, + "/nginx/dead-hosts/{hostID}/disable": { + "post": { + "$ref": "./paths/nginx/dead-hosts/hostID/disable/post.json" + } + }, + "/nginx/streams": { + "get": { + "$ref": "./paths/nginx/streams/get.json" + }, + "post": { + "$ref": "./paths/nginx/streams/post.json" + } + }, + "/nginx/streams/{streamID}": { + "get": { + "$ref": "./paths/nginx/streams/streamID/get.json" + }, + "put": { + "$ref": "./paths/nginx/streams/streamID/put.json" + }, + "delete": { + "$ref": "./paths/nginx/streams/streamID/delete.json" + } + }, + "/nginx/streams/{streamID}/enable": { + "post": { + "$ref": "./paths/nginx/streams/streamID/enable/post.json" + } + }, + "/nginx/streams/{streamID}/disable": { + "post": { + "$ref": "./paths/nginx/streams/streamID/disable/post.json" + } + }, + "/reports/hosts": { + "get": { + "$ref": "./paths/reports/hosts/get.json" + } + }, + "/schema": { + "get": { + "$ref": "./paths/schema/get.json" + } + }, + "/settings": { + "get": { + "$ref": "./paths/settings/get.json" + } + }, + "/settings/{settingID}": { + "get": { + "$ref": "./paths/settings/settingID/get.json" + }, + "put": { + "$ref": "./paths/settings/settingID/put.json" + } + }, + "/tokens": { + "get": { + "$ref": "./paths/tokens/get.json" + }, + "post": { + "$ref": "./paths/tokens/post.json" + } + }, + "/users": { + "get": { + "$ref": "./paths/users/get.json" + }, + "post": { + "$ref": "./paths/users/post.json" + } + }, + "/users/{userID}": { + "get": { + "$ref": "./paths/users/userID/get.json" + }, + "put": { + "$ref": "./paths/users/userID/put.json" + }, + "delete": { + "$ref": "./paths/users/userID/delete.json" + } + }, + "/users/{userID}/auth": { + "put": { + "$ref": "./paths/users/userID/auth/put.json" + } + }, + "/users/{userID}/permissions": { + "put": { + "$ref": "./paths/users/userID/permissions/put.json" + } + }, + "/users/{userID}/login": { + "post": { + "$ref": "./paths/users/userID/login/post.json" + } + } + } +} diff --git a/app.py b/app.py index 7be290c..530ca12 100644 --- a/app.py +++ b/app.py @@ -20,6 +20,9 @@ from utils.asset_utils import get_asset_version # Load environment variables load_dotenv() +print("Environment variables after loading .env:") +print(f"MASTER: {os.getenv('MASTER')}") +print(f"ISMASTER: {os.getenv('ISMASTER')}") def create_app(): app = Flask(__name__) diff --git a/routes/__pycache__/main.cpython-313.pyc b/routes/__pycache__/main.cpython-313.pyc index 5a1ec7d3803d581f1de9cabbe2836c611aa4d2e9..d1a308d73261b6cb23e4df821b4cc648f682994d 100644 GIT binary patch delta 14552 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 V6?A6>edPQyGNAM3kv_t;{oe~r#KQmp delta 9336 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 lt<+VgJel}%H5)l + + + + + + + + + + +{% endmacro %} \ No newline at end of file diff --git a/templates/settings/settings.html b/templates/settings/settings.html index 754ebc7..939a914 100644 --- a/templates/settings/settings.html +++ b/templates/settings/settings.html @@ -8,6 +8,7 @@ {% from "settings/tabs/email_templates.html" import email_templates_tab %} {% from "settings/tabs/mails.html" import mails_tab %} {% from "settings/tabs/smtp_settings.html" import smtp_settings_tab %} +{% from "settings/tabs/connections.html" import connections_tab %} {% from "settings/components/reset_colors_modal.html" import reset_colors_modal %} {% block title %}Settings - DocuPulse{% endblock %} @@ -75,6 +76,13 @@ SMTP + {% if is_master %} + + {% endif %}
@@ -122,6 +130,13 @@
{{ smtp_settings_tab(smtp_settings, csrf_token) }}
+ + {% if is_master %} + +
+ {{ connections_tab(portainer_settings, nginx_settings, site_settings, git_settings) }} +
+ {% endif %}
diff --git a/templates/settings/tabs/connections.html b/templates/settings/tabs/connections.html new file mode 100644 index 0000000..179afe3 --- /dev/null +++ b/templates/settings/tabs/connections.html @@ -0,0 +1,732 @@ +{% from "settings/components/connection_modals.html" import connection_modals %} + +{% macro connections_tab(portainer_settings, nginx_settings, site_settings, git_settings) %} +
+
+ +
+
+
+
+ Portainer Connection +
+ +
+
+
+
+ + +
The URL of your Portainer instance
+
+
+ + +
You can generate this in Portainer under Settings > API Keys
+
+
+ +
+
+
+
+
+ + +
+
+
+
+ NGINX Proxy Manager Connection +
+ +
+
+
+
+ + +
The URL of your NGINX Proxy Manager instance
+
+
+ + +
+
+ + +
+
+ +
+
+
+
+
+ + +
+
+
+
+ GitLab Connection +
+ +
+
+
+
+ + +
The URL of your GitLab server (use https://gitlab.com for GitLab.com)
+
+
+ + +
+
+ + +
You can generate this in your GitLab user settings > Access Tokens
+
+
+ +
+ + +
+
Select the repository to connect to
+
+
+ +
+
+
+
+
+ + +
+
+
+
+ Gitea Connection +
+ +
+
+
+
+ + +
The URL of your Gitea server
+
+
+ + +
+
+ + +
Required for token generation if you don't have an existing token
+
+
+ + +
Required if you have two-factor authentication enabled
+
+
+ +
+ + +
+
You can generate a new token or use an existing one
+
+
+ +
+ + +
+
Select the repository to connect to
+
+
+ +
+
+
+
+
+
+ + + +
+ +{{ connection_modals() }} + + +{% endmacro %} \ No newline at end of file