teams

package
v1.0.33 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 3, 2017 License: BSD-3-Clause, BSD-3-Clause Imports: 30 Imported by: 0

Documentation

Overview

Similar to libkb/kbsigs.go, but for teams sigs.

Index

Constants

View Source
const MemCacheLRUSize = 50
View Source
const TeamSigChainPlayerSupportedLinkVersion = 2

Variables

This section is empty.

Functions

func AcceptInvite

func AcceptInvite(ctx context.Context, g *libkb.GlobalContext, token string) error

func AddMember

func AddMember(ctx context.Context, g *libkb.GlobalContext, teamname, username string, role keybase1.TeamRole) (keybase1.TeamAddMemberResult, error)

func ChangeRoles

func ChangeRoles(ctx context.Context, g *libkb.GlobalContext, teamname string, req keybase1.TeamChangeReq) error

func ChangeSig

func ChangeSig(me *libkb.User, prev libkb.LinkID, seqno keybase1.Seqno, key libkb.GenericKey, teamSection SCTeamSection, linkType libkb.LinkType, merkleRoot *libkb.MerkleRoot) (*jsonw.Wrapper, error)

func ChangeTeamSettings added in v1.0.33

func ChangeTeamSettings(ctx context.Context, g *libkb.GlobalContext, teamID keybase1.TeamID, open bool) error

func CreateImplicitTeam added in v1.0.29

func CreateImplicitTeam(ctx context.Context, g *libkb.GlobalContext, impTeam keybase1.ImplicitTeamDisplayName) (res keybase1.TeamID, err error)

func CreateRootTeam

func CreateRootTeam(ctx context.Context, g *libkb.GlobalContext, name string, settings keybase1.TeamSettings) (err error)

func CreateSubteam

func CreateSubteam(ctx context.Context, g *libkb.GlobalContext, subteamBasename string, parentName keybase1.TeamName) (ret *keybase1.TeamID, err error)

func Delete

func Details

func Details(ctx context.Context, g *libkb.GlobalContext, name string, forceRepoll bool) (res keybase1.TeamDetails, err error)

func EditMember

func EditMember(ctx context.Context, g *libkb.GlobalContext, teamname, username string, role keybase1.TeamRole) error

func FormatImplicitTeamDisplayName added in v1.0.29

func FormatImplicitTeamDisplayName(ctx context.Context, g *libkb.GlobalContext, impTeamName keybase1.ImplicitTeamDisplayName) (string, error)

func FormatImplicitTeamDisplayNameWithUserFront added in v1.0.30

func FormatImplicitTeamDisplayNameWithUserFront(ctx context.Context, g *libkb.GlobalContext, impTeamName keybase1.ImplicitTeamDisplayName, frontName libkb.NormalizedUsername) (string, error)

Format an implicit display name, but order the specified username first in each of the writer and reader lists if it appears.

func HandleChangeNotification

func HandleChangeNotification(ctx context.Context, g *libkb.GlobalContext, rows []keybase1.TeamChangeRow, changes keybase1.TeamChangeSet) (err error)

func HandleDeleteNotification added in v1.0.30

func HandleDeleteNotification(ctx context.Context, g *libkb.GlobalContext, rows []keybase1.TeamChangeRow) (err error)

func HandleExitNotification added in v1.0.33

func HandleExitNotification(ctx context.Context, g *libkb.GlobalContext, rows []keybase1.TeamExitRow) (err error)

func HandleOpenTeamAccessRequest added in v1.0.33

func HandleOpenTeamAccessRequest(ctx context.Context, g *libkb.GlobalContext, msg keybase1.TeamOpenReqMsg) (err error)

func HandleRotateRequest

func HandleRotateRequest(ctx context.Context, g *libkb.GlobalContext, teamID keybase1.TeamID, generation keybase1.PerTeamKeyGeneration) (err error)

func HandleSBSRequest

func HandleSBSRequest(ctx context.Context, g *libkb.GlobalContext, msg keybase1.TeamSBSMsg) (err error)

func IgnoreRequest

func IgnoreRequest(ctx context.Context, g *libkb.GlobalContext, teamname, username string) error

func InviteEmailMember

func InviteEmailMember(ctx context.Context, g *libkb.GlobalContext, teamname, email string, role keybase1.TeamRole) error

func Leave

func Leave(ctx context.Context, g *libkb.GlobalContext, teamname string, permanent bool) error

func List

List info about teams If an error is encountered while loading some teams, the team is skipped and no error is returned. If an error occurs loading all the info, an error is returned.

func ListSubteamsRecursive added in v1.0.33

func ListSubteamsRecursive(ctx context.Context, g *libkb.GlobalContext, parentTeamName string, forceRepoll bool) (res []keybase1.TeamIDAndName, err error)

func LookupImplicitTeam added in v1.0.29

func LookupImplicitTeam(ctx context.Context, g *libkb.GlobalContext, displayName string, public bool) (
	teamID keybase1.TeamID, impTeamName keybase1.ImplicitTeamDisplayName, err error)

Lookup an implicit team by name like "alice,bob+bob@twitter (conflicted 2017-03-04 #1)" Resolves social assertions.

func LookupImplicitTeamAndConflicts added in v1.0.30

func LookupImplicitTeamAndConflicts(ctx context.Context, g *libkb.GlobalContext, displayName string, public bool) (
	teamID keybase1.TeamID, impTeamName keybase1.ImplicitTeamDisplayName, conflicts []keybase1.ImplicitTeamConflictInfo, err error)

Lookup an implicit team by name like "alice,bob+bob@twitter (conflicted 2017-03-04 #1)" Resolves social assertions.

func LookupOrCreateImplicitTeam added in v1.0.29

