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) //}