pub account: Arc<AccountName>,
pub nick: String,
pub timezone: String,
- pub tokens_revealed: HashMap<Html, TokenRevelation>,
pub access: AccessRecord,
}
-#[derive(Copy,Clone,Debug,Ord,PartialOrd,Eq,PartialEq)]
+#[derive(Clone,Debug,Hash,Ord,PartialOrd,Eq,PartialEq)]
#[derive(Serialize,Deserialize)]
-pub struct TokenRevelation {
+pub struct TokenRevelationKey {
+ pub account: AccountName,
+ pub desc: Html,
+}
+
+#[derive(Copy,Clone,Debug)]
+#[derive(Serialize,Deserialize)]
+pub struct TokenRevelationValue {
pub earliest: Timestamp,
pub latest: Timestamp,
}
let record = AccountRecord {
account, nick, access,
timezone: timezone.unwrap_or_default(),
- tokens_revealed: default(),
};
ag.insert_entry(record, auth)?;
Fine
let ipl = IPlayerState {
acctid,
tz,
+ tokens_revealed: default(),
};
let (player, logentry) = ig.player_new(gpl, ipl, logentry)?;
#[derive(Debug,Clone,Serialize,Deserialize)]
pub struct IPlayerState {
pub acctid: AccountId,
+ pub tokens_revealed: HashMap<TokenRevelationKey, TokenRevelationValue>,
pub tz: Timezone,
}
authorised: Authorisation<AccountName>,
reset: bool)
-> Option<AccessTokenReport> {
- let acctid = self.c.g.iplayers.byid(player)?.ipl.acctid;
+ let acctid = self.iplayers.byid(player)?.ipl.acctid;
let (access, acctid) = accounts.with_entry_mut(
acctid, authorised, None,
let access = acct.access.clone();
let desc = access.describe_html();
let now = Timestamp::now();
- acct.tokens_revealed.entry(desc)
- .or_insert(TokenRevelation {
+ let revk = TokenRevelationKey {
+ account: (*acct.account).clone(),
+ desc,
+ };
+ self.iplayers.byid_mut(player)?.ipl.tokens_revealed.entry(revk)
+ .or_insert(TokenRevelationValue {
latest: now,
earliest: now,
})
.latest = now;
- acct.expire_tokens_revealed();
Ok::<_,MgmtError>((access, acctid))
})?.map_err(|(e,_)|e)??;
-
+
if reset {
self.save_access_now()?;
}