def _finish_session(sio: ServerApp, session: GameSession): _verify_has_admin(sio, session.id, None) if session.state != GameSessionState.IN_PROGRESS: raise InvalidAction("Session is not in progress") session.state = GameSessionState.FINISHED session.save()
def _change_password(sio: ServerApp, session: GameSession, password: str): _verify_has_admin(sio, session.id, None) session.password = _hash_password(password) logger().info(f"{_describe_session(session)}: Changing password.") session.save() _add_audit_entry(sio, session, f"Changed password")
def _change_title(sio: ServerApp, session: GameSession, title: str): _verify_has_admin(sio, session.id, None) old_name = session.name session.name = title logger().info( f"{_describe_session(session)}: Changed name from {old_name}.") session.save() _add_audit_entry(sio, session, f"Changed name from {old_name} to {title}")
def _finish_session(sio: ServerApp, session: GameSession): _verify_has_admin(sio, session.id, None) if session.state != GameSessionState.IN_PROGRESS: raise InvalidAction("Session is not in progress") session.state = GameSessionState.FINISHED logger().info(f"{_describe_session(session)}: Finishing session.") session.save() _add_audit_entry(sio, session, f"Finished session")
def _update_layout_generation(sio: ServerApp, session: GameSession, active: bool): _verify_has_admin(sio, session.id, None) _verify_in_setup(session) if active: if session.generation_in_progress is None: session.generation_in_progress = sio.get_current_user() else: raise InvalidAction( f"Generation already in progress by {session.generation_in_progress.name}." ) else: session.generation_in_progress = None session.save()
def _start_session(sio: ServerApp, session: GameSession): _verify_has_admin(sio, session.id, None) _verify_in_setup(session) if session.layout_description_json is None: raise InvalidAction("Unable to start session, no game is available.") num_players = GameSessionMembership.select().where( GameSessionMembership.session == session, GameSessionMembership.row != None).count() expected_players = session.num_rows if num_players != expected_players: raise InvalidAction( f"Unable to start session, there are {num_players} but expected {expected_players} " f"({session.num_rows} x {session.num_teams}).") session.state = GameSessionState.IN_PROGRESS session.save()
def _change_layout_description(sio: ServerApp, session: GameSession, description_json: Optional[dict]): _verify_has_admin(sio, session.id, None) _verify_in_setup(session) rows_to_update = [] if description_json is None: description = None else: if session.generation_in_progress != sio.get_current_user(): if session.generation_in_progress is None: raise InvalidAction(f"Not waiting for a layout.") else: raise InvalidAction( f"Waiting for a layout from {session.generation_in_progress.name}." ) _verify_no_layout_description(session) description = LayoutDescription.from_json_dict(description_json) if description.player_count != session.num_rows: raise InvalidAction( f"Description is for a {description.player_count} players," f" while the session is for {session.num_rows}.") for permalink_preset, preset_row in zip(description.all_presets, session.presets): preset_row = typing.cast(GameSessionPreset, preset_row) if _get_preset(json.loads( preset_row.preset)).get_preset() != permalink_preset: preset = VersionedPreset.with_preset(permalink_preset) if preset.game not in session.allowed_games: raise InvalidAction(f"{preset.game} preset not allowed.") preset_row.preset = json.dumps(preset.as_json) rows_to_update.append(preset_row) with database.db.atomic(): for preset_row in rows_to_update: preset_row.save() session.generation_in_progress = None session.layout_description = description session.save() _add_audit_entry( sio, session, "Removed generated game" if description is None else f"Set game to {description.shareable_word_hash}")
def _change_layout_description(sio: ServerApp, session: GameSession, description_json: Optional[dict]): _verify_has_admin(sio, session.id, None) _verify_in_setup(session) rows_to_update = [] if description_json is None: description = None else: if session.generation_in_progress != sio.get_current_user(): if session.generation_in_progress is None: raise InvalidAction(f"Not waiting for a layout.") else: raise InvalidAction( f"Waiting for a layout from {session.generation_in_progress.name}." ) _verify_no_layout_description(session) description = LayoutDescription.from_json_dict(description_json) permalink = description.permalink if permalink.player_count != session.num_rows: raise InvalidAction( f"Description is for a {permalink.player_count} players," f" while the session is for {session.num_rows}.") for permalink_preset, preset_row in zip(permalink.presets.values(), session.presets): preset_row = typing.cast(GameSessionPreset, preset_row) if _get_preset(json.loads( preset_row.preset)).get_preset() != permalink_preset: preset = VersionedPreset.with_preset(permalink_preset) if preset.game != RandovaniaGame.PRIME2: raise InvalidAction("Only Prime 2 presets allowed.") preset_row.preset = json.dumps(preset.as_json) rows_to_update.append(preset_row) with database.db.atomic(): for preset_row in rows_to_update: preset_row.save() session.generation_in_progress = None session.layout_description = description session.save()
def _change_password(sio: ServerApp, session: GameSession, password: str): _verify_has_admin(sio, session.id, None) session.password = _hash_password(password) logger().info(f"Session {session.id}: Changing password.") session.save()
def _change_password(sio: ServerApp, session: GameSession, password: str): _verify_has_admin(sio, session.id, None) session.password = _hash_password(password) session.save()