From 28e1ea598dc8a6976cedcf7c67afdbb5c07d0274 Mon Sep 17 00:00:00 2001 From: itdominator <1itdominator@gmail.com> Date: Sun, 18 Jul 2021 21:59:33 -0500 Subject: [PATCH] Reset to working instance... --- README.md | 28 +++++++++++++++++ linux-requirements.txt | 36 +++++++++++++++++----- src/core/__init__.py | 41 +++++-------------------- src/core/routes/Routes.py | 49 ++++++++++++++++++++++++++++-- src/core/routes/Sockets.py | 55 +++++++++++++++------------------- src/core/templates/layout.html | 2 +- src/linux-start.sh | 7 ++--- src/socket_run.sh | 9 +++++- windows-requirements.txt | 34 ++++++++++++++++----- 9 files changed, 173 insertions(+), 88 deletions(-) diff --git a/README.md b/README.md index 7c3dd5a..a0efd5b 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,34 @@ Linux/Mac Windows ``` ./windows-start.sh ``` +Nginx Setup Example + +``` +server { + listen 80 ; + # Use your hosts file or router DNSmasq to redirect www.remoteconn.com to your local server. + server_name www.remoteconn.com remoteconn.com; + error_log /tmp/remoteconn-nginx-error.log error; + + + location /socket.io { + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host $host; + + proxy_redirect off; + #proxy_buffering off; + + proxy_pass http://127.0.0.1:8088/socket.io; + } + + location / { + proxy_pass http://127.0.0.1:8088/; + } +} +``` + # Images ![1 Interface.... ](images/pic1.png) diff --git a/linux-requirements.txt b/linux-requirements.txt index c53c133..1612939 100644 --- a/linux-requirements.txt +++ b/linux-requirements.txt @@ -1,10 +1,30 @@ -eventlet==0.29.1 -Flask==1.1.2 +bcrypt==3.1.7 +cffi==1.14.0 +Click==7.0 +dnspython==1.16.0 +eventlet==0.25.2 +Flask==1.1.1 Flask-Bcrypt==0.7.1 Flask-Login==0.5.0 -flask-oidc==1.4.0 -Flask-SocketIO==4.3.1 -greenlet==0.4.17 -gunicorn==20.0.4 -PyAutoGUI==0.9.52 -Werkzeug==1.0.1 +Flask-SocketIO==4.3.0 +greenlet==0.4.16 +gunicorn==19.9.0 +itsdangerous==1.1.0 +Jinja2==2.10.3 +MarkupSafe==1.1.1 +monotonic==1.5 +MouseInfo==0.1.3 +Pillow==7.1.2 +PyAutoGUI==0.9.50 +pycparser==2.20 +PyGetWindow==0.0.8 +PyMsgBox==1.0.8 +pyperclip==1.8.0 +PyRect==0.1.4 +PyScreeze==0.1.26 +python-engineio==3.13.0 +python-socketio==4.6.0 +python3-xlib==0.15 +PyTweening==1.0.3 +six==1.14.0 +Werkzeug==0.16.0 diff --git a/src/core/__init__.py b/src/core/__init__.py index ec4a4bc..d444018 100644 --- a/src/core/__init__.py +++ b/src/core/__init__.py @@ -1,18 +1,11 @@ # Python imports -import os, secrets -from datetime import timedelta +import secrets # Lib imports -import pyautogui import eventlet -# import eventlet.debug -from engineio.payload import Payload -# Some fixrs for Websockets -eventlet.monkey_patch() -# eventlet.debug.hub_prevent_multiple_readers(False) -Payload.max_decode_packets = 120 # Fix too many small packets causing error +from engineio.payload import Payload from flask import Flask @@ -25,33 +18,13 @@ from flask_socketio import SocketIO # Configs and 'init' -APP_NAME = 'RemoteMouse' -ROOT_FILE_PTH = os.path.dirname(os.path.realpath(__file__)) - app = Flask(__name__) -app.config.update({ - "TITLE": APP_NAME, - 'DEBUG': False, - 'SECRET_KEY': secrets.token_hex(32), - 'PERMANENT_SESSION_LIFETIME': timedelta(days = 7).total_seconds() - }) - +app.config['TITLE'] = 'RemoteMouse' +app.config['SECRET_KEY'] = secrets.token_hex(32) # For csrf and some other stuff... # For Websockets -socketio = SocketIO(app, async_mode = 'eventlet', - cors_allowed_origins = ["*"], - path = "socket.io", - allow_upgrades = True, - manage_session = True, - cookie = None, - engineio_logger = True, - logger = True) - - -app.jinja_env.globals['TITLE'] = APP_NAME -pyautogui.FAILSAFE = False # If we hit corner, that's ok -# Let piautogui make updates as quick as it can... -pyautogui.MINIMUM_DURATION = 0 -pyautogui.PAUSE = 0 +# eventlet.monkey_patch() +Payload.max_decode_packets = 120 # Fix too many small packets causing error +socketio = SocketIO(app, async_mode='eventlet') from core import routes diff --git a/src/core/routes/Routes.py b/src/core/routes/Routes.py index 69bb539..d92aa9d 100644 --- a/src/core/routes/Routes.py +++ b/src/core/routes/Routes.py @@ -7,29 +7,74 @@ from flask import request, render_template # App imports -from core import app, pyautogui, socketio # Get from __init__ +from core import app, socketio # Get from __init__ from core.MessageHandler import MessageHandler # Get simple message processor msgHandler = MessageHandler() +TITLE = app.config['TITLE'] + +pyautogui.FAILSAFE = False # If we hit corner, that's ok +# Let piautogui make updates as quick as it can... +pyautogui.MINIMUM_DURATION = 0 +pyautogui.PAUSE = 0 @app.route('/') def home(): if request.method == 'GET': - return render_template('index.html') + return render_template('index.html', + title=TITLE) return render_template('error.html', title='Error!', message='Must use GET request type...') +@app.route('/sound-manager') +def soundManager(): + if request.method == 'GET': + # command = 'runuser -l abaddon bash -c "pacmd list-sink-inputs"' + command = 'sudo -u abaddon bash -c "pacmd list-sink-inputs"' + # command = 'sudo -u abaddon bash </') +def updateCoords2(x, y): + try: + # print(x + "," + y) + pyautogui.moveRel(float(x), float(y)); + return "{}" + except Exception as e: + print( repr(e) ) + return render_template('error.html', + title='Error!', + message='Key is not a valid input...') + + @app.route('/send-keys', methods=['GET', 'POST']) def sendKeys(): if request.method == 'POST': try: text = str(request.values['text']).strip() pyautogui.typewrite(text); + # print("\nX: {} Y: {}".format(str(x), str(y))) + # pyautogui.typewrite('Hello world!\n', interval=secs_between_keys) # useful for entering text, newline is Enter + # pyautogui.press(['left', 'left', 'left', 'left']) # Press the left arrow key 4 times. + # pyautogui.keyDown('shift') # Press the Shift key down and hold it. + # pyautogui.keyUp('shift') # Let go of the Shift key. except Exception as e: print( repr(e) ) return render_template('error.html', diff --git a/src/core/routes/Sockets.py b/src/core/routes/Sockets.py index 2e9ba4a..14a32a5 100644 --- a/src/core/routes/Sockets.py +++ b/src/core/routes/Sockets.py @@ -6,7 +6,7 @@ from flask import request, render_template # App imports -from core import app, pyautogui, socketio # Get from __init__ +from core import app, socketio # Get from __init__ from core.MessageHandler import MessageHandler # Get simple message processor @@ -14,76 +14,69 @@ from core.MessageHandler import MessageHandler # Get simple message processor msgHandler = MessageHandler() +pyautogui.FAILSAFE = False # If we hit corner, that's ok +# Let piautogui make updates as quick as it can... +pyautogui.MINIMUM_DURATION = 0 +pyautogui.PAUSE = 0 + @app.route('/mouse-down') -@socketio.on('mouse_down', namespace='/socket.io') +@socketio.on('mouse_down') def mouseDown(eve = None): pyautogui.mouseDown() return "" @app.route('/mouse-up') -@socketio.on('mouse_up', namespace='/socket.io') +@socketio.on('mouse_up') def mouseUp(eve = None): pyautogui.mouseUp() return "" @app.route('/left-click') -@socketio.on('left_click', namespace='/socket.io') +@socketio.on('left_click') def leftClick(eve = None): pyautogui.click() return "" @app.route('/right-click') -@socketio.on('right_click', namespace='/socket.io') +@socketio.on('right_click') def rightClick(eve = None): pyautogui.click(button='right') return "" @app.route('/scroll-up') -@socketio.on('scroll_up', namespace='/socket.io') +@socketio.on('scroll_up') def scrollUp(eve = None): pyautogui.scroll(1) return "" @app.route('/scroll-down') -@socketio.on('scroll_down', namespace='/socket.io') +@socketio.on('scroll_down') def scrollDown(eve = None): pyautogui.scroll(-1) return "" @app.route('/press-enter') -@socketio.on('press_enter', namespace='/socket.io') +@socketio.on('press_enter') def pressEnter(eve = None): pyautogui.press("enter") return "" @app.route('/press-back') -@socketio.on('press_back', namespace='/socket.io') +@socketio.on('press_back') def pressBack(eve = None): pyautogui.press("backspace") return "" -@app.route('/update-coords/xy//') -@socketio.on('update_coords', namespace='/socket.io') -def updateCoords(m1 = None, m2 = None): - if not m2: - try: - parts = m1.split(",") - x = float( parts[0] ) - y = float( parts[1] ) - # print(str(x) + "," + str(y)) - pyautogui.moveRel(x, y); - except Exception as e: - pass - else: - try: - x = float( m1 ) - y = float( m2 ) - # print(str(x) + "," + str(y)) - pyautogui.moveRel(x, y); - except Exception as e: - pass - - return "" +@socketio.on('update_coords') +def updateCoords(message): + try: + parts = message.split(",") + x = float( parts[0] ) + y = float( parts[1] ) + # print(str(x) + "," + str(y)) + pyautogui.moveRel(x, y); + except Exception as e: + print( repr(e) ) diff --git a/src/core/templates/layout.html b/src/core/templates/layout.html index d19c2b6..4d3d9bf 100644 --- a/src/core/templates/layout.html +++ b/src/core/templates/layout.html @@ -6,7 +6,7 @@ {% if title %} {{title}} {% else %} - {{TITLE}} + App {% endif %} {% block header_css %} diff --git a/src/linux-start.sh b/src/linux-start.sh index 2587800..3415941 100755 --- a/src/linux-start.sh +++ b/src/linux-start.sh @@ -11,17 +11,16 @@ function main() { echo "Working Dir: " $(pwd) source "../venv/bin/activate" - LOG_LEVEL=debug + LOG_LEVEL=error WORKER_COUNT=1 ADDR=127.0.0.1 PORT=8088 - TIMEOUT=120 + TIMEOUT=60 # Note can replace 127.0.0.1 with 0.0.0.0 to make it 'network/internet' accessable... # Note: NEED -k eventlet for this to work! I spent too many hours on this... # : IE : - gunicorn wsgi:app \ - -b $ADDR:$PORT \ + gunicorn wsgi:app -b $ADDR:$PORT \ -k eventlet \ -w $WORKER_COUNT \ --timeout $TIMEOUT \ diff --git a/src/socket_run.sh b/src/socket_run.sh index b1d0f1c..b12c96d 100755 --- a/src/socket_run.sh +++ b/src/socket_run.sh @@ -10,6 +10,13 @@ function main() { cd "${SCRIPTPATH}" echo "Working Dir: " $(pwd) mkdir /tmp/apps - ../venv/bin/gunicorn --bind unix:/tmp/apps/remoteconn.sock wsgi:app + + LOG_LEVEL=debug + WORKER_COUNT=1 + + gunicorn wsgi:app --bind unix:/tmp/apps/remoteconn.sock \ + -k eventlet \ + -w $WORKER_COUNT \ + --log-level $LOG_LEVEL } main $@; diff --git a/windows-requirements.txt b/windows-requirements.txt index ddd4ff1..4869ad9 100644 --- a/windows-requirements.txt +++ b/windows-requirements.txt @@ -1,10 +1,30 @@ -eventlet==0.29.1 -Flask==1.1.2 +bcrypt==3.1.7 +cffi==1.14.0 +Click==7.0 +dnspython==1.16.0 +eventlet==0.25.2 +Flask==1.1.1 Flask-Bcrypt==0.7.1 Flask-Login==0.5.0 -flask-oidc==1.4.0 -Flask-SocketIO==4.3.1 -greenlet==0.4.17 +Flask-SocketIO==4.3.0 +greenlet==0.4.16 waitress==1.4.3 -PyAutoGUI==0.9.52 -Werkzeug==1.0.1 +itsdangerous==1.1.0 +Jinja2==2.10.3 +MarkupSafe==1.1.1 +monotonic==1.5 +MouseInfo==0.1.3 +Pillow==7.1.2 +pkg-resources==0.0.0 +PyAutoGUI==0.9.50 +pycparser==2.20 +PyGetWindow==0.0.8 +PyMsgBox==1.0.8 +pyperclip==1.8.0 +PyRect==0.1.4 +PyScreeze==0.1.26 +python-engineio==3.13.0 +python-socketio==4.6.0 +PyTweening==1.0.3 +six==1.14.0 +Werkzeug==0.16.0