Documentation ¶
Overview ¶
Package users provides core business logic providing API over credentials store and PM API.
Index ¶
- Variables
- type AddressMode
- type CredentialsStorer
- type Locator
- type PanicHandler
- type StoreMaker
- type User
- func (u *User) CheckBridgeLogin(password string) error
- func (u *User) CloseAllConnections()
- func (u *User) CloseConnection(address string)
- func (u *User) GetAddressID(address string) (id string, err error)
- func (u *User) GetAddresses() []string
- func (u *User) GetBridgePassword() string
- func (u *User) GetClient() pmapi.Client
- func (u *User) GetPrimaryAddress() string
- func (u *User) GetStore() *store.Store
- func (u *User) GetStoreAddresses() []string
- func (u *User) ID() string
- func (u *User) IsCombinedAddressMode() bool
- func (u *User) IsConnected() bool
- func (u *User) Logout() error
- func (u *User) SwitchAddressMode() error
- func (u *User) TotalBytes() int64
- func (u *User) UpdateSpace(apiUser *pmapi.User)
- func (u *User) UpdateUser(ctx context.Context) error
- func (u *User) UsedBytes() int64
- func (u *User) Username() string
- type UserInfo
- type Users
- func (u *Users) ClearData() error
- func (u *Users) ClearUsers() error
- func (u *Users) DeleteUser(userID string, clearStore bool) error
- func (u *Users) DisableCache() error
- func (u *Users) EnableCache() error
- func (u *Users) FinishLogin(client pmapi.Client, auth *pmapi.Auth, password []byte) (userID string, err error)
- func (u *Users) GetUser(query string) (*User, error)
- func (u *Users) GetUserIDs() []string
- func (u *Users) GetUserInfo(userID string) (UserInfo, error)
- func (u *Users) GetUsers() []*User
- func (u *Users) Login(username string, password []byte) (authClient pmapi.Client, auth *pmapi.Auth, err error)
- func (u *Users) LogoutUser(userID string) error
- func (u *Users) MigrateCache(srcPath, dstPath string) error
- func (u *Users) SendMetric(m metrics.Metric) error
- func (u *Users) SetAddressMode(userID string, mode AddressMode) error
Constants ¶
This section is empty.
Variables ¶
var ( // ErrWrongMailboxPassword is returned when login password is OK but // not the mailbox one. ErrWrongMailboxPassword = errors.New("wrong mailbox password") // ErrUserAlreadyConnected is returned when authentication was OK but // there is already active account for this user. ErrUserAlreadyConnected = errors.New("user is already connected") )
var ErrLoggedOutUser = errors.New("account is logged out, use the app to login again")
ErrLoggedOutUser is sent to IMAP and SMTP if user exists, password is OK but user is logged out from the app.
Functions ¶
This section is empty.
Types ¶
type AddressMode ¶ added in v2.4.0
type AddressMode int
const ( SplitMode AddressMode = iota CombinedMode )
func (AddressMode) String ¶ added in v2.4.0
func (mode AddressMode) String() string
type CredentialsStorer ¶
type CredentialsStorer interface { List() (userIDs []string, err error) Add(userID, userName, uid, ref string, mailboxPassword []byte, emails []string) (*credentials.Credentials, error) Get(userID string) (*credentials.Credentials, error) SwitchAddressMode(userID string) (*credentials.Credentials, error) UpdateEmails(userID string, emails []string) (*credentials.Credentials, error) UpdatePassword(userID string, password []byte) (*credentials.Credentials, error) UpdateToken(userID, uid, ref string) (*credentials.Credentials, error) Logout(userID string) (*credentials.Credentials, error) Delete(userID string) error }
type PanicHandler ¶
type PanicHandler interface {
HandlePanic()
}
type StoreMaker ¶
type User ¶
type User struct {
// contains filtered or unexported fields
}
User is a struct on top of API client and credentials store.
func (*User) CheckBridgeLogin ¶
CheckBridgeLogin checks whether the user is logged in and the bridge IMAP/SMTP password is correct.
func (*User) CloseAllConnections ¶
func (u *User) CloseAllConnections()
CloseAllConnections calls CloseConnection for all users addresses.
func (*User) CloseConnection ¶
CloseConnection emits closeConnection event on `address` which should close all active connection.
func (*User) GetAddressID ¶
GetAddressID returns the API ID of the given address.
func (*User) GetAddresses ¶
GetAddresses returns list of all addresses.
func (*User) GetBridgePassword ¶
GetBridgePassword returns bridge password. This is not a password of the PM account, but generated password for local purposes to not use a PM account in the clients (such as Thunderbird).
func (*User) GetPrimaryAddress ¶
GetPrimaryAddress returns the user's original address (which is not necessarily the same as the primary address, because a primary address might be an alias and be in position one).
func (*User) GetStoreAddresses ¶
GetStoreAddresses returns all addresses used by the store (so in combined mode, that's just the original address, but in split mode, that's all active addresses).
func (*User) IsCombinedAddressMode ¶
IsCombinedAddressMode returns whether user is set in combined or split mode. Combined mode is the default mode and is what users typically need. Split mode is mostly for outlook as it cannot handle sending e-mails from an address other than the primary one.
func (*User) IsConnected ¶
IsConnected returns whether user is logged in.
func (*User) Logout ¶
Logout logs out the user from pmapi, the credentials store, the mail store, and tries to remove as much sensitive data as possible.
func (*User) SwitchAddressMode ¶
SwitchAddressMode changes mode from combined to split and vice versa. The mode to switch to is determined by the state of the user's credentials in the credentials store. See `IsCombinedAddressMode` for more details.
func (*User) TotalBytes ¶
TotalBytes returns number of bytes available on server.
func (*User) UpdateSpace ¶
UpdateSpace will update TotalBytes and UsedBytes values from API user. If pointer is nill it will get fresh user from API. API user can come from update event which means it doesn't contain all data. Therefore only positive values will be updated.
func (*User) UpdateUser ¶
UpdateUser updates user details from API and saves to the credentials.
type Users ¶
type Users struct {
// contains filtered or unexported fields
}
Users is a struct handling users.
func New ¶
func New( locations Locator, panicHandler PanicHandler, eventListener listener.Listener, clientManager pmapi.Manager, credStorer CredentialsStorer, storeFactory StoreMaker, ) *Users
func (*Users) ClearData ¶
ClearData closes all connections (to release db files and so on) and clears all data.
func (*Users) DeleteUser ¶
DeleteUser deletes user completely; it logs user out from the API, stops any active connection, deletes from credentials store and removes from the Bridge struct.
func (*Users) DisableCache ¶
func (*Users) EnableCache ¶
func (*Users) FinishLogin ¶
func (u *Users) FinishLogin(client pmapi.Client, auth *pmapi.Auth, password []byte) (userID string, err error)
FinishLogin finishes the login procedure and adds the user into the credentials store.
func (*Users) GetUser ¶
GetUser returns a user by `query` which is compared to users' ID, username or any attached e-mail address.
func (*Users) GetUserIDs ¶ added in v2.4.0
GetUserIDs returns IDs of all added users into keychain (even logged out users).
func (*Users) GetUserInfo ¶ added in v2.4.0
GetUserInfo returns user about the user with the given ID.
func (*Users) Login ¶
func (u *Users) Login(username string, password []byte) (authClient pmapi.Client, auth *pmapi.Auth, err error)
Login authenticates a user by username/password, returning an authorised client and an auth object. The authorisation scope may not yet be full if the user has 2FA enabled.
func (*Users) LogoutUser ¶ added in v2.4.0
func (*Users) MigrateCache ¶
MigrateCache moves the message cache folder from folder srcPath to folder dstPath. srcPath must point to an existing folder. dstPath must be an empty folder or not exist.
func (*Users) SendMetric ¶
SendMetric sends a metric. We don't want to return any errors, only log them.
func (*Users) SetAddressMode ¶ added in v2.4.0
func (u *Users) SetAddressMode(userID string, mode AddressMode) error
Directories ¶
Path | Synopsis |
---|---|
Package credentials implements our struct stored in keychain.
|
Package credentials implements our struct stored in keychain. |
Package mocks is a generated GoMock package.
|
Package mocks is a generated GoMock package. |