func LookupOrCreateImplicitTeam(ctx context.Context, g *libkb.GlobalContext, displayName string, public bool) (res keybase1.TeamID, impTeamName keybase1.ImplicitTeamDisplayName, err error)

Lookup or create an implicit team by name like "alice,bob+bob@twitter (conflicted 2017-03-04 #1)" Resolves social assertions.

func MemberRole

func MemberRole(ctx context.Context, g *libkb.GlobalContext, teamname, username string) (keybase1.TeamRole, error)

func NewImplicitTeamName added in v1.0.29

func NewImplicitTeamName() (res keybase1.TeamName, err error)

func NewImplicitTeamOperationError added in v1.0.29

func NewImplicitTeamOperationError(format string, args ...interface{}) error

func NewKeyMaskNotFoundErrorForApplication added in v1.0.29

func NewKeyMaskNotFoundErrorForApplication(a keybase1.TeamApplication) libkb.KeyMaskNotFoundError

func NewKeyMaskNotFoundErrorForApplicationAndGeneration added in v1.0.29

func NewKeyMaskNotFoundErrorForApplicationAndGeneration(a keybase1.TeamApplication, g keybase1.PerTeamKeyGeneration) libkb.KeyMaskNotFoundError

func NewPrevError

func NewPrevError(format string, args ...interface{}) error

func NewSubteamID

func NewSubteamID() keybase1.TeamID

15 random bytes, followed by the byte 0x25, encoded as hex

func NewSubteamSig

func NewSubteamSig(me *libkb.User, key libkb.GenericKey, parentTeam *TeamSigChainState, subteamName keybase1.TeamName, subteamID keybase1.TeamID, admin *SCTeamAdmin) (*jsonw.Wrapper, error)

func NewTeamDoesNotExistError

func NewTeamDoesNotExistError(format string, args ...interface{}) error

func NewUserVersion

func NewUserVersion(uid keybase1.UID, eldestSeqno keybase1.Seqno) keybase1.UserVersion

Create a new user/version pair.

func ReAddMemberAfterReset added in v1.0.29

func ReAddMemberAfterReset(ctx context.Context, g *libkb.GlobalContext, teamID keybase1.TeamID, username string) error

func RemoveMember

func RemoveMember(ctx context.Context, g *libkb.GlobalContext, teamname, username string) error

func RenameSubteam

func RenameSubteam(ctx context.Context, g *libkb.GlobalContext, prevName keybase1.TeamName, newName keybase1.TeamName) error

func RenameSubteamSig

func RenameSubteamSig(me *libkb.User, key libkb.GenericKey, parentTeam *TeamSigChainState, teamSection SCTeamSection) (*jsonw.Wrapper, error)

func RenameUpPointerSig

func RenameUpPointerSig(me *libkb.User, key libkb.GenericKey, subteam *TeamSigChainState, teamSection SCTeamSection) (*jsonw.Wrapper, error)

func RequestAccess

func RequestAccess(ctx context.Context, g *libkb.GlobalContext, teamname string) error

func ResolveIDToName

func ResolveIDToName(ctx context.Context, g *libkb.GlobalContext, id keybase1.TeamID) (name keybase1.TeamName, err error)

ResolveIDToName takes a team ID and resolves it to a name. It can use server-assist but always cryptographically checks the result.

func ResolveImplicitTeamDisplayName added in v1.0.31

func ResolveImplicitTeamDisplayName(ctx context.Context, g *libkb.GlobalContext,
	name string, public bool) (res keybase1.ImplicitTeamDisplayName, err error)

Resolve assertions in an implicit team display name and verify the result. Resolve an implicit team name with assertions like "alice,bob+bob@twitter#char (conflicted 2017-03-04 #1)" Into "alice,bob#char (conflicted 2017-03-04 #1)" The input can contain compound assertions, but if compound assertions are left unresolved, an error will be returned.

func ResolveImplicitTeamSetUntrusted added in v1.0.31

func ResolveImplicitTeamSetUntrusted(ctx context.Context, g *libkb.GlobalContext,
	sourceAssertions []libkb.AssertionExpression, resSet *keybase1.ImplicitTeamUserSet, resolvedAssertions *[]libkb.ResolvedAssertion) error

Try to resolve implicit team members. Modifies the arguments `resSet` and appends to `resolvedAssertions`. For each assertion in `sourceAssertions`, try to resolve them.

If they resolve, add the username to `resSet` and the assertion to `resolvedAssertions`.
If they don't resolve, add the SocialAssertion to `resSet`, but nothing to `resolvedAssertions`.

func ResolveNameToID

func ResolveNameToID(ctx context.Context, g *libkb.GlobalContext, name keybase1.TeamName) (id keybase1.TeamID, err error)

ResolveNameToID takes a team name and resolves it to a team ID. It can use server-assist but always cryptographically checks the result.

func RootTeamIDFromName

func RootTeamIDFromName(n keybase1.TeamName) keybase1.TeamID

func RootTeamIDFromNameString

func RootTeamIDFromNameString(name string) keybase1.TeamID

the first 15 bytes of the sha256 of the lowercase team name, followed by the byte 0x24, encoded as hex

func SetRoleAdmin

func SetRoleAdmin(ctx context.Context, g *libkb.GlobalContext, teamname, username string) error

func SetRoleOwner

func SetRoleOwner(ctx context.Context, g *libkb.GlobalContext, teamname, username string) error

func SetRoleReader

func SetRoleReader(ctx context.Context, g *libkb.GlobalContext, teamname, username string) error

func SetRoleWriter

func SetRoleWriter(ctx context.Context, g *libkb.GlobalContext, teamname, username string) error

func SubteamHeadSig

