-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSAPI-Server.py
More file actions
131 lines (112 loc) · 2.95 KB
/
SAPI-Server.py
File metadata and controls
131 lines (112 loc) · 2.95 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
126
127
128
129
130
131
#import modules
import os
import secrets
import flask
import waitress
from flask import request, jsonify
#set global variables
global limit
global defaultnbytes
global limSTR
#set default limit and nbyte if not specified in docker
try:
limit = os.environ['limit']
limit = int(limit)
except:
limit = 256
try:
defaultnbytes = os.environ['default_nbytes']
defaultnbytes = int(defaultnbytes)
except:
defaultnbytes = 11
limSTR = str(limit)
#start flask server
app = flask.Flask(__name__)
#BYTE route
@app.route('/api/v1/byte', methods=['GET'])
def api_byte():
def runByte():
try:
nbytes = int(request.args['nbytes'])
except:
nbytes = defaultnbytes
global out
if nbytes > limit:
out = "Limit Exceeded! nbytes must be less than "+limSTR+"!"
else:
out = secrets.token_bytes(nbytes)
out = {
'status': 200,
'message': 'OK',
'key': out
}
out = str(out)
runByte()
return jsonify(out)
#URLsafe route
@app.route('/api/v1/urlsafe', methods=['GET'])
def api_URLsafe():
def runURL():
try:
nbytes = int(request.args['nbytes'])
except:
nbytes = defaultnbytes
global out
if nbytes > limit:
out = "Limit Exceeded! nbytes must be less than "+limSTR+"!"
else:
out = secrets.token_urlsafe(nbytes)
out = {
'status': 200,
'message': 'OK',
'key': out
}
runURL()
return jsonify(out)
#randINT route
@app.route('/api/v1/randint', methods=['GET'])
def api_INT():
def runINT():
try:
first = int(request.args['first'])
last = int(request.args['last'])
except:
first = None
last = None
global out
if None in (first, last):
out = "Interger missing! [first] and [last] are required and must be an integer!"
else:
secretsGenerator = secrets.SystemRandom()
out = secretsGenerator.randint(first,last)
out = {
'status': 200,
'message': 'OK',
'key': out
}
runINT()
return jsonify(out)
#HEX route
@app.route('/api/v1/hex', methods=['GET'])
def api_hex():
def runHEX():
try:
nbytes = int(request.args['nbytes'])
except:
nbytes = defaultnbytes
global out
if nbytes > limit:
out = "Limit Exceeded! nbytes must be less than "+limSTR+"!"
else:
out = secrets.token_hex(nbytes)
out = {
'status': 200,
'message': 'OK',
'key': out
}
runHEX()
return jsonify(out)
#Start server from waitress
if __name__ == "__main__":
from waitress import serve
serve(app, host="0.0.0.0", port=5050)