david/factoriocp
david
/
factoriocp
Archived
1
0
Fork 0
This repository has been archived on 2020-12-06. You can view files and clone it, but cannot push or open issues or pull requests.
factoriocp/factoriocp.py

158 lines
5.1 KiB
Python

# imports
import requests
from configparser import ConfigParser
from bottle import route, run, template, error, get, \
post, request, response, redirect, \
static_file
# config
configfile = "factoriocp.conf"
config = ConfigParser()
config.read(configfile)
# functions
# verify session
def logged_in():
username = request.get_cookie(config['DEFAULT']['cookie_name'],
secret=config['DEFAULT']['cookie_secret'])
if username:
return username
else:
return False
# authenticate against factorio.com
def log_in(username, password):
data = { "username": username, "password": password }
l = requests.post("https://auth.factorio.com/api-login", data=data)
if l.status_code == 200:
response.set_cookie(config['DEFAULT']['cookie_name'],
username,
secret=config['DEFAULT']['cookie_secret'],
max_age=config['DEFAULT']['cookie_max_age'])
return True
else:
return False
# get a list of server dicts
def get_servers():
pass
return [{ "name": "Creative fun", "version": "0.14.20", "status": "online", "port": "43564" },
{ "name": "Mad enemies", "version": "0.14.19", "status": "offline", "port": "65432" },
{ "name": "Mad enemies2", "version": "0.14.19", "status": "offline", "port": "65431" }]
# routing
# render main page
@get('/')
def view_home():
username = logged_in()
message = request.get_cookie(config['DEFAULT']['cookie_name'] + "_message",
secret=config['DEFAULT']['cookie_secret'])
if username:
# render homepage
servers = get_servers()
return template('default',
username=username,
servers=servers,
app_name=config['DEFAULT']['app_name'],
message=message)
else:
# render login
return template('login',
app_name=config['DEFAULT']['app_name'],
cookie_max_age=int(config['DEFAULT']['cookie_max_age']),
message=message)
# get login credentials
@post('/login')
def login():
username = request.forms.get('username')
password = request.forms.get('password')
if log_in(username, password):
message = { "message": "You have logged in successfully", "alert": "success" }
response.set_cookie(config['DEFAULT']['cookie_name'] + "_message",
message,
secret=config['DEFAULT']['cookie_secret'],
max_age=5)
redirect('/')
else:
message = { "message": "User or password wrong", "alert": "danger" }
response.set_cookie(config['DEFAULT']['cookie_name'] + "_message",
message,
secret=config['DEFAULT']['cookie_secret'],
max_age=5)
redirect('/')
# delete cookie
@get('/logout')
def logout():
if logged_in():
response.delete_cookie(config['DEFAULT']['cookie_name'])
message = { "message": "You have logged out successfully", "alert": "success" }
response.set_cookie(config['DEFAULT']['cookie_name'] + "_message",
message,
secret=config['DEFAULT']['cookie_secret'],
max_age=5)
redirect('/')
else:
redirect('/')
# serve static files
@get('/static/<filename:path>')
def send_static(filename):
return static_file(filename, root=config['DEFAULT']['static_files'])
# render server page
@get('/server/<port:int>')
def view_server(port):
username = logged_in()
message = request.get_cookie(config['DEFAULT']['cookie_name'] + "_message",
secret=config['DEFAULT']['cookie_secret'])
if username:
servers = get_servers()
server = [ server for server in servers if int(server['port']) == int(port) ]
if server:
return template('server',
app_name=config['DEFAULT']['app_name'],
server=server[0],
username=username,
fqdn=config['server']['fqdn'],
message=message)
else:
message = { "message": "Server does not exist", "alert": "danger" }
response.set_cookie(config['DEFAULT']['cookie_name'] + "_message",
message,
secret=config['DEFAULT']['cookie_secret'],
max_age=5,
path="/")
redirect("/")
else:
redirect("/")
# create new server
@get('/create')
def create_server():
pass
# run webserver
if __name__ == "__main__":
if str(config['server']['debug']) == "True":
run(host=config['server']['host'],
port=config['server']['port'],
debug=True,
reloader=True)
else:
run(host=config['server']['host'],
port=config['server']['port'])