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

160 lines
5.6 KiB
Python
Raw Normal View History

2016-11-19 19:01:21 +01:00
# 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
2016-11-22 09:08:59 +01:00
return [{ "name": "Creative fun", "desc": "A creative vanilla server for tests.", "version": "0.14.20", "status": "online", "port": "34197" },
{ "name": "Vanilla on the rocks", "desc": "Vanilla map with some mods.", "version": "0.14.19", "status": "offline", "port": "34198" },
2016-12-09 23:06:07 +01:00
{ "name": "Mad enemies", "desc": "Hazardous map. A lot of enemies.", "version": "0.14.19", "status": "offline", "port": "34199" },
{ "name": "Online Map", "desc": "A modded map for friends.", "version": "0.14.19", "status": "online", "port": "34200" },
{ "name": "Mad enemies2", "desc": "Just a copy of Mad enemies.", "version": "0.14.20", "status": "offline", "port": "34201" }]
2016-11-19 19:01:21 +01:00
# routing
# render main page
@get('/')
2016-11-22 00:40:57 +01:00
def view_home():
2016-11-19 19:01:21 +01:00
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')
2016-11-22 00:40:57 +01:00
def login():
2016-11-19 19:01:21 +01:00
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'])
2016-11-22 00:40:57 +01:00
# 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
2016-11-19 19:01:21 +01:00
# 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'])