-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathclaims.go
107 lines (86 loc) · 2.44 KB
/
claims.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
// Package auth centralises the logic to add authentification mechanisms to the backend
package auth
import (
"github.com/gin-gonic/gin"
"github.com/jinzhu/gorm"
"github.com/bsinou/vitrnx-goback/model"
)
func GetUserMeta(ctx *gin.Context) (map[string]interface{}, error) {
userID := ctx.MustGet(model.KeyUserID).(string)
db := ctx.MustGet(model.KeyUserDb).(*gorm.DB)
userMeta := make(map[string]interface{})
var user model.User
err := db.Preload("Roles").Where(&model.User{UserID: userID}).First(&user).Error
if err != nil {
return userMeta, err
}
userMeta[model.KeyEmail] = user.Email
userMeta[model.KeyUserDisplayName] = user.Name
roles := make([]string, len(user.Roles))
for i, role := range user.Roles {
roles[i] = role.RoleID
}
userMeta[model.KeyUserRoles] = roles
return userMeta, nil
}
func WithUserMeta(ctx *gin.Context) error {
userMeta, err := GetUserMeta(ctx)
if err != nil {
return err
}
ctx.Set(model.KeyEmail, userMeta[model.KeyEmail])
ctx.Set(model.KeyUserDisplayName, userMeta[model.KeyUserDisplayName])
ctx.Set(model.KeyUserRoles, userMeta[model.KeyUserRoles])
return nil
}
// func WithClaims(ctx *gin.Context) {
// currId := ctx.MustGet(model.KeyUserID).(string)
// isAdmin := false
// for _, val := range viper.GetStringSlice(conf.KeyAdminUsers) {
// if currUserName == val {
// isAdmin = true
// break
// }
// }
// if isAdmin {
// ctx.Set(model.KeyClaims, []string{
// model.PolicyCanRead,
// model.PolicyCanEdit,
// model.PolicyCanManage,
// })
// } else {
// ctx.Set(model.KeyClaims, []string{
// model.PolicyCanRead,
// })
// }
// }
// // GetClaims returns an array with current valid claims to be serialised in JSON
// func GetClaims(ctx *gin.Context) map[string]string {
// // BOAAAF enhance :)
// claims := ctx.MustGet(model.KeyClaims).([]string)
// claimMap := map[string]string{
// "canRead": "false",
// "canEdit": "false",
// "canManage": "false",
// }
// for _, claim := range claims {
// switch claim {
// case model.PolicyCanRead:
// claimMap["canRead"] = "true"
// break
// case model.PolicyCanEdit:
// claimMap["canEdit"] = "true"
// break
// case model.PolicyCanManage:
// claimMap["canManage"] = "true"
// break
// default:
// fmt.Println("Unknown claim: " + claim)
// }
// }
// fmt.Println("###### Getting claims for JSON")
// for k, v := range claimMap {
// fmt.Printf("%s : %s \n", k, v)
// }
// return claimMap
// }