vortexa64 commited on
Commit
b833a9e
·
verified ·
1 Parent(s): aafeacc

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +26 -16
app.py CHANGED
@@ -3,8 +3,12 @@ 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="*")
@@ -12,10 +16,27 @@ socketio = SocketIO(app, cors_allowed_origins="*")
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']
@@ -23,27 +44,16 @@ def upload():
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)
 
3
  import select
4
  import shlex
5
  import subprocess
6
+ import threading
7
+
8
+ from flask import Flask, render_template, request, jsonify, send_from_directory
9
  from flask_socketio import SocketIO, emit
10
+ import eventlet
11
+ eventlet.monkey_patch()
12
 
13
  app = Flask(__name__)
14
  socketio = SocketIO(app, cors_allowed_origins="*")
 
16
  UPLOAD_DIR = "/tmp/vpskw/uploads"
17
  os.makedirs(UPLOAD_DIR, exist_ok=True)
18
 
19
+ # Buka PTY untuk shell
20
+ master_fd, slave_fd = pty.openpty()
21
+ subprocess.Popen(["/bin/bash"], preexec_fn=os.setsid, stdin=slave_fd, stdout=slave_fd, stderr=slave_fd)
22
+
23
+ # Baca output dari shell dan kirim ke client
24
+ @socketio.on('connect')
25
+ def connect():
26
+ def read_output():
27
+ while True:
28
+ r, _, _ = select.select([master_fd], [], [])
29
+ if master_fd in r:
30
+ output = os.read(master_fd, 1024).decode(errors="ignore")
31
+ socketio.emit('output', output)
32
+ threading.Thread(target=read_output, daemon=True).start()
33
+
34
+ # Terima input dari terminal web
35
  @socketio.on('input')
36
  def handle_input(data):
37
  os.write(master_fd, data.encode())
38
 
39
+ # Endpoint upload file
40
  @app.route('/upload', methods=['POST'])
41
  def upload():
42
  f = request.files['file']
 
44
  f.save(path)
45
  return jsonify({"status": "uploaded", "path": path})
46
 
47
+ # Serve halaman utama
48
  @app.route('/')
49
  def index():
50
  return render_template('index.html')
51
 
52
+ # Serve xterm.js kalau gak dari CDN
53
  @app.route('/xterm.js')
54
  def xterm_js():
55
  return send_from_directory('static', 'xterm.js')
56
 
57
+ # Start
58
+ if __name__ == "__main__":
 
 
 
 
 
 
 
 
 
 
 
 
 
59
  socketio.run(app, host="0.0.0.0", port=7860)