mirror of
https://github.com/pocket-id/pocket-id.git
synced 2026-07-17 16:29:55 +00:00
80 lines
3.3 KiB
Go
80 lines
3.3 KiB
Go
package controller
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
|
|
"github.com/danielgtaylor/huma/v2"
|
|
|
|
"github.com/pocket-id/pocket-id/backend/internal/dto"
|
|
"github.com/pocket-id/pocket-id/backend/internal/middleware"
|
|
"github.com/pocket-id/pocket-id/backend/internal/service"
|
|
httpapi "github.com/pocket-id/pocket-id/backend/internal/utils/huma"
|
|
)
|
|
|
|
type customClaimUserInput struct {
|
|
UserID string `path:"userId"`
|
|
Body []dto.CustomClaimCreateDto `required:"true"`
|
|
}
|
|
|
|
type customClaimUserGroupInput struct {
|
|
UserGroupID string `path:"userGroupId"`
|
|
Body []dto.CustomClaimCreateDto `required:"true"`
|
|
}
|
|
|
|
// NewCustomClaimController registers custom claim management routes
|
|
func NewCustomClaimController(api huma.API, authMiddleware *middleware.AuthMiddleware, customClaimService *service.CustomClaimService) {
|
|
controller := &CustomClaimController{customClaimService: customClaimService}
|
|
auth := authMiddleware.Huma(api)
|
|
|
|
suggestionsOperation := huma.Operation{OperationID: "list-custom-claim-suggestions", Method: http.MethodGet, Path: "/api/custom-claims/suggestions", Summary: "Get custom claim suggestions", Tags: []string{"Custom Claims"}}
|
|
auth(&suggestionsOperation)
|
|
httpapi.Register(api, suggestionsOperation, controller.getSuggestionsHandler)
|
|
|
|
userOperation := huma.Operation{OperationID: "update-user-custom-claims", Method: http.MethodPut, Path: "/api/custom-claims/user/{userId}", Summary: "Update custom claims for a user", Tags: []string{"Custom Claims"}}
|
|
auth(&userOperation)
|
|
httpapi.Register(api, userOperation, controller.updateCustomClaimsForUserHandler)
|
|
|
|
userGroupOperation := huma.Operation{OperationID: "update-user-group-custom-claims", Method: http.MethodPut, Path: "/api/custom-claims/user-group/{userGroupId}", Summary: "Update custom claims for a user group", Tags: []string{"Custom Claims"}}
|
|
auth(&userGroupOperation)
|
|
httpapi.Register(api, userGroupOperation, controller.updateCustomClaimsForUserGroupHandler)
|
|
}
|
|
|
|
type CustomClaimController struct {
|
|
customClaimService *service.CustomClaimService
|
|
}
|
|
|
|
func (ccc *CustomClaimController) getSuggestionsHandler(ctx context.Context, _ *httpapi.EmptyInput) (*httpapi.BodyOutput[[]string], error) {
|
|
claims, err := ccc.customClaimService.GetSuggestions(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &httpapi.BodyOutput[[]string]{Body: claims}, nil
|
|
}
|
|
|
|
func (ccc *CustomClaimController) updateCustomClaimsForUserHandler(ctx context.Context, input *customClaimUserInput) (*httpapi.BodyOutput[[]dto.CustomClaimDto], error) {
|
|
claims, err := ccc.customClaimService.UpdateCustomClaimsForUser(ctx, input.UserID, input.Body)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var output []dto.CustomClaimDto
|
|
if err := dto.MapStructList(claims, &output); err != nil {
|
|
return nil, err
|
|
}
|
|
return &httpapi.BodyOutput[[]dto.CustomClaimDto]{Body: output}, nil
|
|
}
|
|
|
|
func (ccc *CustomClaimController) updateCustomClaimsForUserGroupHandler(ctx context.Context, input *customClaimUserGroupInput) (*httpapi.BodyOutput[[]dto.CustomClaimDto], error) {
|
|
claims, err := ccc.customClaimService.UpdateCustomClaimsForUserGroup(ctx, input.UserGroupID, input.Body)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var output []dto.CustomClaimDto
|
|
if err := dto.MapStructList(claims, &output); err != nil {
|
|
return nil, err
|
|
}
|
|
return &httpapi.BodyOutput[[]dto.CustomClaimDto]{Body: output}, nil
|
|
}
|