Documentation ¶
Overview ¶
Package accounts implements tools to manage account information for Mr. Plotter. Account information is stored in etcd, so a Version 3 etcd client is needed for most of the API functions.
Index ¶
- Constants
- func DeleteAccount(ctx context.Context, etcdClient *etcd.Client, username string) error
- func DeleteMultipleAccounts(ctx context.Context, etcdClient *etcd.Client, usernameprefix string) (int64, error)
- func DeleteMultipleTagDefs(ctx context.Context, etcdClient *etcd.Client, tagprefix string) (int64, error)
- func DeleteTagDef(ctx context.Context, etcdClient *etcd.Client, tag string) error
- func GetAccountEtcdPath() string
- func GetTagEtcdPath() string
- func SetEtcdKeyPrefix(prefix string)
- func UpsertAccount(ctx context.Context, etcdClient *etcd.Client, acc *MrPlotterAccount) error
- func UpsertAccountAtomically(ctx context.Context, etcdClient *etcd.Client, acc *MrPlotterAccount) (bool, error)
- func UpsertTagDef(ctx context.Context, etcdClient *etcd.Client, tdef *MrPlotterTagDef) error
- func UpsertTagDefAtomically(ctx context.Context, etcdClient *etcd.Client, tdef *MrPlotterTagDef) (bool, error)
- type MrPlotterAccount
- type MrPlotterTagDef
Constants ¶
const PublicTag = "public"
PublicTag is the name of the t ag used to specify streams viewable to all users, even those who are not logged in.
Variables ¶
This section is empty.
Functions ¶
func DeleteAccount ¶
Deletes the account of the user with the provided username.
func DeleteMultipleAccounts ¶
func DeleteMultipleAccounts(ctx context.Context, etcdClient *etcd.Client, usernameprefix string) (int64, error)
Deletes the accounts of all users whose username begins with the provided prefix.
func DeleteMultipleTagDefs ¶
func DeleteMultipleTagDefs(ctx context.Context, etcdClient *etcd.Client, tagprefix string) (int64, error)
Deletes all tag definitions beginning with the given prefix.
func DeleteTagDef ¶
Deletes the tag definition with the provided name
func GetAccountEtcdPath ¶
func GetAccountEtcdPath() string
Gets the base path for account data in etcd.
func SetEtcdKeyPrefix ¶
func SetEtcdKeyPrefix(prefix string)
Sets the prefix added to keys in the etcd database. The keys used are of the form <prefix>mrplotter/accounts/<username>. The prefix allows multiple configurations for Mr. Plotter to coexist in a single etcd database system.
Modifying the prefix while an operation is in progress results in undefined behavior. Furthermore, MrPlotterAccount structs returned by RetrieveAccount or RetrieveMultipleAccounts must always be used with the same prefix with which they were generated.
func UpsertAccount ¶
Updates the account according to the provided account information, creating a new user account if a user with that username does not exist.
func UpsertAccountAtomically ¶
func UpsertAccountAtomically(ctx context.Context, etcdClient *etcd.Client, acc *MrPlotterAccount) (bool, error)
Same as UpsertAccount, but fails if the account was updated meanwhile. This allows one to ensure that the read-modify-write operation required to update account information can be done atomically. Returns true if the operation succeeds, and returns false otherwise.
The rules are as follows: if the MrPlotterAccount struct was created directly, the operation fails if the account already exists in etcd. If the MrPlotterAccount struct was returned by RetrieveAccount or RetrieveMultipleAccounts, the operation fails if the data stored in etcd was updated after the account information was retrieved. You should not modify the "Username" field of a struct returned by RetrieveAccount or RetrieveMultipleAccounts and then use it with this function. Setting the "Username" field of a struct to be used with this function is only allowed for structs that are created directly.
func UpsertTagDef ¶
Same as UpsertAccount, but for Tag Definitions
func UpsertTagDefAtomically ¶
func UpsertTagDefAtomically(ctx context.Context, etcdClient *etcd.Client, tdef *MrPlotterTagDef) (bool, error)
Same as UpsertAccountAtomically, but for Tag Definitions.
Types ¶
type MrPlotterAccount ¶
type MrPlotterAccount struct { Username string Tags map[string]struct{} PasswordHash []byte // contains filtered or unexported fields }
MrPlotterAccount abstracts account information for a single user.
func RetrieveAccount ¶
func RetrieveAccount(ctx context.Context, etcdClient *etcd.Client, username string) (acc *MrPlotterAccount, err error)
Retrieves the account information for the specified user. Setting the "Username" field in the returned struct renders it unsuitable for use with the "UpsertAccountAtomically" function.
func RetrieveMultipleAccounts ¶
func RetrieveMultipleAccounts(ctx context.Context, etcdClient *etcd.Client, usernameprefix string) ([]*MrPlotterAccount, error)
Retrieves the account information of all users whose username begins with the provided prefix. If one entry is in a corrupt state and cannot be decoded, its Tags set will be set to nil and decoding will continue. Setting the "Username" field in the returned struct renders it unsuitable for use with the "UpsertAccountAtomically" function.
func (*MrPlotterAccount) CheckPassword ¶
func (acc *MrPlotterAccount) CheckPassword(password []byte) (bool, error)
Checks whether the provided password matches the user's password. Returns true if the provided password is correct, and false if it is not. If the returned error is not nil, then the returned boolean should be ignored.
func (*MrPlotterAccount) GetRetrievedRevision ¶
func (acc *MrPlotterAccount) GetRetrievedRevision() int64
func (*MrPlotterAccount) SetPassword ¶
func (acc *MrPlotterAccount) SetPassword(newPassword []byte) error
Sets the password for a user.
func (*MrPlotterAccount) SetRetrievedRevision ¶
func (acc *MrPlotterAccount) SetRetrievedRevision(rev int64)
type MrPlotterTagDef ¶
type MrPlotterTagDef struct { Tag string PathPrefix map[string]struct{} // contains filtered or unexported fields }
MrPlotterTagDef abstracts a mapping from a Tag to set of collection prefixes.
func RetrieveMultipleTagDefs ¶
func RetrieveMultipleTagDefs(ctx context.Context, etcdClient *etcd.Client, tagprefix string) ([]*MrPlotterTagDef, error)
Retrieves the account information of all users whose username begins with the provided prefix. If one entry is in a corrupt state and cannot be decoded, its Tags set will be set to nil and decoding will continue. Setting the "Username" field in the returned struct renders it unsuitable for use with the "UpsertAccountAtomically" function.
func RetrieveTagDef ¶
func RetrieveTagDef(ctx context.Context, etcdClient *etcd.Client, tag string) (tdef *MrPlotterTagDef, err error)
Retrieves the tag definition for the specified tag. Setting the "Tag" field in the returned struct renders it unsuitable for use with the "UpsertTagDefAtomically" function.
func (*MrPlotterTagDef) GetRetrievedRevision ¶
func (tdef *MrPlotterTagDef) GetRetrievedRevision() int64
func (*MrPlotterTagDef) SetRetrievedRevision ¶
func (tdef *MrPlotterTagDef) SetRetrievedRevision(rev int64)