This repository has been archived by the owner on Aug 3, 2023. It is now read-only.
forked from SUSE/stratos
/
localusers.go
74 lines (60 loc) · 1.94 KB
/
localusers.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
package main
import (
"errors"
"github.com/labstack/echo/v4"
uuid "github.com/satori/go.uuid"
log "github.com/sirupsen/logrus"
"github.com/epinio/ui-backend/src/jetstream/crypto"
"github.com/epinio/ui-backend/src/jetstream/repository/interfaces"
"github.com/epinio/ui-backend/src/jetstream/repository/localusers"
)
func (p *portalProxy) FindUserGUID(c echo.Context) (string, error) {
username := c.FormValue("username")
if len(username) == 0 {
return "", errors.New("Needs username")
}
localUsersRepo, err := localusers.NewPgsqlLocalUsersRepository(p.DatabaseConnectionPool)
if err != nil {
log.Errorf("Database error getting repo for local users: %v", err)
return "", err
}
guid, err := localUsersRepo.FindUserGUID(username)
if err != nil {
log.Errorf("Error finding user GUID %v", err)
return "", err
}
return guid, nil
}
func (p *portalProxy) AddLocalUser(c echo.Context) (string, error) {
log.Debug("AddLocalUser")
username := c.FormValue("username")
password := c.FormValue("password")
scope := c.FormValue("scope")
email := c.FormValue("email")
if len(username) == 0 || len(password) == 0 || len(scope) == 0 {
return "", errors.New("Needs username, password and scope")
}
//Generate a user GUID and hash the password
userUUID, err := uuid.NewV4()
if err != nil {
return "", err
}
userGUID := userUUID.String()
passwordHash, err := crypto.HashPassword(password)
if err != nil {
log.Errorf("Error hashing user password: %v", err)
return "", err
}
localUsersRepo, err := localusers.NewPgsqlLocalUsersRepository(p.DatabaseConnectionPool)
if err != nil {
log.Errorf("Database error getting repo for local users: %v", err)
} else {
user := interfaces.LocalUser{UserGUID: userGUID, PasswordHash: passwordHash, Username: username, Email: email, Scope: scope}
err = localUsersRepo.AddLocalUser(user)
if err != nil {
log.Errorf("Error adding local user %v", err)
return "", err
}
}
return userGUID, nil
}