91 lines
3.4 KiB
Go
91 lines
3.4 KiB
Go
package controllers
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/gofiber/fiber/v2"
|
|
"go.uber.org/zap"
|
|
"penahub.gitlab.yandexcloud.net/backend/quiz/bitrix/internal/service"
|
|
)
|
|
|
|
// https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=99&LESSON_ID=2486
|
|
func (c *WebhookController) WebhookCreate(ctx *fiber.Ctx) error {
|
|
code := ctx.Query("code") // первый авторизационный код
|
|
domain := ctx.Query("domain") // домен портала, на котором происходит авторизация
|
|
state := ctx.Query("state") // значение, переданное в первом запросе
|
|
scope := ctx.Query("scope") // список прав доступа к REST API
|
|
memberID := ctx.Query("member_id") // уникальный идентификатор портала - id битрикса главного
|
|
serverDomain := ctx.Query("server_domain") // домен сервера авторизации
|
|
|
|
if code == "" || domain == "" || memberID == "" || serverDomain == "" {
|
|
c.logger.Error("Missing required fields", zap.String("code", code), zap.String("domain", domain), zap.String("member_id", memberID), zap.String("server_domain", serverDomain))
|
|
return ctx.Status(fiber.StatusBadRequest).SendString("Missing required fields")
|
|
}
|
|
|
|
if state == "" {
|
|
return ctx.Status(fiber.StatusBadRequest).SendString("State cannot be empty")
|
|
}
|
|
|
|
accountID, err := c.encrypt.DecryptStr([]byte(state))
|
|
if err != nil {
|
|
c.logger.Error("Error deserializing Protobuf message", zap.Error(err))
|
|
return ctx.Status(fiber.StatusInternalServerError).SendString("Failed to process state parameter")
|
|
}
|
|
|
|
if accountID == "" {
|
|
c.logger.Error("AccountID is missing from state")
|
|
return ctx.Status(fiber.StatusBadRequest).SendString("Invalid state parameter")
|
|
}
|
|
|
|
req := service.ParamsWebhookCreate{
|
|
Code: code,
|
|
Domain: domain,
|
|
AccountID: accountID,
|
|
MemberID: memberID,
|
|
Scope: scope,
|
|
ServerDomain: serverDomain,
|
|
}
|
|
|
|
err = c.service.WebhookCreate(ctx.Context(), req)
|
|
if err != nil {
|
|
c.logger.Error("Error creating webhook", zap.Error(err))
|
|
return ctx.Status(fiber.StatusInternalServerError).SendString(fmt.Sprintf("Internal Server Error: %v", err.Error()))
|
|
}
|
|
|
|
return ctx.Redirect(c.redirectURL)
|
|
}
|
|
|
|
//// 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)
|
|
//}
|