func SubteamHeadSig(me *libkb.User, key libkb.GenericKey, subteamTeamSection SCTeamSection) (*jsonw.Wrapper, error)

func TeamAcceptInviteOrRequestAccess added in v1.0.30

func TeamAcceptInviteOrRequestAccess(ctx context.Context, g *libkb.GlobalContext, tokenOrName string) error

func TeamRootSig

func TeamRootSig(me *libkb.User, key libkb.GenericKey, teamSection SCTeamSection) (*jsonw.Wrapper, error)

Types

type AdminNotFoundError

type AdminNotFoundError struct {
	Admin SCTeamAdmin
}

func NewAdminNotFoundError

func NewAdminNotFoundError(a SCTeamAdmin) AdminNotFoundError

func (AdminNotFoundError) Error

func (e AdminNotFoundError) Error() string

type AdminPermissionError

type AdminPermissionError struct {
	TeamID      keybase1.TeamID
	UserVersion keybase1.UserVersion
	Desc        string
}

func (AdminPermissionError) Error

func (e AdminPermissionError) Error() string

type AppendLinkError

type AppendLinkError struct {
	// contains filtered or unexported fields
}

func NewAppendLinkError

func NewAppendLinkError(l *chainLinkUnpacked, prevSeqno keybase1.Seqno, inner error) AppendLinkError

func (AppendLinkError) Error

func (e AppendLinkError) Error() string

type DiskStorage

type DiskStorage struct {
	libkb.Contextified
	sync.Mutex
	// contains filtered or unexported fields
}

Store TeamData's on disk. Threadsafe.

func NewDiskStorage

func NewDiskStorage(g *libkb.GlobalContext) *DiskStorage

func (*DiskStorage) Delete added in v1.0.33

func (s *DiskStorage) Delete(ctx context.Context, teamID keybase1.TeamID) error

func (*DiskStorage) Get

func (s *DiskStorage) Get(ctx context.Context, teamID keybase1.TeamID) (res *keybase1.TeamData, found bool, err error)

Res is valid if (found && err == nil)

func (*DiskStorage) Put

func (s *DiskStorage) Put(ctx context.Context, state *keybase1.TeamData) error

type DiskStorageItem

type DiskStorageItem struct {
	Version int                `codec:"V"`
	State   *keybase1.TeamData `codec:"S"`
}

type ImplicitTeamOperationError added in v1.0.29

type ImplicitTeamOperationError struct {
	// contains filtered or unexported fields
}

func (ImplicitTeamOperationError) Error added in v1.0.29

type InflateError

type InflateError struct {
	// contains filtered or unexported fields
}

func NewInflateError

func NewInflateError(l *chainLinkUnpacked) InflateError

func NewInflateErrorWithNote

func NewInflateErrorWithNote(l *chainLinkUnpacked, note string) InflateError

func (InflateError) Error

func (e InflateError) Error() string
type InvalidLink struct {
	// contains filtered or unexported fields
}
func NewInvalidLink(l *chainLinkUnpacked, format string, args ...interface{}) InvalidLink

func (InvalidLink) Error

func (e InvalidLink) Error() string

type InviteError

type InviteError struct {
	// contains filtered or unexported fields
}

func NewInviteError

func NewInviteError(m string) InviteError

func (InviteError) Error

func (i InviteError) Error() string

type LameSecretUI

type LameSecretUI struct{}

func (LameSecretUI) GetPassphrase

func (d LameSecretUI) GetPassphrase(pinentry keybase1.GUIEntryArg, terminal *keybase1.SecretEntryArg) (keybase1.GetPassphraseRes, error)

type LoaderContext

type LoaderContext interface {
	// contains filtered or unexported methods
}

Things TeamLoader uses that are mocked out for tests.

func NewLoaderContextFromG

func NewLoaderContextFromG(g *libkb.GlobalContext) LoaderContext

type LoaderContextG

type LoaderContextG struct {
	libkb.Contextified
}

The main LoaderContext is G.

type MemberChecker

type MemberChecker interface {
	IsMember(context.Context, keybase1.UserVersion) bool
}

type MemoryStorage

type MemoryStorage struct {
	libkb.Contextified
	// contains filtered or unexported fields
}

Store some TeamSigChainState's in memory. Threadsafe.

func NewMemoryStorage

func NewMemoryStorage(g *libkb.GlobalContext) *MemoryStorage

func (*MemoryStorage) Delete added in v1.0.33

func (s *MemoryStorage) Delete(ctx context.Context, teamID keybase1.TeamID)

func (*MemoryStorage) Get

Can return nil.

func (*MemoryStorage) Put

func (s *MemoryStorage) Put(ctx context.Context, state *keybase1.TeamData)

type PerTeamSharedSecretBox

type PerTeamSharedSecretBox struct {
	Version         uint
	PerUserKeySeqno keybase1.Seqno
	NonceCounter    uint32
	Ctext           []byte
	// contains filtered or unexported fields
}

type PerTeamSharedSecretBoxes

type PerTeamSharedSecretBoxes struct {
	Generation    keybase1.PerTeamKeyGeneration `json:"generation"`
	EncryptingKid keybase1.KID                  `json:"encrypting_kid"`
	Nonce         string                        `json:"nonce"`
	PrevKey       *prevKeySealedEncoded         `json:"prev"`
	Boxes         map[keybase1.UID]string       `json:"boxes"`
}

type PermissionError

type PermissionError struct {
	TeamID      keybase1.TeamID
	UserVersion keybase1.UserVersion
	Desc        string
}

func (PermissionError) Error

func (e PermissionError) Error() string

type PrevError

type PrevError struct {
	Msg string
}

func (PrevError) Error

