From: Ian Jackson Date: Fri, 31 Jul 2020 23:20:27 +0000 (+0100) Subject: fix player access errors X-Git-Tag: otter-0.2.0~1207 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=a54fb74681c0d69731b57debece0a043b7e911df;p=otter.git fix player access errors --- diff --git a/src/commands.rs b/src/commands.rs index d34f29b8..e0887026 100644 --- a/src/commands.rs +++ b/src/commands.rs @@ -17,6 +17,7 @@ pub enum MgmtCommand { pub enum MgmtGameInstruction { Noop { }, AddPiece(PiecesSpec), + // todo: RemovePiece AddPlayer(PlayerState), RemovePlayer(PlayerId), } @@ -50,6 +51,7 @@ pub enum MgmtError { GameBeingDestroyed, GameNotFound, GameCorrupted, + PlayerNotFound, LimitExceeded, SVGProcessingFailed(#[from] SVGProcessingError), GameError(#[from] GameError), diff --git a/src/global.rs b/src/global.rs index d5c5e7dd..79944ddc 100644 --- a/src/global.rs +++ b/src/global.rs @@ -428,12 +428,15 @@ impl InstanceGuard<'_> { self.token_register(token, iad); } - #[throws(OE)] + #[throws(MgmtError)] pub fn player_access_reset(&mut self, players: &[PlayerId]) -> Vec { // tokens can't persist unless game is never destroyed ? // so a game is like a tables, and persistent // xxx boxes feature maybe + for &player in players { + self.c.g.gs.players.get(player).ok_or(MgmtError::PlayerNotFound)?; + } self.tokens_deregister_for_id(|id:PlayerId| players.contains(&id)); self.save_access_now()?; let mut tokens = vec![]; @@ -442,7 +445,7 @@ impl InstanceGuard<'_> { gref : self.gref.clone(), ident : player }; - let token = RawToken::new_random()?; + let token = RawToken::new_random(); self.token_register(token.clone(), iad); tokens.push(token); } @@ -618,7 +621,6 @@ impl AccessId for ClientId { } impl RawToken { - #[throws(OE)] fn new_random() -> Self { let mut rng = thread_rng(); let token = RawToken ( @@ -653,7 +655,7 @@ pub fn record_token ( ig : &mut InstanceGuard, iad : InstanceAccessDetails ) -> RawToken { - let token = RawToken::new_random()?; + let token = RawToken::new_random(); ig.token_register(token.clone(), iad); token }