-
Notifications
You must be signed in to change notification settings - Fork 2
/
app.py
70 lines (50 loc) · 2.11 KB
/
app.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
from __future__ import print_function
from flask import Flask, render_template, request, jsonify, flash, redirect
app = Flask(__name__)
app.url_map.strict_slashes = False
app.secret_key = 'noisebridge' # Not so secret, but...
import ft_lib # ./ft_lib.py
import subprocess
DEFAULT_BASE_URL = 'http://pegasus.noise:4444'
@app.route('/', methods=['GET'])
def index():
return render_template('index.html')
@app.route('/', methods=['OPTIONS'])
@app.route('/api', methods=['GET', 'OPTIONS'])
def api_options():
return app.response_class(
mimetype='text/plain',
response='''How to use the /api/text, /api/image, and /api/video API endpoints:
$ curl -X POST -F text='Hello, Noisebridge!' {base_url}/api/text
$ curl -X POST -F image=@my_image.png {base_url}/api/image
$ curl -X POST -F video=@my_video.mp4 {base_url}/api/video
Or send JSON rather than form-encoded data:
$ curl -X POST -H 'Content-Type: application/json' -d '{{"text": "Hello, Noisebridge!"}}' {base_url}/api/text
$ (echo -n '{{"image": "'; base64 my_image_or_gif.png; echo '"}}' ) | curl -X POST -H 'Content-Type: application/json' -d @- {base_url}/api/image
$ (echo -n '{{"video": "'; base64 my_video.mp4; echo '"}}' ) | curl -X POST -H 'Content-Type: application/json' -d @- {base_url}/api/video
'''.format(base_url=DEFAULT_BASE_URL)
)
@app.route('/api/<data_type>', methods=['POST'])
def api(data_type):
try:
stdout_data, stderr_data = ft_lib.send(data_type, request)
except Exception as e:
print('Error:', e)
if 'js-enabled' in request.args:
msg = str(e)
flash(msg, 'error')
return redirect('/')
else:
return jsonify({"error": str(e)})
if 'js-enabled' in request.args:
# Only show stderr output, not stdout
if stderr_data:
flash(stderr_data.decode('utf-8'), 'error')
return redirect('/')
else:
return jsonify({
"output": stdout_data.decode('utf-8'),
"error": stderr_data.decode('utf-8'),
})
if __name__ == '__main__':
app.run('0.0.0.0', 4444)