func (e PrevError) Error() string

type ProofError

type ProofError struct {
	// contains filtered or unexported fields
}

func NewProofError

func NewProofError(p proof, s string) ProofError

func (ProofError) Error

func (p ProofError) Error() string

type ResolveError

type ResolveError struct {
	// contains filtered or unexported fields
}

func NewResolveError

func NewResolveError(name keybase1.TeamName, id keybase1.TeamID) ResolveError

func (ResolveError) Error

func (e ResolveError) Error() string
type SCChainLink struct {
	Seqno keybase1.Seqno `json:"seqno"`
	Sig   string         `json:"sig"`
	// string containing json of a SCChainLinkPayload.
	Payload string `json:"payload_json"`
	// uid of the signer
	UID     keybase1.UID `json:"uid"`
	Version int          `json:"version"`
}
func ParseTeamChainLink(link string) (res SCChainLink, err error)

Parse a chain link from a string. Just parses, does not validate.

func (*SCChainLink) UnmarshalPayload

func (link *SCChainLink) UnmarshalPayload() (res SCChainLinkPayload, err error)

type SCChainLinkPayload

type SCChainLinkPayload struct {
	Body     SCPayloadBody    `json:"body,omitempty"`
	Ctime    int              `json:"ctime,omitempty"`
	ExpireIn int              `json:"expire_in,omitempty"`
	Prev     *string          `json:"prev,omitempty"`
	SeqType  keybase1.SeqType `json:"seq_type,omitempty"`
	Seqno    keybase1.Seqno   `json:"seqno,omitempty"`
	Tag      string           `json:"tag,omitempty"`
}

func (SCChainLinkPayload) SigChainLocation

func (s SCChainLinkPayload) SigChainLocation() keybase1.SigChainLocation

func (*SCChainLinkPayload) SignatureMetadata

func (i *SCChainLinkPayload) SignatureMetadata() keybase1.SignatureMetadata

func (SCChainLinkPayload) TeamAdmin

func (s SCChainLinkPayload) TeamAdmin() *SCTeamAdmin

func (SCChainLinkPayload) TeamID

func (s SCChainLinkPayload) TeamID() (keybase1.TeamID, error)

type SCKeySection

type SCKeySection struct {
	KID       keybase1.KID `json:"kid"`
	UID       keybase1.UID `json:"uid"`
	Username  string       `json:"username,omitempty"`
	EldestKID keybase1.KID `json:"eldest_kid"`
	Host      string       `json:"host,omitempty"`
}

type SCMerkleRootSection

type SCMerkleRootSection struct {
	Ctime    int               `json:"ctime"`
	Seqno    keybase1.Seqno    `json:"seqno"`
	HashMeta keybase1.HashMeta `json:"hash_meta"`
}

func (SCMerkleRootSection) ToMerkleRootV2

func (sr SCMerkleRootSection) ToMerkleRootV2() keybase1.MerkleRootV2

type SCPayloadBody

type SCPayloadBody struct {
	Key        *SCKeySection       `json:"key,omitempty"`
	Type       string              `json:"type,omitempty"`
	MerkleRoot SCMerkleRootSection `json:"merkle_root"`
	Version    int                 `json:"version"`

	Team *SCTeamSection `json:"team,omitempty"`
}

type SCPerTeamKey

type SCPerTeamKey struct {
	Generation keybase1.PerTeamKeyGeneration `json:"generation"`
	EncKID     keybase1.KID                  `json:"encryption_kid"`
	SigKID     keybase1.KID                  `json:"signing_kid"`
	ReverseSig string                        `json:"reverse_sig"`
}

type SCSubteam

type SCSubteam struct {
	ID   SCTeamID   `json:"id"`
	Name SCTeamName `json:"name"`
}

type SCTeamAdmin

type SCTeamAdmin struct {
	TeamID  SCTeamID         `json:"team_id"`
	Seqno   keybase1.Seqno   `json:"seqno"`
	SeqType keybase1.SeqType `json:"seq_type"`
}

func (SCTeamAdmin) SigChainLocation

func (a SCTeamAdmin) SigChainLocation() keybase1.SigChainLocation

type SCTeamEntropy added in v1.0.31

type SCTeamEntropy string

SCTeamEntropy is used to render stubbed out links unguessable. Basically, we shove a random 18-byte string into sensitive links.

type SCTeamID

type SCTeamID string

func (SCTeamID) ToTeamID

func (s SCTeamID) ToTeamID() (keybase1.TeamID, error)

type SCTeamInvite

type SCTeamInvite struct {
	Type string                  `json:"type"`
	Name keybase1.TeamInviteName `json:"name"`
	ID   SCTeamInviteID          `json:"id"`
}

func (SCTeamInvite) TeamInvite

type SCTeamInviteID

type SCTeamInviteID string

func NewInviteID

func NewInviteID() SCTeamInviteID

func (SCTeamInviteID) TeamInviteID

func (i SCTeamInviteID) TeamInviteID() (keybase1.TeamInviteID, error)

type SCTeamInvites

type SCTeamInvites struct {
	Owners  *[]SCTeamInvite   `json:"owner,omitempty"`
	Admins  *[]SCTeamInvite   `json:"admin,omitempty"`
	Writers *[]SCTeamInvite   `json:"writer,omitempty"`
	Readers *[]SCTeamInvite   `json:"reader,omitempty"`
	Cancel  *[]SCTeamInviteID `json:"cancel,omitempty"`
}

type SCTeamMember

type SCTeamMember keybase1.UserVersion

A (username, seqno) pair. The username is adorned with "%n" at the end where n is the seqno IF the seqno is not 1.

func (*SCTeamMember) MarshalJSON

