1package libkb 2 3import ( 4 "fmt" 5 "time" 6 7 gregor "github.com/keybase/client/go/gregor" 8 keybase1 "github.com/keybase/client/go/protocol/keybase1" 9 context "golang.org/x/net/context" 10) 11 12type nullTeamLoader struct { 13 Contextified 14} 15 16var _ TeamLoader = (*nullTeamLoader)(nil) 17 18func newNullTeamLoader(g *GlobalContext) *nullTeamLoader { 19 return &nullTeamLoader{NewContextified(g)} 20} 21 22// VerifyTeamName verifies that id corresponds to name and returns an error 23// if it doesn't. Right now, it is a Noop (and therefore insecure) to get 24// tests to pass. Once we have an actual implementation, we should change this 25// to error out in all cases. 26func (n nullTeamLoader) VerifyTeamName(ctx context.Context, id keybase1.TeamID, name keybase1.TeamName) error { 27 return fmt.Errorf("null team loader") 28} 29 30func (n nullTeamLoader) ImplicitAdmins(ctx context.Context, teamID keybase1.TeamID) (impAdmins []keybase1.UserVersion, err error) { 31 return nil, fmt.Errorf("null team loader") 32} 33 34func (n nullTeamLoader) MapTeamAncestors(ctx context.Context, f func(t keybase1.TeamSigChainState, n keybase1.TeamName) error, teamID keybase1.TeamID, reason string, forceFullReloadOnceToAssert func(t keybase1.TeamSigChainState) bool) error { 35 return fmt.Errorf("null team loader") 36} 37 38// MapIDToName maps the team ID to the corresponding name, and can be serviced 39// from the team cache. If no entry is available in the cache, it is OK to return 40// an empty/nil TeamName, and callers are free to try again with a server access 41// (this actually happens in the Resolver). 42func (n nullTeamLoader) MapIDToName(ctx context.Context, id keybase1.TeamID) (keybase1.TeamName, error) { 43 return keybase1.TeamName{}, fmt.Errorf("null team loader") 44} 45 46func (n nullTeamLoader) NotifyTeamRename(ctx context.Context, id keybase1.TeamID, newName string) error { 47 return nil 48} 49 50func (n nullTeamLoader) Load(context.Context, keybase1.LoadTeamArg) (*keybase1.TeamData, *keybase1.HiddenTeamChain, error) { 51 return nil, nil, fmt.Errorf("null team loader") 52} 53 54func (n nullTeamLoader) Freeze(context.Context, keybase1.TeamID) error { 55 return fmt.Errorf("null team loader") 56} 57 58func (n nullTeamLoader) Tombstone(context.Context, keybase1.TeamID) error { 59 return fmt.Errorf("null team loader") 60} 61 62func (n *nullTeamLoader) HintLatestSeqno(ctx context.Context, id keybase1.TeamID, seqno keybase1.Seqno) error { 63 return nil 64} 65 66func (n *nullTeamLoader) ResolveNameToIDUntrusted(ctx context.Context, teamName keybase1.TeamName, public bool, allowCache bool) (id keybase1.TeamID, err error) { 67 return id, fmt.Errorf("null team loader") 68} 69 70func (n *nullTeamLoader) ForceRepollUntil(ctx context.Context, t gregor.TimeOrOffset) error { 71 return nil 72} 73 74func (n *nullTeamLoader) IsOpenCached(ctx context.Context, teamID keybase1.TeamID) (bool, error) { 75 return false, fmt.Errorf("null team loader") 76} 77 78func (n nullTeamLoader) ClearMem() {} 79 80type nullFastTeamLoader struct{} 81 82var _ FastTeamLoader = nullFastTeamLoader{} 83 84func (n nullFastTeamLoader) Load(MetaContext, keybase1.FastTeamLoadArg) (keybase1.FastTeamLoadRes, error) { 85 return keybase1.FastTeamLoadRes{}, fmt.Errorf("null fast team loader") 86} 87 88func (n nullFastTeamLoader) HintLatestSeqno(_ MetaContext, _ keybase1.TeamID, _ keybase1.Seqno) error { 89 return nil 90} 91 92func (n nullFastTeamLoader) VerifyTeamName(_ MetaContext, _ keybase1.TeamID, _ keybase1.TeamName, _ bool) error { 93 return nil 94} 95 96func (n nullFastTeamLoader) ForceRepollUntil(_ MetaContext, _ gregor.TimeOrOffset) error { 97 return nil 98} 99 100func (n nullFastTeamLoader) Freeze(MetaContext, keybase1.TeamID) error { 101 return fmt.Errorf("null fast team loader") 102} 103 104func (n nullFastTeamLoader) Tombstone(MetaContext, keybase1.TeamID) error { 105 return fmt.Errorf("null fast team loader") 106} 107 108func newNullFastTeamLoader() nullFastTeamLoader { return nullFastTeamLoader{} } 109 110type nullTeamAuditor struct{} 111 112var _ TeamAuditor = nullTeamAuditor{} 113 114func (n nullTeamAuditor) AuditTeam(m MetaContext, id keybase1.TeamID, isPublic bool, headMerkleSeqno keybase1.Seqno, chain map[keybase1.Seqno]keybase1.LinkID, hiddenChain map[keybase1.Seqno]keybase1.LinkID, maxSeqno keybase1.Seqno, maxHiddenSeqno keybase1.Seqno, lastMerkleRoot *MerkleRoot, auditMode keybase1.AuditMode) (err error) { 115 return fmt.Errorf("null team auditor") 116} 117 118func newNullTeamAuditor() nullTeamAuditor { return nullTeamAuditor{} } 119 120type TeamAuditParams struct { 121 RootFreshness time.Duration 122 // After this many new Merkle updates, another audit is triggered. 123 MerkleMovementTrigger keybase1.Seqno 124 NumPreProbes int 125 NumPostProbes int 126 Parallelism int 127 LRUSize int 128} 129 130type nullTeamBoxAuditor struct{} 131 132var errNullBoxAuditor = fmt.Errorf("No team box auditor configured.") 133 134func attemptNullBoxAuditor() *keybase1.BoxAuditAttempt { 135 msg := errNullBoxAuditor.Error() 136 return &keybase1.BoxAuditAttempt{Error: &msg} 137} 138 139var _ TeamBoxAuditor = nullTeamBoxAuditor{} 140 141func (n nullTeamBoxAuditor) AssertUnjailedOrReaudit(m MetaContext, id keybase1.TeamID) (bool, error) { 142 return false, errNullBoxAuditor 143} 144 145func (n nullTeamBoxAuditor) IsInJail(m MetaContext, id keybase1.TeamID) (bool, error) { 146 return false, errNullBoxAuditor 147} 148func (n nullTeamBoxAuditor) RetryNextBoxAudit(m MetaContext) (*keybase1.BoxAuditAttempt, error) { 149 return attemptNullBoxAuditor(), errNullBoxAuditor 150} 151func (n nullTeamBoxAuditor) BoxAuditRandomTeam(m MetaContext) (*keybase1.BoxAuditAttempt, error) { 152 return attemptNullBoxAuditor(), errNullBoxAuditor 153} 154func (n nullTeamBoxAuditor) BoxAuditTeam(m MetaContext, id keybase1.TeamID) (*keybase1.BoxAuditAttempt, error) { 155 return attemptNullBoxAuditor(), errNullBoxAuditor 156} 157func (n nullTeamBoxAuditor) Attempt(m MetaContext, id keybase1.TeamID, rotateBeforeAudit bool) keybase1.BoxAuditAttempt { 158 return *attemptNullBoxAuditor() 159} 160func (n nullTeamBoxAuditor) MaybeScheduleDelayedBoxAuditTeam(mctx MetaContext, teamID keybase1.TeamID) { 161} 162 163func newNullTeamBoxAuditor() nullTeamBoxAuditor { return nullTeamBoxAuditor{} } 164 165type nullHiddenTeamChainManager struct{} 166 167var _ HiddenTeamChainManager = nullHiddenTeamChainManager{} 168 169func (n nullHiddenTeamChainManager) Tail(mctx MetaContext, id keybase1.TeamID) (*keybase1.LinkTriple, error) { 170 return nil, nil 171} 172 173func (n nullHiddenTeamChainManager) Ratchet(MetaContext, keybase1.TeamID, keybase1.HiddenTeamChainRatchetSet) error { 174 return nil 175} 176func (n nullHiddenTeamChainManager) Advance(MetaContext, keybase1.HiddenTeamChain, *keybase1.LinkTriple) error { 177 return nil 178} 179func (n nullHiddenTeamChainManager) Load(MetaContext, keybase1.TeamID) (*keybase1.HiddenTeamChain, error) { 180 return nil, fmt.Errorf("null hidden team chain manager") 181} 182func (n nullHiddenTeamChainManager) Tombstone(MetaContext, keybase1.TeamID) error { 183 return nil 184} 185func (n nullHiddenTeamChainManager) Freeze(MetaContext, keybase1.TeamID) error { 186 return nil 187} 188func (n nullHiddenTeamChainManager) HintLatestSeqno(m MetaContext, id keybase1.TeamID, seqno keybase1.Seqno) error { 189 return nil 190} 191func (n nullHiddenTeamChainManager) Shutdown(m MetaContext) {} 192 193func (n nullHiddenTeamChainManager) TeamSupportsHiddenChain(m MetaContext, id keybase1.TeamID) (state bool, err error) { 194 return false, fmt.Errorf("null hidden team chain manager") 195} 196 197func (n nullHiddenTeamChainManager) ClearSupportFlagIfFalse(m MetaContext, id keybase1.TeamID) {} 198 199func newNullHiddenTeamChainManager() nullHiddenTeamChainManager { 200 return nullHiddenTeamChainManager{} 201} 202 203type nullTeamRoleMapManager struct{} 204 205var _ TeamRoleMapManager = nullTeamRoleMapManager{} 206 207func newNullTeamRoleMapManager() nullTeamRoleMapManager { 208 return nullTeamRoleMapManager{} 209} 210 211func (n nullTeamRoleMapManager) Get(m MetaContext, retryOnFail bool) (res keybase1.TeamRoleMapAndVersion, err error) { 212 return res, nil 213} 214func (n nullTeamRoleMapManager) Update(m MetaContext, version keybase1.UserTeamVersion) (err error) { 215 return nil 216} 217func (n nullTeamRoleMapManager) FlushCache() {} 218