def __init__(self, user_data_dir: Path): super().__init__() NetworkClient.__init__(self, user_data_dir.joinpath("network_client"), randovania.get_configuration()) from randovania.gui.lib import common_qt_lib common_qt_lib.set_default_window_icon(self) if self.configuration.get("discord_client_id") is not None: self.discord = pypresence.AioClient(self.configuration["discord_client_id"]) self.discord._events_on = False # workaround for broken AioClient else: self.discord = None
def test_get_configuration_default(mock_get_data_path, tmpdir): # Setup mock_get_data_path.return_value = Path(tmpdir) # Run config = randovania.get_configuration() # Assert assert config == { "server_address": "http://127.0.0.1:5000", "socketio_path": "/socket.io", }
def test_get_configuration_file(mock_get_data_path, tmpdir): # Setup mock_get_data_path.return_value = Path(tmpdir) Path(tmpdir).joinpath("configuration.json").write_text('{"foo": 5}') # Run config = randovania.get_configuration() # Assert assert config == { "foo": 5, }
def apply_migrations(): import playhouse.migrate import randovania from randovania.server import database randovania.setup_logging('DEBUG', None) configuration = randovania.get_configuration() database.db.init(configuration["server_config"]['database_path']) database.db.connect(reuse_if_open=True) migrator = playhouse.migrate.SqliteMigrator(database.db) with database.db.atomic(): playhouse.migrate.migrate( migrator.rename_table("gamesession", "game_session"), migrator.rename_table("gamesessionmembership", "game_session_membership"), migrator.rename_table("gamesessionpreset", "game_session_preset"), migrator.rename_table("gamesessionteamaction", "game_session_team_action"), migrator.add_column("game_session", "dev_features", database.GameSession.dev_features), )
def run(): configuration = randovania.get_configuration()["discord_bot"] client = RandovaniaBot(configuration) client.run(configuration["token"])
def create_app(): configuration = randovania.get_configuration() dictConfig({ 'version': 1, 'formatters': { 'default': { 'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s', } }, 'handlers': { 'wsgi': { 'class': 'logging.StreamHandler', 'stream': 'ext://flask.logging.wsgi_errors_stream', 'formatter': 'default' } }, 'root': { 'level': 'INFO', 'handlers': ['wsgi'] } }) app = flask.Flask(__name__) app.wsgi_app = werkzeug.middleware.proxy_fix.ProxyFix(app.wsgi_app, x_proto=1, x_prefix=1) app.config['SECRET_KEY'] = configuration["server_config"]["secret_key"] app.config["GUEST_KEY"] = configuration["guest_secret"].encode( "ascii") if "guest_secret" in configuration else None app.config["DISCORD_CLIENT_ID"] = configuration["discord_client_id"] app.config["DISCORD_CLIENT_SECRET"] = configuration["server_config"][ "discord_client_secret"] app.config[ "DISCORD_REDIRECT_URI"] = f'{configuration["server_address"]}/login_callback' app.config["FERNET_KEY"] = configuration["server_config"][ "fernet_key"].encode("ascii") version_checking = ClientVersionCheck( configuration["server_config"]["client_version_checking"]) database.db.init(configuration["server_config"]['database_path']) database.db.connect(reuse_if_open=True) database.db.create_tables(database.all_classes) sio = ServerApp(app) app.sio = sio game_session.setup_app(sio) user_session.setup_app(sio) connected_clients = sio.metrics.info( "connected_clients", "How many clients are connected right now.") connected_clients.set(0) @app.route("/") def index(): return "ok" server_version = randovania.VERSION @sio.sio.server.on("connect") def connect(sid, environ): if "HTTP_X_RANDOVANIA_VERSION" not in environ: raise ConnectionRefusedError("unknown client version") client_app_version = environ["HTTP_X_RANDOVANIA_VERSION"] check_client_version(version_checking, client_app_version, server_version) connected_clients.inc() forwarded_for = environ.get('HTTP_X_FORWARDED_FOR') app.logger.info( f"Client at {environ['REMOTE_ADDR']} ({forwarded_for}) with " f"version {client_app_version} connected.") @sio.sio.server.on("disconnect") def disconnect(sid): connected_clients.dec() sio_environ = sio.get_server().environ forwarded_for = sio_environ[sid].get('HTTP_X_FORWARDED_FOR') app.logger.info( f"Client at {sio_environ[sid]['REMOTE_ADDR']} ({forwarded_for}) disconnected." ) session = sio.get_server().get_session(sid) if "user-id" in session: game_session.report_user_disconnected(sio, session["user-id"], app.logger) return app
def create_app(): configuration = randovania.get_configuration() dictConfig({ 'version': 1, 'formatters': { 'default': { 'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s', } }, 'handlers': { 'wsgi': { 'class': 'logging.StreamHandler', 'stream': 'ext://flask.logging.wsgi_errors_stream', 'formatter': 'default' } }, 'root': { 'level': 'INFO', 'handlers': ['wsgi'] } }) app = flask.Flask(__name__) app.config['SECRET_KEY'] = configuration["server_config"]["secret_key"] app.config["GUEST_KEY"] = configuration["guest_secret"].encode( "ascii") if "guest_secret" in configuration else None app.config["DISCORD_CLIENT_ID"] = configuration["discord_client_id"] app.config["DISCORD_CLIENT_SECRET"] = configuration["server_config"][ "discord_client_secret"] app.config[ "DISCORD_REDIRECT_URI"] = "http://127.0.0.1:5000/callback/" # Redirect URI. app.config["FERNET_KEY"] = configuration["server_config"][ "fernet_key"].encode("ascii") database.db.init(configuration["server_config"]['database_path']) database.db.connect(reuse_if_open=True) database.db.create_tables(database.all_classes) sio = ServerApp(app) app.sio = sio game_session.setup_app(sio) user_session.setup_app(sio) connected_clients = sio.metrics.info( "connected_clients", "How many clients are connected right now.") connected_clients.set(0) @app.route("/") def index(): return "ok" server_version = randovania.VERSION @sio.sio.server.on("connect") def connect(sid, environ): if "HTTP_X_RANDOVANIA_VERSION" not in environ: raise ConnectionRefusedError("unknown client version") client_app_version = environ["HTTP_X_RANDOVANIA_VERSION"] if server_version != client_app_version: raise ConnectionRefusedError( f"Incompatible client version '{client_app_version}', " f"expected '{server_version}'") connected_clients.set(len(sio.get_server().environ)) app.logger.info( f"Client at {environ['REMOTE_ADDR']} with " f"version {client_app_version} connected, while server is {server_version}" ) @sio.sio.server.on("disconnect") def disconnect(sid): sio_environ = sio.get_server().environ num_clients = len(sio_environ) if sid in sio_environ: num_clients -= 1 connected_clients.set(num_clients) app.logger.info( f"Client at {sio_environ[sid]['REMOTE_ADDR']} disconnected.") return app
def run(): global configuration configuration = randovania.get_configuration()["discord_bot"] client.run(configuration["token"])
def __init__(self, user_data_dir: Path): super().__init__() NetworkClient.__init__(self, user_data_dir.joinpath("network_client"), randovania.get_configuration()) from randovania.gui.lib import common_qt_lib common_qt_lib.set_default_window_icon(self)