Skip to content
This repository has been archived by the owner on Oct 9, 2023. It is now read-only.

Commit

Permalink
Store additional claims in the QueryUserInfoFromAccessToken path
Browse files Browse the repository at this point in the history
Signed-off-by: Haytham Abuelfutuh <haytham@afutuh.com>
  • Loading branch information
EngHabu committed Jan 11, 2023
1 parent 1ccd59c commit e89a049
Showing 1 changed file with 30 additions and 2 deletions.
32 changes: 30 additions & 2 deletions auth/handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ import (
"strings"
"time"

_struct "github.com/golang/protobuf/ptypes/struct"
"google.golang.org/protobuf/encoding/protojson"

"github.com/flyteorg/flyteadmin/auth/interfaces"
"github.com/flyteorg/flyteadmin/pkg/common"
"github.com/flyteorg/flyteidl/gen/pb-go/flyteidl/service"
Expand Down Expand Up @@ -410,16 +413,41 @@ func QueryUserInfoUsingAccessToken(ctx context.Context, originalRequest *http.Re
userInfo, err := authCtx.OidcProvider().UserInfo(ctx, tokenSource)
if err != nil {
logger.Errorf(ctx, "Error getting user info from IDP %s", err)
return &service.UserInfoResponse{}, fmt.Errorf("error getting user info from IDP")
return &service.UserInfoResponse{}, fmt.Errorf("error getting user info from IDP. Error: %w", err)
}

resp := &service.UserInfoResponse{}
err = userInfo.Claims(&resp)
if err != nil {
logger.Errorf(ctx, "Error getting user info from IDP %s", err)
return &service.UserInfoResponse{}, fmt.Errorf("error getting user info from IDP")
return &service.UserInfoResponse{}, fmt.Errorf("error getting user info from IDP. Error: %w", err)
}

allClaims := make(map[string]any, 10)
err = userInfo.Claims(&allClaims)
if err != nil {
logger.Errorf(ctx, "Error unmarshalling raw claims %s", err)
return &service.UserInfoResponse{}, fmt.Errorf("error unmarshalling raw claims. Error: %w", err)
}

alreadyRead := []string{"subject", "name", "preferred_username", "given_name", "family_name", "email", "picture"}
for _, existing := range alreadyRead {
delete(allClaims, existing)
}

var response _struct.Struct
b, err := json.Marshal(allClaims)
if err != nil {
return &service.UserInfoResponse{}, fmt.Errorf("failed to marshal additional claims to json. Error: %w", err)
}

err = protojson.Unmarshal(b, &response)
if err != nil {
return nil, fmt.Errorf("failed to unamarshal additional claims to proto.struct. Error: %w", err)
}

resp.AdditionalClaims = &response

return resp, err
}

Expand Down

0 comments on commit e89a049

Please sign in to comment.