Documentation
¶
Index ¶
- Constants
- Variables
- type Authn
- type Authz
- type AuthzReq
- type Backup
- type Identity
- type Key
- type KeyRepository
- type Keys
- type Members
- type MembersRepository
- type Org
- type OrgMember
- type OrgMembersPage
- type OrgMetadata
- type OrgRepository
- type Orgs
- type OrgsPage
- type PageMetadata
- type Roles
- type RolesRepository
- type Service
- type Tokenizer
- type User
Constants ¶
const ( // LoginKey is temporary User key received on successful login. LoginKey uint32 = iota // RecoveryKey represents a key for resseting password. RecoveryKey // APIKey enables the one to act on behalf of the user. APIKey )
const ( // RoleRootAdmin is the super admin role. RoleRootAdmin = "root" // RoleAdmin is the admin role. RoleAdmin = "admin" )
const ( Admin = "admin" Owner = "owner" Editor = "editor" Viewer = "viewer" RootSub = "root" OrgSub = "org" )
Variables ¶
var ( // ErrInvalidKeyIssuedAt indicates that the Key is being used before it's issued. ErrInvalidKeyIssuedAt = errors.New("invalid issue time") // ErrKeyExpired indicates that the Key is expired. ErrKeyExpired = errors.New("use of expired key") // ErrAPIKeyExpired indicates that the Key is expired // and that the key type is API key. ErrAPIKeyExpired = errors.New("use of expired API key") )
var ( // ErrAssignMember indicates failure to assign member to org. ErrAssignMember = errors.New("failed to assign member to org") // ErrUnassignMember indicates failure to unassign member from an org. ErrUnassignMember = errors.New("failed to unassign member from org") // ErrOrgNotEmpty indicates org is not empty, can't be deleted. ErrOrgNotEmpty = errors.New("org is not empty") // ErrOrgMemberAlreadyAssigned indicates that members is already assigned. ErrOrgMemberAlreadyAssigned = errors.New("org member is already assigned") )
var ( // ErrRetrieveMembersByOrg failed to retrieve members by org. ErrRetrieveMembersByOrg = errors.New("failed to retrieve members by org") // ErrRetrieveOrgsByMember failed to retrieve orgs by member ErrRetrieveOrgsByMember = errors.New("failed to retrieve orgs by member") )
Functions ¶
This section is empty.
Types ¶
type Authn ¶
type Authn interface {
// Identify validates token token. If token is valid, content
// is returned. If token is invalid, or invocation failed for some
// other reason, non-nil error value is returned in response.
Identify(ctx context.Context, token string) (Identity, error)
}
Authn specifies an API that must be fullfiled by the domain service implementation, and all of its decorators (e.g. logging & metrics). Token is a string value of the actual Key and is used to authenticate an Auth service request.
type Authz ¶
Authz represents a authorization service. It exposes functionalities through `auth` to perform authorization.
type Key ¶
type Key struct {
ID string
Type uint32
IssuerID string
Subject string
IssuedAt time.Time
ExpiresAt time.Time
}
Key represents API key.
type KeyRepository ¶
type KeyRepository interface {
// Save persists the Key. A non-nil error is returned to indicate
// operation failure
Save(context.Context, Key) (string, error)
// Retrieve retrieves Key by its unique identifier.
Retrieve(context.Context, string, string) (Key, error)
// Remove removes Key with provided ID.
Remove(context.Context, string, string) error
}
KeyRepository specifies Key persistence API.
type Keys ¶ added in v0.24.0
type Keys interface {
// Issue issues a new Key, returning its token value alongside.
Issue(ctx context.Context, token string, key Key) (Key, string, error)
// Revoke removes the Key with the provided id that is
// issued by the user identified by the provided key.
Revoke(ctx context.Context, token, id string) error
// RetrieveKey retrieves data for the Key identified by the provided
// ID, that is issued by the user identified by the provided key.
RetrieveKey(ctx context.Context, token, id string) (Key, error)
}
Keys specifies an API that must be fullfiled by the domain service implementation, and all of its decorators (e.g. logging & metrics).
type Members ¶ added in v0.24.0
type Members interface {
// AssignMembers adds members with member emails into the org identified by orgID.
AssignMembers(ctx context.Context, token, orgID string, oms ...OrgMember) error
// UnassignMembers removes members with member ids from org identified by orgID.
UnassignMembers(ctx context.Context, token string, orgID string, memberIDs ...string) error
// UpdateMembers updates members role in an org.
UpdateMembers(ctx context.Context, token, orgID string, oms ...OrgMember) error
// ListMembersByOrg retrieves members assigned to an org identified by orgID.
ListMembersByOrg(ctx context.Context, token, orgID string, pm PageMetadata) (OrgMembersPage, error)
// ViewMember retrieves member identified by memberID in org identified by orgID.
ViewMember(ctx context.Context, token, orgID, memberID string) (OrgMember, error)
}
Memberships specifies an API that must be fullfiled by the domain service implementation, and all of its decorators (e.g. logging & metrics).
type MembersRepository ¶ added in v0.24.0
type MembersRepository interface {
// Save saves membershipa.
Save(ctx context.Context, oms ...OrgMember) error
// Update updates memberships.
Update(ctx context.Context, oms ...OrgMember) error
// Remove removes memberships.
Remove(ctx context.Context, orgID string, memberIDs ...string) error
// RetrieveRole retrieves role of membership specified by memberID and orgID.
RetrieveRole(ctx context.Context, memberID, orgID string) (string, error)
// RetrieveByOrgID retrieves members assigned to an org identified by orgID.
RetrieveByOrgID(ctx context.Context, orgID string, pm PageMetadata) (OrgMembersPage, error)
// RetrieveAll retrieves all members.
RetrieveAll(ctx context.Context) ([]OrgMember, error)
}
type Org ¶
type Org struct {
ID string
OwnerID string
Name string
Description string
Metadata OrgMetadata
CreatedAt time.Time
UpdatedAt time.Time
}
Org represents the org information.
type OrgMembersPage ¶
type OrgMembersPage struct {
PageMetadata
OrgMembers []OrgMember
}
OrgMembersPage contains page related metadata as well as list of members that belong to this page.
type OrgRepository ¶
type OrgRepository interface {
// Save orgs
Save(ctx context.Context, orgs ...Org) error
// Update an org
Update(ctx context.Context, org Org) error
// Remove an org
Remove(ctx context.Context, owner, id string) error
// RetrieveByID retrieves org by its id
RetrieveByID(ctx context.Context, id string) (Org, error)
// RetrieveByOwner retrieves orgs by owner.
RetrieveByOwner(ctx context.Context, ownerID string, pm PageMetadata) (OrgsPage, error)
// RetrieveAll retrieves all orgs.
RetrieveAll(ctx context.Context) ([]Org, error)
// RetrieveByAdmin retrieves all orgs with pagination.
RetrieveByAdmin(ctx context.Context, pm PageMetadata) (OrgsPage, error)
// RetrieveByMemberID list of orgs that member belongs to
RetrieveByMemberID(ctx context.Context, memberID string, pm PageMetadata) (OrgsPage, error)
}
OrgRepository specifies an org persistence API.
type Orgs ¶
type Orgs interface {
// CreateOrg creates new org.
CreateOrg(ctx context.Context, token string, org Org) (Org, error)
// UpdateOrg updates the org identified by the provided ID.
UpdateOrg(ctx context.Context, token string, org Org) (Org, error)
// ViewOrg retrieves data about the org identified by ID.
ViewOrg(ctx context.Context, token, id string) (Org, error)
// ListOrgs retrieves orgs.
ListOrgs(ctx context.Context, token string, pm PageMetadata) (OrgsPage, error)
// ListOrgsByMember retrieves all orgs for member that is identified with memberID belongs to.
ListOrgsByMember(ctx context.Context, token, memberID string, pm PageMetadata) (OrgsPage, error)
// RemoveOrg removes the org identified with the provided ID.
RemoveOrg(ctx context.Context, token, id string) error
// GetOwnerIDByOrgID returns an owner ID for a given org ID.
GetOwnerIDByOrgID(ctx context.Context, orgID string) (string, error)
// Backup retrieves all orgs and org members. Only accessible by admin.
Backup(ctx context.Context, token string) (Backup, error)
// Restore adds orgs and org members from a backup. Only accessible by admin.
Restore(ctx context.Context, token string, backup Backup) error
}
Orgs specifies an API that must be fullfiled by the domain service implementation, and all of its decorators (e.g. logging & metrics).
type OrgsPage ¶
type OrgsPage struct {
PageMetadata
Orgs []Org
}
OrgsPage contains page related metadata as well as list of orgs that belong to this page.
type PageMetadata ¶
type PageMetadata struct {
Total uint64
Offset uint64
Limit uint64
Name string
Metadata OrgMetadata
}
PageMetadata contains page metadata that helps navigation.
type RolesRepository ¶
type RolesRepository interface {
// SaveRole saves the user role.
SaveRole(ctx context.Context, id, role string) error
// RetrieveRole retrieves the user role.
RetrieveRole(ctx context.Context, id string) (string, error)
// UpdateRole updates the user role.
UpdateRole(ctx context.Context, id, role string) error
// RemoveRole removes the user role.
RemoveRole(ctx context.Context, id string) error
}
type Service ¶
Service specifies an API that must be fulfilled by the domain service implementation, and all of its decorators (e.g. logging & metrics). Token is a string value of the actual Key and is used to authenticate an Auth service request.
func New ¶
func New(orgs OrgRepository, tc protomfx.ThingsServiceClient, uc protomfx.UsersServiceClient, keys KeyRepository, roles RolesRepository, members MembersRepository, idp uuid.IDProvider, tokenizer Tokenizer, duration time.Duration) Service
New instantiates the auth service implementation.
Directories
¶
| Path | Synopsis |
|---|---|
|
Package api contains implementation of Auth service HTTP API.
|
Package api contains implementation of Auth service HTTP API. |
|
grpc
Package grpc contains implementation of Auth service gRPC API.
|
Package grpc contains implementation of Auth service gRPC API. |
|
Package postgres contains Key repository implementations using PostgreSQL as the underlying database.
|
Package postgres contains Key repository implementations using PostgreSQL as the underlying database. |
|
Package tracing contains middlewares that will add spans to existing traces.
|
Package tracing contains middlewares that will add spans to existing traces. |