-
Notifications
You must be signed in to change notification settings - Fork 0
/
general.py
94 lines (73 loc) · 2.42 KB
/
general.py
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
from flask import g, jsonify, current_app
from db import SQLHandler
import html
'''
Flaskのデフォルトですることなどの登録用
- リクエストを受け取ったときの処理
- リクエストを返すときの処理
- アプリを閉じるときの処理
- エラーハンドリング
- index
'''
def validateRequestData(text, lengthMin=1, lengthMax=500, escape=True):
'''投稿されるデータを検証して弾く'''
ng_words = [
"{",
"}",
"[",
"]",
"request",
"config",
"<script>",
"</script>",
"class",
"import",
"__globals__",
"__getitem__",
"self"
]
for ng in ng_words:
text = text.replace(ng,"")
text = text[:lengthMax]
if text == "" or len(text) < lengthMin:
return ""
if escape:
return html.escape(text)
return text
# リクエストが来るたびにデータベースにつなぐ
def app_before_request():
g.db = SQLHandler()
if not hasattr(g, 'validate'):
g.validate = validateRequestData
g.userPermission = None
# リクエストの処理が完成するたびにヘッダーにセキュリティ上のあれをつける
def app_after_request(response):
response.headers['X-Content-Type-Options'] = 'nosniff'
response.headers['X-Frame-Options'] = 'SAMEORIGIN'
response.headers['X-XSS-Protection'] = '1; mode=block'
response.headers['X-Download-Options'] = 'noopen'
g.db.close()
return response
# アプリ終了時にデータベースを閉じる TODO: MySQLに変更
def app_teardown_appcontext(exception):
db = getattr(g, 'db', None)
if db is not None:
g.db.close()
# 認証失敗時のエラー
def error_unauthorized(e):
return jsonify(status=401, message="Authorization failed.")
# 存在しない場合のエラー
def error_not_found(e):
return jsonify(status=404, message="Not found.")
# レート制限を超えたときのエラー
def error_ratelimit(e):
return jsonify(status=429, message="Ratelimit exceeded %s" % e.description)
# 処理に失敗した場合のエラー
def error_server_bombed(e):
return jsonify(status=500, message="Server expoded.")
# デフォルト
def app_index():
return jsonify(status=200, message="Server is running.")
# デフォルト
def app_favicon():
return current_app.send_static_file('favicon.ico')