mirror of
https://github.com/pocket-id/pocket-id.git
synced 2026-07-18 08:49:54 +00:00
92 lines
3.2 KiB
Go
92 lines
3.2 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)
|
|
|
|
httpapi.Register(api, huma.Operation{
|
|
OperationID: "list-custom-claim-suggestions",
|
|
Method: http.MethodGet,
|
|
Path: "/api/custom-claims/suggestions",
|
|
Summary: "Get custom claim suggestions",
|
|
Tags: []string{"Custom Claims"},
|
|
}, controller.getSuggestionsHandler, auth)
|
|
|
|
httpapi.Register(api, 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"},
|
|
}, controller.updateCustomClaimsForUserHandler, auth)
|
|
|
|
httpapi.Register(api, 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"},
|
|
}, controller.updateCustomClaimsForUserGroupHandler, auth)
|
|
}
|
|
|
|
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
|
|
}
|