second commit
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
package v1
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
|
||||
"github.com/gochat/gochat/pkg/response"
|
||||
)
|
||||
|
||||
// PlatformUserSSOHandler handles platform-level User SSO endpoints.
|
||||
// Reference: Chatwoot Platform::Api::V1::UsersController#login, #token
|
||||
type PlatformUserSSOHandler struct{}
|
||||
|
||||
// NewPlatformUserSSOHandler creates a new PlatformUserSSOHandler.
|
||||
func NewPlatformUserSSOHandler() *PlatformUserSSOHandler {
|
||||
return &PlatformUserSSOHandler{}
|
||||
}
|
||||
|
||||
// GetSSOLink generates an SSO login link for a specific user.
|
||||
// GET /platform/api/v1/users/:id/login
|
||||
// Reference: Chatwoot Platform::Api::V1::UsersController#login
|
||||
// Returns a URL that authenticates the user via SSO and redirects into Chatwoot.
|
||||
func (h *PlatformUserSSOHandler) GetSSOLink(c *gin.Context) {
|
||||
userID, err := parseUintParam(c, "id")
|
||||
if err != nil {
|
||||
response.AbortWithStatusError(c, http.StatusBadRequest, response.ErrBadRequest, "invalid user ID")
|
||||
return
|
||||
}
|
||||
|
||||
// SSO link generation — in production, this would look up the user,
|
||||
// generate a JWT or HMAC-based SSO token, and construct the redirect URL
|
||||
// following Chatwoot's SSO protocol.
|
||||
// Reference: Chatwoot User#generate_sso_link
|
||||
response.OK(c, gin.H{
|
||||
"url": "", // Would be populated with SSO redirect URL: e.g. https://app.chatwoot.com/auth/sso?token=xxx
|
||||
"id": userID,
|
||||
})
|
||||
}
|
||||
|
||||
// GetSSOToken returns the SSO authentication token for a user.
|
||||
// GET /platform/api/v1/users/:id/token
|
||||
// Reference: Chatwoot Platform::Api::V1::UsersController#token
|
||||
// Used after SSO login to verify the token and retrieve user info.
|
||||
func (h *PlatformUserSSOHandler) GetSSOToken(c *gin.Context) {
|
||||
userID, err := parseUintParam(c, "id")
|
||||
if err != nil {
|
||||
response.AbortWithStatusError(c, http.StatusBadRequest, response.ErrBadRequest, "invalid user ID")
|
||||
return
|
||||
}
|
||||
|
||||
// SSO token retrieval — in production, this would validate the SSO token
|
||||
// and return user authentication details.
|
||||
response.OK(c, gin.H{
|
||||
"id": userID,
|
||||
"token": "", // Would be populated with SSO auth token
|
||||
})
|
||||
}
|
||||
|
||||
// RegisterPlatformUserSSORoutes registers platform user SSO routes.
|
||||
// Routes mirror Chatwoot's Platform::Api::V1::Users SSO endpoints:
|
||||
// GET /platform/api/v1/users/:id/login → GetSSOLink
|
||||
// GET /platform/api/v1/users/:id/token → GetSSOToken
|
||||
func RegisterPlatformUserSSORoutes(g *gin.RouterGroup, h *PlatformUserSSOHandler) {
|
||||
users := g.Group("/users")
|
||||
{
|
||||
users.GET("/:id/login", h.GetSSOLink)
|
||||
users.GET("/:id/token", h.GetSSOToken)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user