mirror of
https://github.com/pocket-id/pocket-id.git
synced 2026-01-27 00:29:12 -06:00
123 lines
3.8 KiB
Go
123 lines
3.8 KiB
Go
package controller
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"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"
|
|
)
|
|
|
|
func NewScimController(group *gin.RouterGroup, authMiddleware *middleware.AuthMiddleware, scimService *service.ScimService) {
|
|
ugc := ScimController{
|
|
scimService: scimService,
|
|
}
|
|
|
|
group.POST("/scim/service-provider", authMiddleware.Add(), ugc.createServiceProviderHandler)
|
|
group.POST("/scim/service-provider/:id/sync", authMiddleware.Add(), ugc.syncServiceProviderHandler)
|
|
group.PUT("/scim/service-provider/:id", authMiddleware.Add(), ugc.updateServiceProviderHandler)
|
|
group.DELETE("/scim/service-provider/:id", authMiddleware.Add(), ugc.deleteServiceProviderHandler)
|
|
}
|
|
|
|
type ScimController struct {
|
|
scimService *service.ScimService
|
|
}
|
|
|
|
// syncServiceProviderHandler godoc
|
|
// @Summary Sync SCIM service provider
|
|
// @Description Trigger synchronization for a SCIM service provider
|
|
// @Tags SCIM
|
|
// @Param id path string true "Service Provider ID"
|
|
// @Success 200 "OK"
|
|
// @Router /api/scim/service-provider/{id}/sync [post]
|
|
func (c *ScimController) syncServiceProviderHandler(ctx *gin.Context) {
|
|
err := c.scimService.SyncServiceProvider(ctx.Request.Context(), ctx.Param("id"))
|
|
if err != nil {
|
|
_ = ctx.Error(err)
|
|
return
|
|
}
|
|
|
|
ctx.Status(http.StatusOK)
|
|
}
|
|
|
|
// createServiceProviderHandler godoc
|
|
// @Summary Create SCIM service provider
|
|
// @Description Create a new SCIM service provider
|
|
// @Tags SCIM
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param serviceProvider body dto.ScimServiceProviderCreateDTO true "SCIM service provider information"
|
|
// @Success 201 {object} dto.ScimServiceProviderDTO "Created SCIM service provider"
|
|
// @Router /api/scim/service-provider [post]
|
|
func (c *ScimController) createServiceProviderHandler(ctx *gin.Context) {
|
|
var input dto.ScimServiceProviderCreateDTO
|
|
if err := ctx.ShouldBindJSON(&input); err != nil {
|
|
_ = ctx.Error(err)
|
|
return
|
|
}
|
|
|
|
provider, err := c.scimService.CreateServiceProvider(ctx.Request.Context(), &input)
|
|
if err != nil {
|
|
_ = ctx.Error(err)
|
|
return
|
|
}
|
|
|
|
var providerDTO dto.ScimServiceProviderDTO
|
|
if err := dto.MapStruct(provider, &providerDTO); err != nil {
|
|
_ = ctx.Error(err)
|
|
return
|
|
}
|
|
|
|
ctx.JSON(http.StatusCreated, providerDTO)
|
|
}
|
|
|
|
// updateServiceProviderHandler godoc
|
|
// @Summary Update SCIM service provider
|
|
// @Description Update an existing SCIM service provider
|
|
// @Tags SCIM
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param id path string true "Service Provider ID"
|
|
// @Param serviceProvider body dto.ScimServiceProviderCreateDTO true "SCIM service provider information"
|
|
// @Success 200 {object} dto.ScimServiceProviderDTO "Updated SCIM service provider"
|
|
// @Router /api/scim/service-provider/{id} [put]
|
|
func (c *ScimController) updateServiceProviderHandler(ctx *gin.Context) {
|
|
var input dto.ScimServiceProviderCreateDTO
|
|
if err := ctx.ShouldBindJSON(&input); err != nil {
|
|
_ = ctx.Error(err)
|
|
return
|
|
}
|
|
|
|
provider, err := c.scimService.UpdateServiceProvider(ctx.Request.Context(), ctx.Param("id"), &input)
|
|
if err != nil {
|
|
_ = ctx.Error(err)
|
|
return
|
|
}
|
|
|
|
var providerDTO dto.ScimServiceProviderDTO
|
|
if err := dto.MapStruct(provider, &providerDTO); err != nil {
|
|
_ = ctx.Error(err)
|
|
return
|
|
}
|
|
|
|
ctx.JSON(http.StatusOK, providerDTO)
|
|
}
|
|
|
|
// deleteServiceProviderHandler godoc
|
|
// @Summary Delete SCIM service provider
|
|
// @Description Delete a SCIM service provider by ID
|
|
// @Tags SCIM
|
|
// @Param id path string true "Service Provider ID"
|
|
// @Success 204 "No Content"
|
|
// @Router /api/scim/service-provider/{id} [delete]
|
|
func (c *ScimController) deleteServiceProviderHandler(ctx *gin.Context) {
|
|
err := c.scimService.DeleteServiceProvider(ctx.Request.Context(), ctx.Param("id"))
|
|
if err != nil {
|
|
_ = ctx.Error(err)
|
|
return
|
|
}
|
|
|
|
ctx.Status(http.StatusNoContent)
|
|
}
|