amocrm/internal/controllers/webhook.go

88 lines
2.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package controllers
import (
"amocrm/internal/service"
"amocrm/internal/tools"
"fmt"
"github.com/gofiber/fiber/v2"
"go.uber.org/zap"
"net/http"
"strconv"
)
// контроллер на который редиректятся ответы по авторизации в амо
func (c *WebhookController) WebhookCreate(ctx *fiber.Ctx) error {
code := ctx.Query("code") // Authorization 20 минут
referer := ctx.Query("referer") // адрес аккаунта пользователя
state := ctx.Query("state") // строка которая передавалась в соц аус сервисе
fromWidget := ctx.Query("from_widget")
platform := ctx.Query("platform") // ru/global 1/2
noAccess := ctx.Query("error")
if noAccess != "" {
return ctx.Status(http.StatusForbidden).SendString("Access denied")
}
accountID, err := tools.DeserializeProtobufMessage(state)
if err != nil {
c.logger.Error("error Deserialize Protobuf Message", zap.Error(err))
return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error")
}
if accountID == nil {
c.logger.Error("error account id do not be nil", zap.Error(err))
return ctx.Status(fiber.StatusBadRequest).SendString("nil account id")
}
req := service.ParamsWebhookCreate{
Code: code,
Referer: referer,
AccountID: *accountID,
FromWidget: fromWidget,
Platform: platform,
}
err = c.service.WebhookCreate(ctx.Context(), req)
if err != nil {
c.logger.Error("error create webhook", zap.Error(err))
return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error")
}
return ctx.SendStatus(fiber.StatusOK)
}
// todo проверить надо
func (c *WebhookController) WebhookDelete(ctx *fiber.Ctx) error {
clientUUID := ctx.Query("client_uuid")
signature := ctx.Query("signature")
amoIDStr := ctx.Query("account_id")
fmt.Println(clientUUID)
fmt.Println(signature)
fmt.Println(amoIDStr)
if clientUUID == "" || signature == "" || amoIDStr == "" {
return ctx.Status(fiber.StatusBadRequest).SendString("some nil values")
}
amoID, err := strconv.Atoi(amoIDStr)
if err != nil {
return ctx.Status(fiber.StatusBadRequest).SendString("invalid account_id type")
}
if !c.verify.CheckIntegrationID(clientUUID) {
return ctx.Status(fiber.StatusUnauthorized).SendString("invalid hook signature")
}
if !c.verify.VerifySignature(clientUUID, signature, amoID) {
return ctx.Status(fiber.StatusUnauthorized).SendString("invalid hook signature")
}
err = c.service.WebhookDelete(ctx.Context(), amoID)
if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error")
}
return ctx.SendStatus(fiber.StatusOK)
}