MVP
This commit is contained in:
10
Dockerfile
Normal file
10
Dockerfile
Normal file
@@ -0,0 +1,10 @@
|
||||
FROM python
|
||||
|
||||
RUN pip install --upgrade pip
|
||||
WORKDIR /app
|
||||
|
||||
COPY requirements.txt requirements.txt
|
||||
RUN pip3 install -r requirements.txt
|
||||
COPY ./src .
|
||||
|
||||
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0"]
|
11
requirements.txt
Normal file
11
requirements.txt
Normal file
@@ -0,0 +1,11 @@
|
||||
certifi==2021.10.8
|
||||
charset-normalizer==2.0.12
|
||||
click==8.1.2
|
||||
Flask==2.1.1
|
||||
idna==3.3
|
||||
itsdangerous==2.1.2
|
||||
Jinja2==3.1.1
|
||||
MarkupSafe==2.1.1
|
||||
requests==2.27.1
|
||||
urllib3==1.26.9
|
||||
Werkzeug==2.1.1
|
56
src/app.py
Normal file
56
src/app.py
Normal file
@@ -0,0 +1,56 @@
|
||||
from flask import Flask, request
|
||||
from reconnect import reboot
|
||||
from os import environ
|
||||
from subprocess import call
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
# Get router username and password from environment variables
|
||||
username = environ.get('ROUTER_USERNAME')
|
||||
password = environ.get('ROUTER_PASSWORD')
|
||||
|
||||
# Get router IP and path from environment variables if they exist
|
||||
url = environ.get('ROUTER_IP') or '192.168.1.1'
|
||||
path = environ.get('ROUTER_PATH') or '/ws'
|
||||
|
||||
@app.route('/', methods=['POST'])
|
||||
def result():
|
||||
print(request)
|
||||
return 'Received!'
|
||||
|
||||
@app.route('/safe', methods=['POST'])
|
||||
def safe():
|
||||
# Try to ping the router 100 times
|
||||
for i in range(50):
|
||||
if call(['ping', '-c', '1', url]) == 0:
|
||||
break
|
||||
else:
|
||||
return 'Error: Unable to ping and reboot router automatically!'
|
||||
|
||||
# Try to nslookup 5 different websites
|
||||
websites = ['www.google.com', 'www.facebook.com', 'www.twitter.com', 'www.reddit.com', 'www.amazon.com']
|
||||
success = 0
|
||||
|
||||
for website in websites:
|
||||
if call(['nslookup', website]) == 0:
|
||||
success += 1
|
||||
|
||||
if success > 3:
|
||||
return 'Error: DNS seems to be working, debug manually!'
|
||||
|
||||
# Reboot router
|
||||
status = reboot(url, path, username, password).text
|
||||
|
||||
if '{"status":true}' not in status:
|
||||
return 'Error: Something went wrong while rebooting router!'
|
||||
|
||||
return 'Success: Rebooted router!'
|
||||
|
||||
@app.route('/force', methods=['POST'])
|
||||
def force():
|
||||
status = reboot(url, path, username, password).text
|
||||
|
||||
if '{"status":true}' not in status:
|
||||
return 'Error: Something went wrong while rebooting router!'
|
||||
|
||||
return 'Success: Rebooted router!'
|
Reference in New Issue
Block a user