139 lines
7.2 KiB
Python
139 lines
7.2 KiB
Python
#!/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}")
|