func (s *SCTeamMember) MarshalJSON() (b []byte, err error)

func (*SCTeamMember) UnmarshalJSON

func (s *SCTeamMember) UnmarshalJSON(b []byte) (err error)

type SCTeamMembers

type SCTeamMembers struct {
	Owners  *[]SCTeamMember `json:"owner,omitempty"`
	Admins  *[]SCTeamMember `json:"admin,omitempty"`
	Writers *[]SCTeamMember `json:"writer,omitempty"`
	Readers *[]SCTeamMember `json:"reader,omitempty"`
	None    *[]SCTeamMember `json:"none,omitempty"`
}

type SCTeamName

type SCTeamName string

type SCTeamParent

type SCTeamParent struct {
	ID      SCTeamID         `json:"id"`
	Seqno   keybase1.Seqno   `json:"seqno"`
	SeqType keybase1.SeqType `json:"seq_type"`
}

type SCTeamSection

type SCTeamSection struct {
	ID               SCTeamID                                                  `json:"id"`
	Name             *SCTeamName                                               `json:"name,omitempty"`
	Members          *SCTeamMembers                                            `json:"members,omitempty"`
	Parent           *SCTeamParent                                             `json:"parent,omitempty"`
	Subteam          *SCSubteam                                                `json:"subteam,omitempty"`
	PerTeamKey       *SCPerTeamKey                                             `json:"per_team_key,omitempty"`
	Admin            *SCTeamAdmin                                              `json:"admin,omitempty"`
	Invites          *SCTeamInvites                                            `json:"invites,omitempty"`
	CompletedInvites map[keybase1.TeamInviteID]keybase1.UserVersionPercentForm `json:"completed_invites,omitempty"`
	Implicit         bool                                                      `json:"is_implicit,omitempty"`
	Public           bool                                                      `json:"is_public,omitempty"`
	Entropy          SCTeamEntropy                                             `json:"entropy,omitempty"`
	Settings         *SCTeamSettings                                           `json:"settings,omitempty"`
}

type SCTeamSettings added in v1.0.33

type SCTeamSettings struct {
	Open *SCTeamSettingsOpen `json:"open,omitempty"`
}

func CreateTeamSettings added in v1.0.33

func CreateTeamSettings(open bool, joinAs keybase1.TeamRole) (SCTeamSettings, error)

type SCTeamSettingsOpen added in v1.0.33

type SCTeamSettingsOpen struct {
	Enabled bool                       `json:"enabled"`
	Options *SCTeamSettingsOpenOptions `json:"options,omitempty"`
}

type SCTeamSettingsOpenOptions added in v1.0.33

type SCTeamSettingsOpenOptions struct {
	JoinAs string `json:"join_as"`
}

type Storage

type Storage struct {
	libkb.Contextified
	sync.Mutex
	// contains filtered or unexported fields
}

Store TeamData's on memory and disk. Threadsafe.

func NewStorage

func NewStorage(g *libkb.GlobalContext) *Storage

func (*Storage) Delete added in v1.0.33

func (s *Storage) Delete(ctx context.Context, teamID keybase1.TeamID) error

func (*Storage) Get

func (s *Storage) Get(ctx context.Context, teamID keybase1.TeamID) *keybase1.TeamData

Can return nil.

func (*Storage) Put

func (s *Storage) Put(ctx context.Context, state *keybase1.TeamData)

type StubbedError

type StubbedError struct {
	// contains filtered or unexported fields
}

func NewStubbedError

func NewStubbedError(l *chainLinkUnpacked) StubbedError

func NewStubbedErrorWithNote

func NewStubbedErrorWithNote(l *chainLinkUnpacked, note string) StubbedError

func (StubbedError) Error

func (e StubbedError) Error() string

type Team

type Team struct {
	libkb.Contextified

	ID   keybase1.TeamID
	Data *keybase1.TeamData
	// contains filtered or unexported fields
}

func GetForTeamManagementByStringName

func GetForTeamManagementByStringName(ctx context.Context, g *libkb.GlobalContext, name string, needAdmin bool) (*Team, error)

needAdmin must be set when interacting with links that have a possibility of being stubbed.

func GetForTeamManagementByTeamID added in v1.0.29

func GetForTeamManagementByTeamID(ctx context.Context, g *libkb.GlobalContext, id keybase1.TeamID, needAdmin bool) (*Team, error)

func GetMaybeAdminByStringName

func GetMaybeAdminByStringName(ctx context.Context, g *libkb.GlobalContext, name string) (*Team, error)

Get a team with no stubbed links if we are an admin. Use this instead of NeedAdmin when you don't know whether you are an admin. This always causes roundtrips. Doesn't work for implicit admins.

func Load

Load a Team from the TeamLoader. Can be called from inside the teams package.

func NewTeam

func NewTeam(ctx context.Context, g *libkb.GlobalContext, teamData *keybase1.TeamData) *Team

func (*Team) AllAdmins

func (t *Team) AllAdmins(ctx context.Context) ([]keybase1.UserVersion, error)

func (*Team) AllApplicationKeys

func (t *Team) AllApplicationKeys(ctx context.Context, application keybase1.TeamApplication) (res []keybase1.TeamApplicationKey, err error)

func (*Team) ApplicationKey

func (t *Team) ApplicationKey(ctx context.Context, application keybase1.TeamApplication) (keybase1.TeamApplicationKey, error)

ApplicationKey returns the most recent key for an application.

func (*Team) ApplicationKeyAtGeneration

func (t *Team) ApplicationKeyAtGeneration(
	application keybase1.TeamApplication, generation keybase1.PerTeamKeyGeneration) (res keybase1.TeamApplicationKey, err error)

func (*Team) ChangeMembership

