From 1e35e778f0e20fbc193a16236cb158539fc40b40 Mon Sep 17 00:00:00 2001 From: vanzhiganov Date: Sun, 9 Feb 2025 02:36:55 +0300 Subject: [PATCH] =?UTF-8?q?#2=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20=D1=81=D1=82=D1=80=D0=B0=D0=BD=D0=B8=D1=86=D1=83=20=D0=B8?= =?UTF-8?q?=D0=BD=D0=B8=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8=20?= =?UTF-8?q?=D1=83=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Administrator/__init__.py | 46 +++++++++++++++++-- .../templates/administrator/setup/index.html | 28 +++++++++++ SWSCloudCore/controllers/servers/server.py | 7 ++- SWSCloudServerAPI/ServerAPI/__init__.py | 38 ++++++++++++--- SWSCloudWeb/application.py | 1 - 5 files changed, 109 insertions(+), 11 deletions(-) create mode 100644 SWSCloudAdministrator/templates/administrator/setup/index.html diff --git a/SWSCloudAdministrator/Administrator/__init__.py b/SWSCloudAdministrator/Administrator/__init__.py index 720b5f9..9aebfb4 100644 --- a/SWSCloudAdministrator/Administrator/__init__.py +++ b/SWSCloudAdministrator/Administrator/__init__.py @@ -1,8 +1,9 @@ # coding: utf-8 from uuid import uuid4 +from hashlib import md5 import validators - +from datetime import datetime from flask import Blueprint, flash, g, jsonify, redirect, render_template, request, session, url_for from SWSCloudAdministrator.Administrator.common import requires_login @@ -12,12 +13,14 @@ from SWSCloudCore.controllers.common import ControllerMessagesEmail from SWSCloudCore.controllers.datacenters.manage import ControllerManageDatacenters from SWSCloudCore.controllers.ips.manage import ControllerManageIPs from SWSCloudCore.controllers.servers.manage import ControllerManageServer +from SWSCloudCore.controllers.settings import ControllerSettings # from SWSCloudCore.controllers.users.manage import ControllerManageUsers # from SWSCloudCore.controllers.users.manage import ControllerManageUsersBalance # from SWSCloudCore.controllers.users.manage import ControllerManageUsersDetails from SWSCloudCore.controllers.plans import ControllerPlans from SWSCloudCore import models + viewAdministrator = Blueprint('administrator', __name__, url_prefix='/administrator') @@ -28,7 +31,7 @@ def login(): @viewAdministrator.route('/login.html', methods=['POST']) def login_post(): - admin_email = request.form.get('email').encode('utf-8') + admin_email = request.form.get('email') admin_password = request.form.get('password').encode('utf-8') # validation entered data @@ -51,7 +54,7 @@ def login_post(): # redirect to rules list return redirect(url_for('administrator.dashboard')) - + # return "" @viewAdministrator.route('/logout.html') def logout(): @@ -408,3 +411,40 @@ def plan_edit(plan_id): return render_template( 'administrator/plans/edit.html', plan_details=models.PlansVMs.select().where(models.PlansVMs.id == plan_id).get()) + + + + +@viewAdministrator.route('/setup', methods=['GET', 'POST']) +# @requires_login +def setup(): + # # check exists plan + # if models.PlansVMs.select().where(models.PlansVMs.id == plan_id).count() == 0: + # return redirect(url_for('administrator.plans_index')) + + if request.method == 'POST': + + admin_id = uuid4() + admin_email = request.form.get('email') + admin_password = md5(request.form.get('password').encode()).hexdigest() + + # models.database.connect() + + if models.Admins.select().where(models.Admins.email == admin_email).count() == 0: + models.Admins.create(id=admin_id, email=admin_email, password=admin_password, status=1) + + cs = ControllerSettings() + cs.create('_setup_finish', str(datetime.now())) + + return redirect(url_for('administrator.login')) + + _setup_finish = models.Settings.select().where( + models.Settings.key == "_setup_finish" + ).count() + + if _setup_finish != 0: + return redirect(url_for('login')) + + return render_template( + 'administrator/setup/index.html' + ) diff --git a/SWSCloudAdministrator/templates/administrator/setup/index.html b/SWSCloudAdministrator/templates/administrator/setup/index.html new file mode 100644 index 0000000..668224a --- /dev/null +++ b/SWSCloudAdministrator/templates/administrator/setup/index.html @@ -0,0 +1,28 @@ +{% extends 'administrator/_layout.noauth.html' %} + +{% block content %} +
+
+

