Repository navigation
Expand file tree
/
Copy path__init__.py
More file actions
125 lines (101 loc) · 3.88 KB
/
Copy path__init__.py
File metadata and controls
125 lines (101 loc) · 3.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
from flask import Flask, jsonify, request, render_template, redirect, session, Response
import config
import sys, os, json
import log
import traceback
from basic_auth import requires_auth
from Mvc.Errors import NotFound, Warning
from Mvc.Auth import AuthManager
from Mvc.User import UserManager
from Mvc.Sql import Connect
from Controllers import controllers
from datetime import datetime
app = Flask(__name__, template_folder="Views")
@app.route('/auth')
@requires_auth
def authorization():
return render_template('secret_page.html')
@app.route('/api/', methods=['POST'])
def api():
controller_name = ""
method = ""
init_session()
try:
if request.is_json:
body = request.get_json()
params = body["params"]
else:
body = request.form
params = body["params"]
params = json.loads(params)
controller_name, method = body["method"].split(".")
controller = get_controller_class(controller_name)
if not controller:
raise Warning("method not found controller")
if not hasattr(controller, "api"):
raise Warning("method not found api")
api = getattr(controller, "api")
log.LogMsg("вызов api метода: " + controller_name + "." + method)
result = request_method(api(), method, **params)
Connect.CloseConnect()
log.LogMsg("конец вызова api метода: " + controller_name + "." + method)
return result if type(result) is Response else jsonify(result = result)
except Exception as ex:
Connect.CloseConnect()
log.LogMsg("Ошибка вызова api метода: " + controller_name + "." + method + ": " + str(ex))
log.ErrorMsg("Ошибка вызова api метода: " + controller_name + "." + method + ": " + str(traceback.format_exc()))
error = str(traceback.format_exc()) if config.debug else str(ex)
return jsonify(error = error), 500
return render_template('secret_page.html')
@app.route('/', defaults={'path': ''}, methods=['GET'])
@app.route('/<path:path>', methods=['GET'])
def index(path):
init_session()
result = None
try:
if not path:
path = "Home"
rout = path.split("/")
controller = get_controller_class(rout[0])
if not controller:
raise NotFound("404 - no controller")
log.LogMsg("обрашение к странице: " + path)
method = rout[1].lower() if len(rout) > 1 and rout[1] else "index"
result = request_method(controller(), method.lower())
log.LogMsg("конец обращения к странице: " + path)
if result == False:
raise NotFound("404 - no method")
except NotFound as ex:
result = render_template('404.html', message=str(ex))
except Exception as ex:
Connect.CloseConnect()
raise ex
Connect.CloseConnect()
return result
def get_controller_class(controller):
try:
controller = upper(controller.lower()) + 'Controller'
return controllers.get(controller)
except ModuleNotFoundError as ex:
raise NotFound()
def request_method(controller, method, **data):
try:
return getattr(controller, method)(**data)
except AttributeError as ex:
raise NotFound("error: " + str(controller)+ " " + method + " " + str(data) + " - " + str(ex))
def upper(value):
return value[0].upper() + value[1:]
def raise_error(ex):
if config.debug:
raise ex
def init_session():
if AuthManager().IsAuth():
sid = request.cookies.get("sid")
user_id = sid.split("-")[0]
user_id = int(user_id, 16)
session['user_id'] = user_id
else:
session.pop('user_id', '')
app.secret_key = os.urandom(16)
if __name__ == '__main__':
app.run(debug=config.debug)