1
package identityservice
11
users map[string]UserInfo
12
tenants map[string]string
15
func (u *Users) addTenant(tenant string) string {
16
for id, tenantName := range u.tenants {
17
if tenant == tenantName {
22
id := strconv.Itoa(u.nextTenantId)
23
u.tenants[id] = tenant
27
func (u *Users) AddUser(user, secret, tenant string) *UserInfo {
28
tenantId := u.addTenant(tenant)
30
userInfo := &UserInfo{secret: secret, Id: strconv.Itoa(u.nextUserId), TenantId: tenantId}
31
u.users[user] = *userInfo
32
userInfo, _ = u.authenticate(user, secret)
36
func (u *Users) FindUser(token string) (*UserInfo, error) {
37
for _, userInfo := range u.users {
38
if userInfo.Token == token {
42
return nil, fmt.Errorf("No user with token %v exists", token)
46
notAuthorized = "The request you have made requires authentication."
47
invalidUser = "Invalid user / password"
50
func (u *Users) authenticate(username, password string) (*UserInfo, string) {
51
userInfo, ok := u.users[username]
53
return nil, notAuthorized
55
if userInfo.secret != password {
56
return nil, invalidUser
58
if userInfo.Token == "" {
59
userInfo.Token = randomHexToken()
60
u.users[username] = userInfo