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));
},
_ => { },
};
(added_players,)
};
- // ensure players have access tokens
+ // report any new access tokens
{
let (_, nick2id) = chan.get_info()?;
let mut insns = vec![];
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 {
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|{
Pieces(Vec<MgmtGamePieceInfo>),
- AddPlayer(PlayerId),
+ AddPlayer {
+ account: AccountName, nick: String,
+ player: PlayerId, token: Option<AccessTokenReport>,
+ },
PlayerAccessToken(Option<AccessTokenReport>),
}