github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/teams/storage/hidden.go (about)

     1  package storage
     2  
     3  import (
     4  	"fmt"
     5  	"github.com/keybase/client/go/libkb"
     6  	"github.com/keybase/client/go/protocol/keybase1"
     7  )
     8  
     9  // HiddenStorage stores Hidden state to disk or memory.
    10  type HiddenStorage struct {
    11  	*storageGeneric
    12  }
    13  
    14  // Increment to invalidate the disk cache.
    15  const hiddenDiskStorageVersion = 1
    16  const hiddenMemCacheLRUSize = 200
    17  
    18  type hiddenDiskStorageItem struct {
    19  	Version int                       `codec:"V"`
    20  	State   *keybase1.HiddenTeamChain `codec:"S"`
    21  }
    22  
    23  var _ teamDataGeneric = (*keybase1.HiddenTeamChain)(nil)
    24  var _ diskItemGeneric = (*hiddenDiskStorageItem)(nil)
    25  
    26  func (d *hiddenDiskStorageItem) version() int {
    27  	return d.Version
    28  }
    29  func (d *hiddenDiskStorageItem) value() teamDataGeneric {
    30  	return d.State
    31  }
    32  func (d *hiddenDiskStorageItem) setVersion(i int) {
    33  	d.Version = i
    34  }
    35  func (d *hiddenDiskStorageItem) setValue(v teamDataGeneric) error {
    36  	typed, ok := v.(*keybase1.HiddenTeamChain)
    37  	if !ok {
    38  		return fmt.Errorf("teams/storage.Hidden#Put: Bad object for setValue; got type %T", v)
    39  	}
    40  	d.State = typed
    41  	return nil
    42  }
    43  
    44  func NewHiddenStorage(g *libkb.GlobalContext) *HiddenStorage {
    45  	s := newStorageGeneric(g, hiddenMemCacheLRUSize, hiddenDiskStorageVersion, libkb.DBHiddenChainStorage, libkb.EncryptionReasonTeamsHiddenLocalStorage, "hidden", func() diskItemGeneric { return &hiddenDiskStorageItem{} })
    46  	return &HiddenStorage{s}
    47  }
    48  
    49  func (s *HiddenStorage) Put(mctx libkb.MetaContext, state *keybase1.HiddenTeamChain) {
    50  	s.storageGeneric.put(mctx, state)
    51  }
    52  
    53  // Can return nil.
    54  func (s *HiddenStorage) Get(mctx libkb.MetaContext, teamID keybase1.TeamID, public bool) (state *keybase1.HiddenTeamChain, frozen bool, tombstoned bool) {
    55  	vp := s.storageGeneric.get(mctx, teamID, public)
    56  	if vp == nil {
    57  		return nil, false, false
    58  	}
    59  	ret, ok := vp.(*keybase1.HiddenTeamChain)
    60  	if !ok {
    61  		mctx.Debug("teams.storage/Hidden#Get cast error: %T is wrong type", vp)
    62  	}
    63  	if ret.Frozen {
    64  		mctx.Debug("returning frozen hidden team data")
    65  	}
    66  	if ret.Tombstoned {
    67  		mctx.Debug("returning tombstoned hidden team data")
    68  	}
    69  	s.upgrade(mctx, ret)
    70  	return ret, ret.Frozen, ret.Tombstoned
    71  }
    72  
    73  func (s *HiddenStorage) upgrade(mctx libkb.MetaContext, ret *keybase1.HiddenTeamChain) {
    74  	if ret == nil {
    75  		return
    76  	}
    77  	// We added LastFull after the fact, so go back and populate this field if it wasn't
    78  	// read in from the object.
    79  	if ret.Subversion < 1 {
    80  		mctx.Debug("HiddenStorage#upgrade: upgrading from 1.0 to 1.1 (running PopulateLastFull())")
    81  		ret.PopulateLastFull()
    82  		ret.Subversion = 1
    83  	}
    84  }