func (t *Team) ChangeMembership(ctx context.Context, req keybase1.TeamChangeReq) error

func (*Team) ChatKey

func (t *Team) ChatKey(ctx context.Context) (keybase1.TeamApplicationKey, error)

func (*Team) CurrentSeqno

func (t *Team) CurrentSeqno() keybase1.Seqno

func (*Team) ExportToTeamPlusApplicationKeys

func (t *Team) ExportToTeamPlusApplicationKeys(ctx context.Context, idTime keybase1.Time, application keybase1.TeamApplication) (ret keybase1.TeamPlusApplicationKeys, err error)

func (*Team) ForceMerkleRootUpdate

func (t *Team) ForceMerkleRootUpdate(ctx context.Context) error

ForceMerkleRootUpdate will call LookupTeam on MerkleClient to update cached merkle root to include latest team sigs. Needed if client wants to create a signature that refers to an adminship, signature's merkle_root has to be more fresh than adminship's.

func (*Team) Generation

func (t *Team) Generation() keybase1.PerTeamKeyGeneration

func (*Team) GitMetadataKey added in v1.0.30

func (t *Team) GitMetadataKey(ctx context.Context) (keybase1.TeamApplicationKey, error)

func (*Team) HasActiveInvite

func (t *Team) HasActiveInvite(name keybase1.TeamInviteName, typ string) (bool, error)

func (*Team) ImplicitTeamDisplayName added in v1.0.29

func (t *Team) ImplicitTeamDisplayName(ctx context.Context) (res keybase1.ImplicitTeamDisplayName, err error)

func (*Team) ImplicitTeamDisplayNameString added in v1.0.29

func (t *Team) ImplicitTeamDisplayNameString(ctx context.Context) (string, error)

func (*Team) InviteEmailMember

func (t *Team) InviteEmailMember(ctx context.Context, email string, role keybase1.TeamRole) error

func (*Team) InviteMember

func (t *Team) InviteMember(ctx context.Context, username string, role keybase1.TeamRole, resolvedUsername libkb.NormalizedUsername, uv keybase1.UserVersion) (keybase1.TeamAddMemberResult, error)

func (*Team) IsImplicit added in v1.0.30

func (t *Team) IsImplicit() bool

func (*Team) IsMember

func (t *Team) IsMember(ctx context.Context, uv keybase1.UserVersion) bool

func (*Team) IsOpen added in v1.0.33

func (t *Team) IsOpen() bool

func (*Team) IsPublic added in v1.0.29

func (t *Team) IsPublic() bool

func (*Team) KBFSKey

func (t *Team) KBFSKey(ctx context.Context) (keybase1.TeamApplicationKey, error)

func (*Team) Leave

func (t *Team) Leave(ctx context.Context, permanent bool) error

func (*Team) MemberRole

func (t *Team) MemberRole(ctx context.Context, uv keybase1.UserVersion) (keybase1.TeamRole, error)

func (*Team) Members

func (t *Team) Members() (keybase1.TeamMembers, error)

func (*Team) Name

func (t *Team) Name() keybase1.TeamName

func (*Team) NextSeqno

func (t *Team) NextSeqno() keybase1.Seqno

func (*Team) NumActiveInvites added in v1.0.29

func (t *Team) NumActiveInvites() int

func (*Team) PostTeamSettings added in v1.0.33

func (t *Team) PostTeamSettings(ctx context.Context, open bool) error

func (*Team) Rotate

func (t *Team) Rotate(ctx context.Context) error

func (*Team) SharedSecret

func (t *Team) SharedSecret(ctx context.Context) (ret keybase1.PerTeamKeySeed, err error)

func (*Team) UserVersionByUID added in v1.0.29

func (t *Team) UserVersionByUID(ctx context.Context, uid keybase1.UID) (keybase1.UserVersion, error)

func (*Team) UsersWithRole

func (t *Team) UsersWithRole(role keybase1.TeamRole) ([]keybase1.UserVersion, error)

func (*Team) UsersWithRoleOrAbove added in v1.0.30

func (t *Team) UsersWithRoleOrAbove(role keybase1.TeamRole) ([]keybase1.UserVersion, error)

type TeamBox

type TeamBox struct {
	Nonce           string
	SenderKID       keybase1.KID `json:"sender_kid"`
	Generation      keybase1.PerTeamKeyGeneration
	Ctext           string
	PerUserKeySeqno keybase1.Seqno `json:"per_user_key_seqno"`
}

TeamBox comes from api server team/get endpoint.

func (*TeamBox) Open

Open decrypts Ctext using encKey.

type TeamDoesNotExistError

type TeamDoesNotExistError struct {
	// contains filtered or unexported fields
}

func (TeamDoesNotExistError) Error

func (e TeamDoesNotExistError) Error() string

type TeamKeyManager

type TeamKeyManager struct {
	libkb.Contextified
	// contains filtered or unexported fields
}

func NewTeamKeyManager

func NewTeamKeyManager(g *libkb.GlobalContext) (*TeamKeyManager, error)

func (*TeamKeyManager) EncryptionKey

func (t *TeamKeyManager) EncryptionKey() (libkb.NaclDHKeyPair, error)

EncryptionKey returns the derived NaclDHKeyPair from the team's shared secret.

func (*TeamKeyManager) RotateSharedSecretBoxes

func (t *TeamKeyManager) RotateSharedSecretBoxes(ctx context.Context, senderKey libkb.GenericKey, recipients map[keybase1.UserVersion]keybase1.PerUserKey) (boxes *PerTeamSharedSecretBoxes, keySection *SCPerTeamKey, err error)

RotateSharedSecretBoxes creates a new shared secret for the team and the required PerTeamKey section.

