/
user.go
143 lines (125 loc) · 4.84 KB
/
user.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
package am
import "context"
const (
// RNUserSystem system only access
RNUserSystem = "lrn:service:user:feature:system"
// RNUserManage organization specific management
RNUserManage = "lrn:service:user:feature:manage"
RNUserSelf = "lrn:service:user:feature:self"
UserServiceKey = "userservice"
)
const (
UserStatusDisabled = 1
UserStatusAwaitActivation = 100
UserStatusActive = 1000
UserStatusSystem = 9999
)
// User represents a user of an organization that has subscribed to our service
type User struct {
OrgID int `json:"org_id"`
OrgCID string `json:"org_customer_id"`
UserCID string `json:"user_customer_id"`
UserID int `json:"user_id"`
UserEmail string `json:"user_email"`
FirstName string `json:"first_name"`
LastName string `json:"last_name"`
StatusID int `json:"status_id"`
CreationTime int64 `json:"creation_time"`
Deleted bool `json:"deleted"`
AgreementAccepted bool `json:"agreement_accepted"`
AgreementAcceptedTimestamp int64 `json:"agreement_accepted_timestamp"`
LastLoginTimestamp int64 `json:"last_login_timestamp"`
}
// UserContext interface for passing contextual data about a request for tracking & auth
type UserContext interface {
GetTraceID() string
GetOrgID() int
GetOrgCID() string
GetUserID() int
GetUserCID() string
GetRoles() []string
GetIPAddress() string
GetSubscriptionID() int32
GetOrgStatusID() int
}
// UserContextData for contextual information about a user
type UserContextData struct {
TraceID string `json:"trace_id"`
OrgID int `json:"org_id"`
OrgCID string `json:"org_customer_id"`
UserID int `json:"user_id"`
UserCID string `json:"user_cid"`
Roles []string `json:"roles"`
IPAddress string `json:"ip_address"`
SubscriptionID int32 `json:"subscription_id"`
OrgStatusID int `json:"org_status_id"`
}
// NewUserContext creates user contextual data
func NewUserContext(orgID, userID int, orgCID, userCID, traceID, ipAddress string, roles []string, subscriptionID int32) *UserContextData {
return &UserContextData{
TraceID: traceID,
OrgID: orgID,
OrgCID: orgCID,
UserID: userID,
UserCID: userCID,
Roles: roles,
IPAddress: ipAddress,
SubscriptionID: subscriptionID,
}
}
// GetTraceID returns the id used for tracking requests
func (u *UserContextData) GetTraceID() string {
return u.TraceID
}
// GetOrgCID returns this context's org customer id (facing)
func (u *UserContextData) GetOrgCID() string {
return u.OrgCID
}
// GetOrgID returns this context's org id
func (u *UserContextData) GetOrgID() int {
return u.OrgID
}
// GetUserID returns this context's user id
func (u *UserContextData) GetUserID() int {
return u.UserID
}
// GetUserCID returns this context's user custom id
func (u *UserContextData) GetUserCID() string {
return u.UserCID
}
// GetRoles returns this context's roles
func (u *UserContextData) GetRoles() []string {
return u.Roles
}
// GetIPAddress returns this context's user ip address
func (u *UserContextData) GetIPAddress() string {
return u.IPAddress
}
// GetSubscriptionID returns this context's user subscription level
func (u *UserContextData) GetSubscriptionID() int32 {
return u.SubscriptionID
}
// GetOrgStatusID returns this context's user organizational status (enabled/disabled)
func (u *UserContextData) GetOrgStatusID() int {
return u.OrgStatusID
}
// UserFilter for limiting results from User List
type UserFilter struct {
Start int `json:"start"`
Limit int `json:"limit"`
OrgID int `json:"org_id"`
Filters *FilterType `json:"filters"`
}
// UserService for managing access to users
type UserService interface {
Init(config []byte) error
Get(ctx context.Context, userContext UserContext, userEmail string) (oid int, user *User, err error)
GetWithOrgID(ctx context.Context, userContext UserContext, orgID int, userCID string) (oid int, user *User, err error)
GetByID(ctx context.Context, userContext UserContext, userID int) (oid int, user *User, err error)
GetByCID(ctx context.Context, userContext UserContext, userCID string) (oid int, user *User, err error)
List(ctx context.Context, userContext UserContext, filter *UserFilter) (oid int, users []*User, err error)
Create(ctx context.Context, userContext UserContext, user *User) (oid int, uid int, ucid string, err error)
Update(ctx context.Context, userContext UserContext, user *User, userID int) (oid int, uid int, err error)
Delete(ctx context.Context, userContext UserContext, userID int) (oid int, err error)
AcceptAgreement(ctx context.Context, userContext UserContext, accepted bool) (oid int, uid int, err error)
}