chiark / gitweb /
wip moving token reset to server
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 7 Nov 2020 00:29:56 +0000 (00:29 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 7 Nov 2020 00:29:56 +0000 (00:29 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/bin/otter.rs
src/cmdlistener.rs
src/commands.rs

index 8a05757b69bdc2d7c17240fc5ce919478cb7e2fb..fec6938e92ebb1a4ca448adb5120cb16a551e5a7 100644 (file)
@@ -400,11 +400,11 @@ fn setup_table(ma: &MainOpts, chan: &mut ConnForGame,
       insns.push(Insn::RemovePlayer { player: st.id });
     }
 
-    let mut added_players = HashSet::new();
+    let mut added_players = vec![];
     chan.alter_game(insns, Some(&mut |response| {
       match response {
-        &Resp::AddPlayer(player) => {
-          added_players.insert(player);
+        &Resp::AddPlayer { player, nick, token, .. } => {
+          added_players.push((player, nick, token));
         },
         _ => { },
       };
@@ -414,7 +414,7 @@ fn setup_table(ma: &MainOpts, chan: &mut ConnForGame,
     (added_players,)
   };
 
-  // ensure players have access tokens
+  // report any new access tokens
   {
     let (_, nick2id) = chan.get_info()?;
     let mut insns = vec![];
index e0656abd95b7376fc1b2852a32ee8509678a2812..7178d3de869aac19c6ca1b83ba84e97b5d3d1a13 100644 (file)
@@ -300,7 +300,7 @@ fn execute_game_insn<'cs, 'igr, 'ig : 'igr>(
       details: MgmtPlayerDetails { timezone, nick }
     } => {
       // todo some kind of permissions check for player too
-      let ig = cs.check_acl(ag, ig, PCH::Instance, &[TP::AddPlayer])?.0;
+      let (ig, auth) = cs.check_acl(ag, ig, PCH::Instance, &[TP::AddPlayer])?;
       let (_arecord, acctid) = ag.lookup(&account)?;
       let nick = nick.ok_or(ME::ParameterMissing)?;
       let logentry = LogEntry {
@@ -318,10 +318,14 @@ fn execute_game_insn<'cs, 'igr, 'ig : 'igr>(
         tz,
       };
       let (player, logentry) = ig.player_new(gpl, ipl, logentry)?;
+
+      let atr = ig.player_access_reset(ag, player, auth.therefore_ok())?;
+
       (U{ pcs: vec![],
           log: vec![ logentry ],
           raw: None },
-       Resp::AddPlayer(player), ig)
+       Resp::AddPlayer { account, nick, player, token: atr },
+       ig)
     },
 
     Insn::ListPieces => readonly(cs,ag,ig, &[TP::ViewPublic], |ig|{
index eec60177a28c9549e962724d489ef65ecd9c23f9..e494ade2370f87a8b9a6ffa298429d6b3aba4803 100644 (file)
@@ -98,7 +98,10 @@ pub enum MgmtGameResponse {
 
   Pieces(Vec<MgmtGamePieceInfo>),
 
-  AddPlayer(PlayerId),
+  AddPlayer {
+    account: AccountName, nick: String,
+    player: PlayerId, token: Option<AccessTokenReport>,
+  },
   PlayerAccessToken(Option<AccessTokenReport>),
 }