vortexa64 commited on
Commit
f85735f
·
verified ·
1 Parent(s): 0af4820

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +49 -0
app.py ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import pty
3
+ import select
4
+ import shlex
5
+ import subprocess
6
+ from flask import Flask, render_template, request, send_from_directory, jsonify
7
+ from flask_socketio import SocketIO, emit
8
+
9
+ app = Flask(__name__)
10
+ socketio = SocketIO(app, cors_allowed_origins="*")
11
+
12
+ UPLOAD_DIR = "/tmp/vpskw/uploads"
13
+ os.makedirs(UPLOAD_DIR, exist_ok=True)
14
+
15
+ @socketio.on('input')
16
+ def handle_input(data):
17
+ os.write(master_fd, data.encode())
18
+
19
+ @app.route('/upload', methods=['POST'])
20
+ def upload():
21
+ f = request.files['file']
22
+ path = os.path.join(UPLOAD_DIR, f.filename)
23
+ f.save(path)
24
+ return jsonify({"status": "uploaded", "path": path})
25
+
26
+ @app.route('/')
27
+ def index():
28
+ return render_template('index.html')
29
+
30
+ @app.route('/xterm.js')
31
+ def xterm_js():
32
+ return send_from_directory('static', 'xterm.js')
33
+
34
+ @socketio.on('connect')
35
+ def connect():
36
+ def read_output():
37
+ while True:
38
+ r, _, _ = select.select([master_fd], [], [])
39
+ if master_fd in r:
40
+ output = os.read(master_fd, 1024).decode(errors="ignore")
41
+ socketio.emit('output', output)
42
+ import threading
43
+ threading.Thread(target=read_output, daemon=True).start()
44
+
45
+ master_fd, slave_fd = pty.openpty()
46
+ subprocess.Popen(["/bin/bash"], preexec_fn=os.setsid, stdin=slave_fd, stdout=slave_fd, stderr=slave_fd)
47
+
48
+ if __name__ == '__main__':
49
+ socketio.run(app, host="0.0.0.0", port=7860)