Setup

+

Create an administrator

+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+
    + {% for message in messages %} +
  • {{ message }}
  • + {% endfor %} +
+
+ {% endif %} + {% endwith %} +
+ + + + + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/SWSCloudCore/controllers/servers/server.py b/SWSCloudCore/controllers/servers/server.py index afffebf..3dbd1c0 100644 --- a/SWSCloudCore/controllers/servers/server.py +++ b/SWSCloudCore/controllers/servers/server.py @@ -3,9 +3,14 @@ import datetime from SWSCloudCore import models + class ControllerServerServers: def get_secret(self, server_id): - return models.Servers.select(models.Servers.secret).where(models.Servers.id == server_id).get().secret + return models.Servers.select( + models.Servers.secret + ).where( + models.Servers.id == server_id + ).get().secret def exists(self, server_id): try: diff --git a/SWSCloudServerAPI/ServerAPI/__init__.py b/SWSCloudServerAPI/ServerAPI/__init__.py index 06342b9..d3b9d30 100644 --- a/SWSCloudServerAPI/ServerAPI/__init__.py +++ b/SWSCloudServerAPI/ServerAPI/__init__.py @@ -1,6 +1,9 @@ """Stack Web Services LLC.""" import json +import logging + + from flask import Blueprint, jsonify, request, g from flask_httpauth import HTTPBasicAuth from SWSCloudCore.controllers.servers.server import ControllerServerStatistics @@ -8,30 +11,52 @@ from SWSCloudCore.controllers.servers.server import ControllerServerServers from SWSCloudCore.controllers.tasks.server import ControllerTasksServer from SWSCloudCore.controllers.containers.server import ControllerContainersServer + +FORMAT = '%(asctime)-15s NODEAGENT %(levelname)s: %(message)s' + +logging.basicConfig(format=FORMAT) + +logger = logging.getLogger('tcpserver') + api_auth = HTTPBasicAuth() viewServerAPI = Blueprint('ServerAPI', __name__, url_prefix='/server_api') @api_auth.get_password def get_pw(server_id): + logger.error(f"{server_id}") if ControllerServerServers().exists(server_id): g.server_id = server_id - return ControllerServerServers().get_secret(g.server_id) + return ControllerServerServers().get_secret(server_id) return None @api_auth.error_handler def auth_error(): - return jsonify(status='error', description='Unauthorized'), 403 + description = 'Unauthorized' + return jsonify( + status='error', + description=description + ), 403 @viewServerAPI.route('/ping') -@api_auth.login_required +# @api_auth.login_required def ping(): """ Тест. Проверка соединения и авторизации """ - return jsonify(ping='pong', server_id=g.server_id), 200 + + hhh = dict() + for i in request.headers: + hhh[i[0]] = str(i[1]) + + + return jsonify( + ping='pong', + cnt='1', + h=hhh + ), 200 # TASKS @@ -65,9 +90,10 @@ def task_item(): """ sapi = ControllerTasksServer(g.server_id) - # Если задач нет, то надо вернуть ответ с кодом 204 (no content) + # Если задач нет, + # то надо вернуть ответ с кодом 204 (no content) if sapi.count() == 0: - return '', 204 + return jsonify(status='nothing'), 204 task = sapi.queue_item_oldest_get(status=0) diff --git a/SWSCloudWeb/application.py b/SWSCloudWeb/application.py index b7b05cc..c846b0b 100644 --- a/SWSCloudWeb/application.py +++ b/SWSCloudWeb/application.py @@ -72,7 +72,6 @@ app.register_blueprint(viewServerAPI) # /administrator app.register_blueprint(viewAdministrator) - @app.errorhandler(404) def page_not_found(e): return render_template('errors/404.html'), 404