mirror of
https://github.com/phishingclub/phishingclub.git
synced 2026-07-04 03:17:58 +02:00
02f87b3e3a
Signed-off-by: Ronni Skansing <rskansing@gmail.com>
178 lines
4.4 KiB
Go
178 lines
4.4 KiB
Go
package controller
|
|
|
|
import (
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/google/uuid"
|
|
"github.com/phishingclub/phishingclub/errs"
|
|
"github.com/phishingclub/phishingclub/service"
|
|
)
|
|
|
|
// CompanyScimConfig is the SCIM configuration controller
|
|
type CompanyScimConfig struct {
|
|
Common
|
|
CompanyScimConfigService *service.CompanyScimConfig
|
|
ScimService *service.Scim
|
|
}
|
|
|
|
// Prune removes the company's SCIM-disabled recipients whose retention window has elapsed.
|
|
func (c *CompanyScimConfig) Prune(g *gin.Context) {
|
|
session, _, ok := c.handleSession(g)
|
|
if !ok {
|
|
return
|
|
}
|
|
companyID, err := uuid.Parse(g.Param("companyID"))
|
|
if err != nil {
|
|
c.Logger.Debugw("failed to parse companyID param", "error", err)
|
|
c.Response.BadRequestMessage(g, errs.MsgFailedToParseUUID)
|
|
return
|
|
}
|
|
pruned, err := c.ScimService.PruneSoftDeletedAuthorized(
|
|
g.Request.Context(),
|
|
session,
|
|
&companyID,
|
|
)
|
|
if ok := c.handleErrors(g, err); !ok {
|
|
return
|
|
}
|
|
c.Response.OK(g, gin.H{"pruned": pruned})
|
|
}
|
|
|
|
// Restore clears the SCIM-disabled mark from the company's deprovisioned recipients.
|
|
func (c *CompanyScimConfig) Restore(g *gin.Context) {
|
|
session, _, ok := c.handleSession(g)
|
|
if !ok {
|
|
return
|
|
}
|
|
companyID, err := uuid.Parse(g.Param("companyID"))
|
|
if err != nil {
|
|
c.Logger.Debugw("failed to parse companyID param", "error", err)
|
|
c.Response.BadRequestMessage(g, errs.MsgFailedToParseUUID)
|
|
return
|
|
}
|
|
restored, err := c.ScimService.RestoreSoftDeletedAuthorized(
|
|
g.Request.Context(),
|
|
session,
|
|
&companyID,
|
|
)
|
|
if ok := c.handleErrors(g, err); !ok {
|
|
return
|
|
}
|
|
c.Response.OK(g, gin.H{"restored": restored})
|
|
}
|
|
|
|
// upsertScimRequest is the request body for the Upsert handler
|
|
type upsertScimRequest struct {
|
|
Enabled bool `json:"enabled"`
|
|
}
|
|
|
|
// GetByCompanyID returns the SCIM configuration for the given company
|
|
func (c *CompanyScimConfig) GetByCompanyID(g *gin.Context) {
|
|
session, _, ok := c.handleSession(g)
|
|
if !ok {
|
|
return
|
|
}
|
|
// parse companyID from url param
|
|
companyID, err := uuid.Parse(g.Param("companyID"))
|
|
if err != nil {
|
|
c.Logger.Debugw("failed to parse companyID param", "error", err)
|
|
c.Response.BadRequestMessage(g, errs.MsgFailedToParseUUID)
|
|
return
|
|
}
|
|
// get
|
|
config, err := c.CompanyScimConfigService.GetByCompanyID(
|
|
g.Request.Context(),
|
|
session,
|
|
&companyID,
|
|
)
|
|
// handle response
|
|
if ok := c.handleErrors(g, err); !ok {
|
|
return
|
|
}
|
|
c.Response.OK(g, config)
|
|
}
|
|
|
|
// Upsert creates or updates the SCIM configuration for the given company
|
|
func (c *CompanyScimConfig) Upsert(g *gin.Context) {
|
|
session, _, ok := c.handleSession(g)
|
|
if !ok {
|
|
return
|
|
}
|
|
// parse companyID from url param
|
|
companyID, err := uuid.Parse(g.Param("companyID"))
|
|
if err != nil {
|
|
c.Logger.Debugw("failed to parse companyID param", "error", err)
|
|
c.Response.BadRequestMessage(g, errs.MsgFailedToParseUUID)
|
|
return
|
|
}
|
|
// parse request body
|
|
var req upsertScimRequest
|
|
if ok := c.handleParseRequest(g, &req); !ok {
|
|
return
|
|
}
|
|
// upsert
|
|
result, err := c.CompanyScimConfigService.Upsert(
|
|
g.Request.Context(),
|
|
session,
|
|
&companyID,
|
|
req.Enabled,
|
|
)
|
|
// handle response
|
|
if ok := c.handleErrors(g, err); !ok {
|
|
return
|
|
}
|
|
c.Response.OK(g, result)
|
|
}
|
|
|
|
// RotateToken generates a new bearer token for the given company's SCIM config.
|
|
// the plain token is returned once and must be stored by the caller.
|
|
func (c *CompanyScimConfig) RotateToken(g *gin.Context) {
|
|
session, _, ok := c.handleSession(g)
|
|
if !ok {
|
|
return
|
|
}
|
|
// parse companyID from url param
|
|
companyID, err := uuid.Parse(g.Param("companyID"))
|
|
if err != nil {
|
|
c.Logger.Debugw("failed to parse companyID param", "error", err)
|
|
c.Response.BadRequestMessage(g, errs.MsgFailedToParseUUID)
|
|
return
|
|
}
|
|
// rotate
|
|
result, err := c.CompanyScimConfigService.RotateToken(
|
|
g.Request.Context(),
|
|
session,
|
|
&companyID,
|
|
)
|
|
// handle response
|
|
if ok := c.handleErrors(g, err); !ok {
|
|
return
|
|
}
|
|
c.Response.OK(g, result)
|
|
}
|
|
|
|
// Delete removes the SCIM configuration for the given company
|
|
func (c *CompanyScimConfig) Delete(g *gin.Context) {
|
|
session, _, ok := c.handleSession(g)
|
|
if !ok {
|
|
return
|
|
}
|
|
// parse companyID from url param
|
|
companyID, err := uuid.Parse(g.Param("companyID"))
|
|
if err != nil {
|
|
c.Logger.Debugw("failed to parse companyID param", "error", err)
|
|
c.Response.BadRequestMessage(g, errs.MsgFailedToParseUUID)
|
|
return
|
|
}
|
|
// delete
|
|
err = c.CompanyScimConfigService.DeleteByCompanyID(
|
|
g.Request.Context(),
|
|
session,
|
|
&companyID,
|
|
)
|
|
// handle response
|
|
if ok := c.handleErrors(g, err); !ok {
|
|
return
|
|
}
|
|
c.Response.OK(g, gin.H{})
|
|
}
|