func (*TeamKeyManager) SharedSecret

func (t *TeamKeyManager) SharedSecret() keybase1.PerTeamKeySeed

SharedSecret returns the team's shared secret.

func (*TeamKeyManager) SharedSecretBoxes

func (t *TeamKeyManager) SharedSecretBoxes(ctx context.Context, senderKey libkb.GenericKey, recipients map[keybase1.UserVersion]keybase1.PerUserKey) (boxes *PerTeamSharedSecretBoxes, err error)

SharedSecretBoxes creates the PerTeamSharedSecretBoxes for recipients with the existing team shared secret.

func (*TeamKeyManager) SigningKey

func (t *TeamKeyManager) SigningKey() (libkb.NaclSigningKeyPair, error)

EncryptionKey returns the derived NaclSigningKeyPair from the team's shared secret.

type TeamLoader

type TeamLoader struct {
	libkb.Contextified
	// contains filtered or unexported fields
}

Loader of keybase1.TeamData objects. Handles caching. Because there is one of this global object and it is attached to G, its Load interface must return a keybase1.TeamData not a teams.Team. To load a teams.Team use the package-level function Load. Threadsafe.

func NewTeamLoader

func NewTeamLoader(g *libkb.GlobalContext, world LoaderContext, storage *Storage) *TeamLoader

func NewTeamLoaderAndInstall

func NewTeamLoaderAndInstall(g *libkb.GlobalContext) *TeamLoader

NewTeamLoaderAndInstall creates a new loader and installs it into G.

func (*TeamLoader) Delete added in v1.0.33

func (l *TeamLoader) Delete(ctx context.Context, teamID keybase1.TeamID) (err error)

func (*TeamLoader) ImplicitAdmins

func (l *TeamLoader) ImplicitAdmins(ctx context.Context, teamID keybase1.TeamID) (impAdmins []keybase1.UserVersion, err error)

List all the admins of ancestor teams. Includes admins of the specified team only if they are also admins of ancestor teams. The specified team must be a subteam, or an error is returned. Always sends a flurry of RPCs to get the most up to date info.

func (*TeamLoader) Load

func (l *TeamLoader) Load(ctx context.Context, lArg keybase1.LoadTeamArg) (res *keybase1.TeamData, err error)

func (*TeamLoader) MapIDToName

func (l *TeamLoader) MapIDToName(ctx context.Context, id keybase1.TeamID) (keybase1.TeamName, error)

func (*TeamLoader) NotifyTeamRename

func (l *TeamLoader) NotifyTeamRename(ctx context.Context, id keybase1.TeamID, newName string) error

func (*TeamLoader) OnLogout

func (l *TeamLoader) OnLogout()

func (*TeamLoader) VerifyTeamName

func (l *TeamLoader) VerifyTeamName(ctx context.Context, id keybase1.TeamID, name keybase1.TeamName) error

type TeamSigChainPlayer

type TeamSigChainPlayer struct {
	libkb.Contextified
	sync.Mutex
	// contains filtered or unexported fields
}

Threadsafe handle to a local model of a team sigchain.

func NewTeamSigChainPlayer

func NewTeamSigChainPlayer(g *libkb.GlobalContext, reader keybase1.UserVersion) *TeamSigChainPlayer

Load a team chain from the perspective of uid.

func NewTeamSigChainPlayerWithState

func NewTeamSigChainPlayerWithState(g *libkb.GlobalContext, reader keybase1.UserVersion, state TeamSigChainState) *TeamSigChainPlayer
func (t *TeamSigChainPlayer) AppendChainLink(ctx context.Context, link *chainLinkUnpacked, signer *signerX) error

Add a chain link to the end. It can be stubbed. It must have already been partially verified by TeamLoader. `signer` may be nil iff link is stubbed. If this returns an error, the TeamSigChainPlayer was not modified.

func (*TeamSigChainPlayer) GetState

func (t *TeamSigChainPlayer) GetState() (res TeamSigChainState, err error)

Get the latest state. The caller may _not_ modify the returned state.

func (t *TeamSigChainPlayer) InflateLink(link *chainLinkUnpacked, signer signerX) error

Add the full inner link for a link that has already been added in stubbed form.

type TeamSigChainState

type TeamSigChainState struct {
	// contains filtered or unexported fields
}

Accessor wrapper for keybase1.TeamSigChainState

func (TeamSigChainState) AssertWasAdminAt

func (t TeamSigChainState) AssertWasAdminAt(uv keybase1.UserVersion, scl keybase1.SigChainLocation) (err error)

AssertWasAdminAt asserts that user (uv) was an admin (or owner) at the team at the given SigChainLocation (scl). Thus, we start at the point given, go backwards until we find a promotion, the go forwards to make sure there wasn't a demotion before the specified time. If there was, we return an AdminPermissionError. If no adminship was found at all, we return a AdminPermissionError.

func (TeamSigChainState) AssertWasReaderAt

func (t TeamSigChainState) AssertWasReaderAt(uv keybase1.UserVersion, scl keybase1.SigChainLocation) (err error)

AssertWasReaderAt asserts that user (uv) was a reader or above at the team at the given SigChainLocation (scl). Thus, we start at the point given, go backwards until we find a promotion, the go forwards to make sure there wasn't a demotion before the specified time. If there was, we return a PermissionError. If no adminship was found at all, we return a PermissionError. NOTE: This is a copy-pasta of AssertWasAdminAt, but I became sad about having to factor out the commonality, so decided copy-paste was easiest.

func (TeamSigChainState) DeepCopy

func (t TeamSigChainState) DeepCopy() TeamSigChainState

func (*TeamSigChainState) FindActiveInvite

