/
models.go
85 lines (68 loc) · 1.52 KB
/
models.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
package auth
import (
"crypto"
"github.com/go-acme/lego/v4/registration"
"strings"
"time"
)
type RoleID string
func (i RoleID) StrPtr() *string {
return (*string)(&i)
}
func (i RoleID) String() string {
return string(i)
}
const (
RoleUser RoleID = "user"
RoleAdmin RoleID = "admin"
RoleSuperAdmin RoleID = "super"
)
type Roles []RoleID
func (r Roles) Has(role RoleID) bool {
if r == nil {
return false
}
for i := range r {
if r[i] == RoleSuperAdmin || r[i] == role {
return true
}
}
return false
}
func (r Roles) ToString() string {
parts := make([]string, len(r))
for i := range r {
parts[i] = string(r[i])
}
return strings.Join(parts, ";")
}
func RolesFromString(r string) Roles {
parts := strings.Split(r, ";")
roleIDs := make(Roles, 0, len(parts))
for i := range roleIDs {
roleIDs = append(roleIDs, RoleID(parts[i]))
}
return roleIDs
}
type User struct {
// Basic data kept and fetched from auth provider
ID string `json:"id"`
DisplayName string `json:"display_name"`
Email string `json:"email"`
Roles []RoleID `json:"roles"`
CreatedAt time.Time `json:"created_at"`
// Extra data to support LE cert, stored in local db.
Registration *registration.Resource
key crypto.PrivateKey
// Fields for LocalUser support.
pwdHash string
}
func (u *User) GetEmail() string {
return u.Email
}
func (u *User) GetRegistration() *registration.Resource {
return u.Registration
}
func (u *User) GetPrivateKey() crypto.PrivateKey {
return u.key
}