chiark / gitweb /
wip move TokensRevealed
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 12 Nov 2020 12:12:30 +0000 (12:12 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 12 Nov 2020 12:12:30 +0000 (12:12 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/accounts.rs
src/cmdlistener.rs
src/global.rs

index cbc277a66813bca5585e9d4ea9419492c32f16c7..d7003090ffb9aeead5caf89cea709eacd85b0322 100644 (file)
@@ -57,13 +57,19 @@ pub struct AccountRecord {
   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,
 }
index 00c47ae44932320e5de5917dea0fb9a4ac869d22..df56424a272fe975c5660b0d80d38c65889f62f2 100644 (file)
@@ -99,7 +99,6 @@ fn execute(cs: &mut CommandStream, cmd: MgmtCommand) -> MgmtResponse {
       let record = AccountRecord {
         account, nick, access,
         timezone: timezone.unwrap_or_default(),
-        tokens_revealed: default(),
       };
       ag.insert_entry(record, auth)?;
       Fine
@@ -315,6 +314,7 @@ fn execute_game_insn<'cs, 'igr, 'ig : 'igr>(
       let ipl = IPlayerState {
         acctid,
         tz,
+        tokens_revealed: default(),
       };
       let (player, logentry) = ig.player_new(gpl, ipl, logentry)?;
 
index 2d2ea9b499c0657a18d281f36a498bb59b256591..4b703b9cf3b032e6ed4e1f02f1c94dbc05dde32a 100644 (file)
@@ -56,6 +56,7 @@ pub struct PlayerRecord {
 #[derive(Debug,Clone,Serialize,Deserialize)]
 pub struct IPlayerState {
   pub acctid: AccountId,
+  pub tokens_revealed: HashMap<TokenRevelationKey, TokenRevelationValue>,
   pub tz: Timezone,
 }
 
@@ -641,7 +642,7 @@ impl<'ig> InstanceGuard<'ig> {
                                    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,
@@ -650,16 +651,19 @@ impl<'ig> InstanceGuard<'ig> {
       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()?;
     }