#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Дата оптимизации: 09.06.2022 Дата тестирования: 14.06.2022 """ import os # Активация FLASK from app import app # чтение из config.py from flask import render_template # использование шаблонов # from flask import request # получение данных Cookie, GET и POST from flask import jsonify # ответ в формате JSON # from flask import redirect # Код страницы и перенаравление # import json import sys import configparser import importlib.util # Подключаем свои библиотеки sys.path.append("app/source") import API_Common as APIC import API_App # import API_MSSQL # import API_App ############################################################################### # Проверка сессии ############################################################################### def CheckSession(SessionID): if SessionID is not None: if (SessionID != ""): CurDataSession: APIC.DataSession = APIC.CheckSession(SessionID, True) if (CurDataSession.status == False): return False CurSessionID = CurDataSession.sessionid # Если нет в базе такой сессии, то заного авторизуемся if (CurSessionID == ""): return False return True else: return False else: return False ############################################################################### # POST ############################################################################### def API(SessionID, CurPage): config = configparser.ConfigParser() config.read("app/pages/" + CurPage + "/config.ini") VarArray = {} if (CheckSession(SessionID) == False) and config["ACCESS"]["NeedAuth"] == 1: return "Требуется повторная авторизация. Нажмите F5.", 401 if (CurPage != ""): spec = importlib.util.spec_from_file_location("module.name", f"app/pages/{CurPage}/source.py") CurPage = importlib.util.module_from_spec(spec) spec.loader.exec_module(CurPage) return CurPage.API(SessionID) VarArray.update({'status': 'Неизвестная операция'}) return jsonify(VarArray) ############################################################################### # MAIN ############################################################################### def Main(SessionID, CurPage): # Объявление переменных Var = {"Title": "", "ProgName": app.config['PROGNAME']} Modal_Vars = {} S = APIC.CheckSession(SessionID, False) # Получаем уровень доступа if (S.userid not in ("-1", "")): UserData: API_MSSQL.Result = API_App.GetDataUserByID(APIC.ReadDataSession(SessionID, "userid")) # Создаем страничку try: if (CurPage is None): return render_template('Pages.htm', head=APIC.UserHead(Var) # Подключаем раздел head со скриптами и css , UserHeader=APIC.UserHeader(SessionID, Var) # Рисуем шапку на странице , Modals=APIC.Modals(Modal_Vars) # Модальные окна , ThreadVars_message=APIC.ThreadVars_Message() # , version=app.config['VERSION'] # , R_category="{{R.category}}" # , R_name="{{R.name}}" # , R_description="{{R.description}}" # , R_autor="{{R.autor}}" # , R_tags="{{R.tags}}" # , CurTag="{{CurTag}}" # ) # Если вошли в режиме Установщика то проверку не проверяем if (S.userid != "-1"): # Проверка прав на модуль if (os.path.isfile("app/pages/" + CurPage + "/config.ini") == False): return render_template('error_403.htm', head=APIC.UserHead(Var) # Подключаем раздел head со скриптами и css , UserHeader=APIC.UserErrorHeader(SessionID, Var) # Рисуем шапку на странице , ThreadVars_message=f"Не удалось получить настройки для страницы {CurPage}. Похоже, эта страница на стадии разработки") config = configparser.ConfigParser() config.read("app/pages/" + CurPage + "/config.ini") if (config["ACCESS"]["UserInterFace"] not in ("0", "")): if ( str(UserData.GetRecord(0, "UserInterFace")) not in config["ACCESS"]["UserInterFace"].split(',') # or AccessOMS < int(config["ACCESS"]["AccessOMS"]) or int(UserData.GetRecord(0, "AccessOMS")) < int(config["ACCESS"]["AccessOMS"]) or int(UserData.GetRecord(0, "AccessLPU")) < int(config["ACCESS"]["AccessLPU"]) or int(UserData.GetRecord(0, "AccessUOG")) < int(config["ACCESS"]["AccessUOG"]) or int(UserData.GetRecord(0, "AccessENP")) < int(config["ACCESS"]["AccessENP"]) or int(UserData.GetRecord(0, "AccessSMS")) < int(config["ACCESS"]["AccessSMS"]) or int(UserData.GetRecord(0, "AccessPostCard")) < int(config["ACCESS"]["AccessPostCard"]) or int(UserData.GetRecord(0, "AccessPhone")) < int(config["ACCESS"]["AccessPhone"]) or int(UserData.GetRecord(0, "AccessDial")) < int(config["ACCESS"]["AccessDial"]) or int(UserData.GetRecord(0, "AccessAnkets")) < int(config["ACCESS"]["AccessAnkets"]) ): return render_template('error_403.htm', head=APIC.UserHead(Var) # Подключаем раздел head со скриптами и css , UserHeader=APIC.UserErrorHeader(SessionID, Var) # Рисуем шапку на странице , ThreadVars_message="Извините, но вам не хватает доступа к этой странице.") import importlib.util spec = importlib.util.spec_from_file_location("module.name", "app/pages/" + CurPage + "/source.py") CurPage = importlib.util.module_from_spec(spec) spec.loader.exec_module(CurPage) return CurPage.Main(SessionID) except Exception as E: return render_template('error_500.htm', head=APIC.UserHead(Var) # Подключаем раздел head со скриптами и css , UserHeader=APIC.UserHeader(SessionID, Var) # Рисуем шапку на странице , ThreadVars_message=f"При открытии страницы {CurPage} произошла ошибка: {E}")