Skip to content

Commit

Permalink
Changed UID retrieval format
Browse files Browse the repository at this point in the history
  • Loading branch information
catttam committed Jan 23, 2024
1 parent cd269a8 commit 9863c56
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 17 deletions.
23 changes: 12 additions & 11 deletions pkg/handlers/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,20 +60,11 @@ func MakeCreateHandler(cfg *types.Config, back types.ServerlessBackend) gin.Hand
// Check service values and set defaults
checkValues(&service, cfg)

uid_origin, uid_exists := c.Get("uid_origin")
if uid_exists {
uid := fmt.Sprintf("%v", uid_origin)
createLogger.Println("Creating service for user: ", uid)
service.Labels["uid"] = uid
service.AllowedUsers = append(service.AllowedUsers, uid)
}
createLogger.Println("Unknown user origin")

if service.VO != "" {
for _, vo := range cfg.OIDCGroups {
if vo == service.VO {
authHeader := c.GetHeader("Authorization")
err := checkVOIdentity(&service, cfg, authHeader)
err := checkIdentity(&service, cfg, authHeader)
if err != nil {
c.String(http.StatusBadRequest, fmt.Sprintln(err))
}
Expand Down Expand Up @@ -360,9 +351,16 @@ func isStorageProviderDefined(storageName string, storageID string, providers *t
return ok
}

func checkVOIdentity(service *types.Service, cfg *types.Config, authHeader string) error {
func checkIdentity(service *types.Service, cfg *types.Config, authHeader string) error {
oidcManager, _ := auth.NewOIDCManager(cfg.OIDCIssuer, cfg.OIDCSubject, cfg.OIDCGroups)
rawToken := strings.TrimPrefix(authHeader, "Bearer ")
uid, err := oidcManager.GetUID(rawToken)

if err != nil {
createLogger.Println("Unknown user origin")
return err
}

hasVO, err := oidcManager.UserHasVO(rawToken, service.VO)

if err != nil {
Expand All @@ -374,6 +372,9 @@ func checkVOIdentity(service *types.Service, cfg *types.Config, authHeader strin
}

service.Labels["vo"] = service.VO
service.Labels["uid"] = uid
service.AllowedUsers = append(service.AllowedUsers, uid)
createLogger.Println("Creating service for user: ", uid)

return nil
}
Expand Down
13 changes: 9 additions & 4 deletions pkg/handlers/update.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,15 @@ func MakeUpdateHandler(cfg *types.Config, back types.ServerlessBackend) gin.Hand
}

if newService.VO != "" && newService.VO != oldService.VO {
authHeader := c.GetHeader("Authorization")
err := checkVOIdentity(&newService, cfg, authHeader)
if err != nil {
c.String(http.StatusBadRequest, fmt.Sprintf("%v"), err)
for _, vo := range cfg.OIDCGroups {
if vo == newService.VO {
authHeader := c.GetHeader("Authorization")
err := checkIdentity(&newService, cfg, authHeader)
if err != nil {
c.String(http.StatusBadRequest, fmt.Sprintln(err))
}
break
}
}
}

Expand Down
10 changes: 8 additions & 2 deletions pkg/utils/auth/oidc.go
Original file line number Diff line number Diff line change
Expand Up @@ -111,8 +111,6 @@ func getOIDCMiddleware(kubeClientset *kubernetes.Clientset, minIOAdminClient *ut
// Create MinIO user and k8s secret with credentials
mc.CreateSecretForOIDC(uid, sk)
minIOAdminClient.CreateMinIOUser(uid, sk)

c.Set("uid_origin", uid)
}
}
}
Expand Down Expand Up @@ -180,6 +178,14 @@ func (om *oidcManager) UserHasVO(rawToken string, vo string) (bool, error) {
return false, nil
}

func (om *oidcManager) GetUID(rawToken string) (string, error) {
ui, err := om.getUserInfo(rawToken)
if err != nil {
return ui.subject, nil
}
return "", err
}

// isAuthorised checks if a token is authorised to access the API
func (om *oidcManager) isAuthorised(rawToken string) bool {
// Check if the token is valid
Expand Down

0 comments on commit 9863c56

Please sign in to comment.