func (*TeamSigChainState) FindActiveInviteByID

func (t *TeamSigChainState) FindActiveInviteByID(id keybase1.TeamInviteID) (keybase1.TeamInvite, bool)

func (TeamSigChainState) GetAdminUserLogPoint

func (t TeamSigChainState) GetAdminUserLogPoint(user keybase1.UserVersion) *keybase1.UserLogPoint

func (TeamSigChainState) GetID

func (t TeamSigChainState) GetID() keybase1.TeamID

func (TeamSigChainState) GetLatestGeneration

func (t TeamSigChainState) GetLatestGeneration() keybase1.PerTeamKeyGeneration

func (TeamSigChainState) GetLatestLibkbLinkID

func (t TeamSigChainState) GetLatestLibkbLinkID() (libkb.LinkID, error)

func (TeamSigChainState) GetLatestLinkID

func (t TeamSigChainState) GetLatestLinkID() keybase1.LinkID

func (TeamSigChainState) GetLatestPerTeamKey

func (t TeamSigChainState) GetLatestPerTeamKey() (keybase1.PerTeamKey, error)

func (TeamSigChainState) GetLatestSeqno

func (t TeamSigChainState) GetLatestSeqno() keybase1.Seqno

func (TeamSigChainState) GetLatestUVWithUID added in v1.0.29

func (t TeamSigChainState) GetLatestUVWithUID(uid keybase1.UID) (res keybase1.UserVersion, err error)

func (TeamSigChainState) GetLibkbLinkIDBySeqno

func (t TeamSigChainState) GetLibkbLinkIDBySeqno(seqno keybase1.Seqno) (l2 libkb.LinkID, err error)

func (TeamSigChainState) GetLinkIDBySeqno

func (t TeamSigChainState) GetLinkIDBySeqno(seqno keybase1.Seqno) (keybase1.LinkID, error)

func (TeamSigChainState) GetParentID

func (t TeamSigChainState) GetParentID() *keybase1.TeamID

Only non-nil if this is a subteam.

func (TeamSigChainState) GetPerTeamKeyAtGeneration

func (t TeamSigChainState) GetPerTeamKeyAtGeneration(gen keybase1.PerTeamKeyGeneration) (keybase1.PerTeamKey, error)

func (TeamSigChainState) GetSubteamName

func (t TeamSigChainState) GetSubteamName(id keybase1.TeamID) (*keybase1.TeamName, error)

func (TeamSigChainState) GetUserLogPoint

func (t TeamSigChainState) GetUserLogPoint(user keybase1.UserVersion) *keybase1.UserLogPoint

func (TeamSigChainState) GetUserRole

func (TeamSigChainState) GetUsersWithRole

func (t TeamSigChainState) GetUsersWithRole(role keybase1.TeamRole) (res []keybase1.UserVersion, err error)

func (TeamSigChainState) GetUsersWithRoleOrAbove added in v1.0.30

func (t TeamSigChainState) GetUsersWithRoleOrAbove(role keybase1.TeamRole) (res []keybase1.UserVersion, err error)

func (*TeamSigChainState) HasActiveInvite

func (t *TeamSigChainState) HasActiveInvite(name keybase1.TeamInviteName, typ keybase1.TeamInviteType) (bool, error)
func (t TeamSigChainState) HasAnyStubbedLinks() bool

func (TeamSigChainState) HasStubbedSeqno

func (t TeamSigChainState) HasStubbedSeqno(seqno keybase1.Seqno) bool

func (TeamSigChainState) IsImplicit added in v1.0.29

func (t TeamSigChainState) IsImplicit() bool

func (TeamSigChainState) IsLinkFullyPresent

func (t TeamSigChainState) IsLinkFullyPresent(seqno keybase1.Seqno) bool

func (TeamSigChainState) IsOpen added in v1.0.33

func (t TeamSigChainState) IsOpen() bool

func (TeamSigChainState) IsPublic added in v1.0.29

func (t TeamSigChainState) IsPublic() bool

func (TeamSigChainState) IsSubteam

func (t TeamSigChainState) IsSubteam() bool

func (TeamSigChainState) LatestLastNamePart

func (t TeamSigChainState) LatestLastNamePart() keybase1.TeamNamePart

func (*TeamSigChainState) ListSubteams

func (t *TeamSigChainState) ListSubteams() (res []keybase1.TeamIDAndName)

Only call this on a Team that has been loaded with NeedAdmin. Otherwise, you might get incoherent answers due to links that were stubbed over the life of the cached object.

For subteams that you were removed from, this list may still include them because your removal was stubbed. The list will not contain duplicate names. Since this should only be called when you are an admin, none of that should really come up, but it's here just to be less fragile.

func (*TeamSigChainState) NumActiveInvites added in v1.0.29

func (t *TeamSigChainState) NumActiveInvites() int

func (*TeamSigChainState) SubteamRenameOccurred

func (t *TeamSigChainState) SubteamRenameOccurred(
	subteamID keybase1.TeamID, newName keybase1.TeamName, seqno keybase1.Seqno) error

Check that a subteam rename occurred just so. That the subteam `subteamID` got a new name `newName` at exactly `seqno` in this, the parent, chain. Note this only checks against the last part of `newName` because mid-team renames are such a pain. This is currently linear in the number of times that subteam has been renamed. It should be easy to add an index if need be.

type UnexpectedSeqnoError

type UnexpectedSeqnoError struct {
	// contains filtered or unexported fields
}

func NewUnexpectedSeqnoError

func NewUnexpectedSeqnoError(expected, actual keybase1.Seqno) UnexpectedSeqnoError

func (UnexpectedSeqnoError) Error

func (e UnexpectedSeqnoError) Error() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL