github.com/keybase/client/go@v0.0.0-20241007131713-f10651d043c8/contacts/interface.go (about) 1 // Copyright 2019 Keybase, Inc. All rights reserved. Use of 2 // this source code is governed by the included BSD license. 3 4 package contacts 5 6 import ( 7 "fmt" 8 "time" 9 10 "github.com/keybase/client/go/libkb" 11 "github.com/keybase/client/go/protocol/keybase1" 12 ) 13 14 type ContactLookupResult struct { 15 UID keybase1.UID `json:"uid,omitempty"` 16 Coerced string `json:"coerced,omitempty"` 17 Error string `json:"err,omitempty"` 18 } 19 20 type ContactLookupKey string 21 type ContactLookupResults struct { 22 Results map[ContactLookupKey]ContactLookupResult 23 // Results provided - or not provided - by this provider 24 // should are valid for the following amount of time: 25 ResolvedFreshness time.Duration 26 UnresolvedFreshness time.Duration 27 Token Token 28 } 29 30 func NewContactLookupResults() ContactLookupResults { 31 return ContactLookupResults{ 32 Results: make(map[ContactLookupKey]ContactLookupResult), 33 } 34 } 35 36 func (r *ContactLookupResults) FindComponent(component keybase1.ContactComponent) (res ContactLookupResult, found bool) { 37 var key ContactLookupKey 38 switch { 39 case component.Email != nil: 40 key = MakeEmailLookupKey(*component.Email) 41 case component.PhoneNumber != nil: 42 key = MakePhoneLookupKey(*component.PhoneNumber) 43 default: 44 return res, false 45 } 46 res, found = r.Results[key] 47 return res, found 48 } 49 50 func MakeEmailLookupKey(e keybase1.EmailAddress) ContactLookupKey { 51 return ContactLookupKey(fmt.Sprintf("e:%s", string(e))) 52 } 53 54 func MakePhoneLookupKey(p keybase1.RawPhoneNumber) ContactLookupKey { 55 return ContactLookupKey(fmt.Sprintf("p:%s", string(p))) 56 } 57 58 type ContactUsernameAndFullName struct { 59 Username string 60 Fullname string 61 } 62 63 type Token string 64 65 const NoneToken Token = "" 66 67 type ContactsProvider interface { 68 LookupAllWithToken(libkb.MetaContext, []keybase1.EmailAddress, []keybase1.RawPhoneNumber, Token) (ContactLookupResults, error) 69 LookupAll(libkb.MetaContext, []keybase1.EmailAddress, []keybase1.RawPhoneNumber) (ContactLookupResults, error) 70 FindUsernames(libkb.MetaContext, []keybase1.UID) (map[keybase1.UID]ContactUsernameAndFullName, error) 71 FindFollowing(libkb.MetaContext, []keybase1.UID) (map[keybase1.UID]bool, error) 72 FindServiceMaps(libkb.MetaContext, []keybase1.UID) (map[keybase1.UID]libkb.UserServiceSummary, error) 73 }