chore: import clean Agent Desk snapshot (2/7)
This commit is contained in:
55
internal/handlers/api/webhook_handler.go
Normal file
55
internal/handlers/api/webhook_handler.go
Normal file
@@ -0,0 +1,55 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"agent-desk/internal/pkg/dto/request"
|
||||
"agent-desk/internal/pkg/httpx"
|
||||
"agent-desk/internal/pkg/httpx/params"
|
||||
"agent-desk/internal/services"
|
||||
"bytes"
|
||||
"io"
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func OrgSyncWebhook(ctx *gin.Context) {
|
||||
bodyBytes, err := io.ReadAll(ctx.Request.Body)
|
||||
if err != nil {
|
||||
ctx.JSON(http.StatusBadRequest, gin.H{"error": "failed to read body"})
|
||||
return
|
||||
}
|
||||
ctx.Request.Body = io.NopCloser(bytes.NewBuffer(bodyBytes))
|
||||
|
||||
signature := firstHeader(ctx, "X-Webhook-Signature", "X-Org-Signature", "X-DOS-Signature", "X-Hub-Signature-256")
|
||||
if !services.WebhookSyncService.VerifySignature(bodyBytes, signature) {
|
||||
ctx.JSON(http.StatusUnauthorized, gin.H{"error": "invalid signature"})
|
||||
return
|
||||
}
|
||||
|
||||
req := request.OrgSyncWebhookRequest{}
|
||||
if err := params.ReadJSON(ctx, &req); err != nil {
|
||||
httpx.WriteJSON(ctx, err)
|
||||
return
|
||||
}
|
||||
|
||||
if err := services.WebhookSyncService.HandleOrgSync(req); err != nil {
|
||||
httpx.WriteJSON(ctx, err)
|
||||
return
|
||||
}
|
||||
|
||||
httpx.WriteJSON(ctx, gin.H{"success": true})
|
||||
}
|
||||
|
||||
func DOSOrgSyncWebhook(ctx *gin.Context) {
|
||||
OrgSyncWebhook(ctx)
|
||||
}
|
||||
|
||||
func firstHeader(ctx *gin.Context, keys ...string) string {
|
||||
for _, k := range keys {
|
||||
if val := strings.TrimSpace(ctx.GetHeader(k)); val != "" {
|
||||
return val
|
||||
}
|
||||
}
|
||||
return ""
|
||||
}
|
||||
Reference in New Issue
Block a user