diff --git a/go.mod b/go.mod index e65b7c0..4a84f93 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/lib/pq v1.10.9 github.com/twmb/franz-go v1.17.1 go.uber.org/zap v1.27.0 - penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20241011130913-c09d04ca6d73 + penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20241017210010-7ff2025f8b7d penahub.gitlab.yandexcloud.net/devops/linters/golang.git v0.0.0-20240829220549-d35409b619a3 ) diff --git a/go.sum b/go.sum index 1b8b805..b3521c9 100644 --- a/go.sum +++ b/go.sum @@ -141,7 +141,7 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240202120244-c4ef330cfe5d h1:gbaDt35HMDqOK84WYmDIlXMI7rstUcRqNttaT6Kx1do= penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240202120244-c4ef330cfe5d/go.mod h1:lTmpjry+8evVkXWbEC+WMOELcFkRD1lFMc7J09mOndM= -penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20241011130913-c09d04ca6d73 h1:EdWsqlJCpgDgegx/f/6UKr5eRRdlF1vcxgh8wyMFLSE= -penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20241011130913-c09d04ca6d73/go.mod h1:uOuosXduBzd2WbLH6TDZO7ME7ZextulA662oZ6OsoB0= +penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20241017210010-7ff2025f8b7d h1:ylWixuCwg6ZT8vox/adpcuOalCa/aNRihfxom6fvaMc= +penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20241017210010-7ff2025f8b7d/go.mod h1:uOuosXduBzd2WbLH6TDZO7ME7ZextulA662oZ6OsoB0= penahub.gitlab.yandexcloud.net/devops/linters/golang.git v0.0.0-20240829220549-d35409b619a3 h1:sf6e2mp582L3i/FMDd2q6QuWm1njRXzYpIX0SipsvM4= penahub.gitlab.yandexcloud.net/devops/linters/golang.git v0.0.0-20240829220549-d35409b619a3/go.mod h1:i7M72RIpkSjcQtHID6KKj9RT/EYZ1rxS6tIPKWa/BSY= diff --git a/internal/controllers/fields.go b/internal/controllers/fields.go index 003ac1a..24d44e7 100644 --- a/internal/controllers/fields.go +++ b/internal/controllers/fields.go @@ -36,7 +36,7 @@ func (c *Controller) UpdateListCustom(ctx *fiber.Ctx) error { return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required") } - //accountID := "654a8909725f47e926f0bebc" + //accountID := "64f2cd7a7047f28fdabf6d9e" err := c.service.UpdateListCustom(ctx.Context(), accountID) if err != nil { diff --git a/internal/controllers/pipelines.go b/internal/controllers/pipelines.go index 23758dc..981d6c3 100644 --- a/internal/controllers/pipelines.go +++ b/internal/controllers/pipelines.go @@ -13,7 +13,7 @@ func (c *Controller) UpdateListPipelines(ctx *fiber.Ctx) error { return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required") } - //accountID := "654a8909725f47e926f0bebc" + //accountID := "64f2cd7a7047f28fdabf6d9e" err := c.service.UpdateListPipelines(ctx.Context(), accountID) if err != nil { diff --git a/internal/controllers/steps.go b/internal/controllers/steps.go index 8df6875..8c31bc5 100644 --- a/internal/controllers/steps.go +++ b/internal/controllers/steps.go @@ -36,7 +36,7 @@ func (c *Controller) UpdateListSteps(ctx *fiber.Ctx) error { return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required") } - //accountID := "654a8909725f47e926f0bebc" + //accountID := "64f2cd7a7047f28fdabf6d9e" err := c.service.UpdateListSteps(ctx.Context(), accountID) if err != nil { diff --git a/internal/service/user.go b/internal/service/user.go index 69ce402..84b2ba3 100644 --- a/internal/service/user.go +++ b/internal/service/user.go @@ -65,7 +65,7 @@ func (s *Service) ConnectAccount(ctx context.Context, accountID string) (*model. oauthURL := url.URL{ Scheme: "https", - Host: "b24-ld76ub.bitrix24.ru", // todo check + Host: "b24-s5jg6c.bitrix24.ru", // todo check надо проверить как с дургими доменами работает, потому что сейчас это домен каждого отдельного битрикса Path: "/oauth/authorize/", RawQuery: url.Values{ "client_id": {s.config.IntegrationID}, diff --git a/internal/workers_methods/methods.go b/internal/workers_methods/methods.go index 5f82a67..8b9f5d8 100644 --- a/internal/workers_methods/methods.go +++ b/internal/workers_methods/methods.go @@ -3,6 +3,7 @@ package workers_methods import ( "context" "encoding/json" + "errors" "fmt" "go.uber.org/zap" "penahub.gitlab.yandexcloud.net/backend/quiz/bitrix/internal/models" @@ -43,17 +44,12 @@ func (m *Methods) UpdateTokens(ctx context.Context) ([]model.Token, error) { } for _, oldToken := range allTokens { - user, err := m.repo.BitrixRepo.GetCurrentAccount(ctx, oldToken.AccountID) - if err != nil { - m.logger.Error("error getting account by id in UpdateTokens", zap.Error(err)) - return nil, err - } req := models.UpdateWebHookReq{ GrantType: "refresh_token", RefreshToken: oldToken.RefreshToken, } - resp, err := m.bitrixClient.CreateWebHook(&req, user.Subdomain) + resp, err := m.bitrixClient.CreateWebHook(&req, false) if err != nil { m.logger.Error("error create webhook in UpdateTokens", zap.Error(err)) continue @@ -526,12 +522,18 @@ func (m *Methods) CreateUserFromWebHook(ctx context.Context, msg models.KafkaMes Code: msg.AuthCode, } - tokens, err := m.bitrixClient.CreateWebHook(&forGetTokens, msg.RefererURL) + tokens, err := m.bitrixClient.CreateWebHook(&forGetTokens, true) if err != nil { m.logger.Error("error getting webhook in CreateUserFromWebHook:", zap.Error(err)) return model.Token{}, err } + fmt.Println("tokens", tokens) + + if tokens.AccessToken == "" || tokens.RefreshToken == "" { + return model.Token{}, errors.New("invalid token") + } + toCreate := model.BitrixAccount{ AccountID: msg.AccountID, BitrixID: msg.MemberID, @@ -740,7 +742,7 @@ func (m *Methods) UserReLogin(ctx context.Context, msg models.KafkaMessage) erro Code: msg.AuthCode, } - tokens, err := m.bitrixClient.CreateWebHook(&forGetTokens, msg.RefererURL) + tokens, err := m.bitrixClient.CreateWebHook(&forGetTokens, true) if err != nil { m.logger.Error("error getting tokens in method user re-login:", zap.Error(err)) return err diff --git a/pkg/bitrixClient/bitrix.go b/pkg/bitrixClient/bitrix.go index d512141..56e60c3 100644 --- a/pkg/bitrixClient/bitrix.go +++ b/pkg/bitrixClient/bitrix.go @@ -45,6 +45,7 @@ func NewBitrixClient(deps BitrixDeps) *Bitrix { } } +// todo растестить этот запрос пока не проходит // https://dev.1c-bitrix.ru/rest_help/users/user_search.php func (b *Bitrix) GetUserList(accessToken string, domain string) (*models.ResponseGetListUsers, error) { for { @@ -80,27 +81,39 @@ func (b *Bitrix) GetUserList(accessToken string, domain string) (*models.Respons } // https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=99&LESSON_ID=2486 -func (b *Bitrix) CreateWebHook(req models.WebHookRequest, domain string) (*models.CreateWebHookResp, error) { +// https://apidocs.bitrix24.ru/api-reference/oauth/index.html +func (b *Bitrix) CreateWebHook(req models.WebHookRequest, tp bool) (*models.CreateWebHookResp, error) { for { if b.rateLimiter.Check() { req.SetClientID(b.integrationID) req.SetClientSecret(b.integrationSecret) - bodyBytes, err := json.Marshal(req) - if err != nil { - b.logger.Error("error marshal req in CreateWebHook:", zap.Error(err)) - return nil, err + var query string + + if tp { + query = fmt.Sprintf( + "https://oauth.bitrix.info/oauth/token/?grant_type=%s&client_id=%s&client_secret=%s&code=%s", + req.GetGrantType(), b.integrationID, b.integrationSecret, req.GetToken(), + ) + } else { + query = fmt.Sprintf( + "https://oauth.bitrix.info/oauth/token/?grant_type=%s&client_id=%s&client_secret=%s&refresh_token=%s", + req.GetGrantType(), b.integrationID, b.integrationSecret, req.GetToken(), + ) } - agent := b.fiberClient.Get(fmt.Sprintf("https://%s/oauth/token/", domain)) - agent.Set("Content-Type", "application/json").Body(bodyBytes) + + agent := b.fiberClient.Get(query) + agent.Set("Content-Type", "application/json") statusCode, resBody, errs := agent.Bytes() if len(errs) > 0 { - for _, err = range errs { + for _, err := range errs { b.logger.Error("error sending request in CreateWebHook for create or update tokens", zap.Error(err)) } return nil, fmt.Errorf("request failed: %v", errs[0]) } + fmt.Println("CreateWebHook", string(resBody), statusCode) + if statusCode != fiber.StatusOK { errorMessage := fmt.Sprintf("received an incorrect response from CreateWebHook: %s", string(resBody)) b.logger.Error(errorMessage, zap.Int("status", statusCode)) @@ -108,7 +121,7 @@ func (b *Bitrix) CreateWebHook(req models.WebHookRequest, domain string) (*model } var tokens models.CreateWebHookResp - err = json.Unmarshal(resBody, &tokens) + err := json.Unmarshal(resBody, &tokens) if err != nil { b.logger.Error("error unmarshal CreateWebHookResp:", zap.Error(err)) return nil, err diff --git a/pkg/bitrixClient/bitrix_test.go b/pkg/bitrixClient/bitrix_test.go index baa9b65..e82534b 100644 --- a/pkg/bitrixClient/bitrix_test.go +++ b/pkg/bitrixClient/bitrix_test.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "go.uber.org/zap" + "penahub.gitlab.yandexcloud.net/backend/quiz/bitrix/internal/models" "penahub.gitlab.yandexcloud.net/backend/quiz/bitrix/internal/workers/limiter" "testing" "time" @@ -151,3 +152,47 @@ func TestGetListFields(t *testing.T) { // //"CATEGORY_ID":"1" } + +func Test_Auth(t *testing.T) { + ctx := context.Background() + lim := limiter.NewRateLimiter(ctx, 50, 2*time.Second) + logger := zap.NewNop() + b := NewBitrixClient(BitrixDeps{ + Logger: logger, + RedirectionURL: "https://squiz.pena.digital/integrations", + IntegrationID: "app.670bd825e44c52.61826940", + IntegrationSecret: "Ki0MElZXS6dE6tRsGxixri2jmxbxF2Xa4qQpBPziGdAvvLAHJx", + RateLimiter: lim, + }) + + tokens, err := b.CreateWebHook(&models.CreateWebHookReq{ + GrantType: "authorization_code", + Code: "50cb1067007232200072541200000001000007aab0e419e6de4ebff7dd4b238c144bae", + }, true) + + if err != nil { + fmt.Println(err) + return + } + fmt.Println(tokens) +} + +func Test_GetListUsers(t *testing.T) { + ctx := context.Background() + lim := limiter.NewRateLimiter(ctx, 50, 2*time.Second) + logger := zap.NewNop() + b := NewBitrixClient(BitrixDeps{ + Logger: logger, + RedirectionURL: "https://squiz.pena.digital/integrations", + IntegrationID: "app.670bd825e44c52.61826940", + IntegrationSecret: "Ki0MElZXS6dE6tRsGxixri2jmxbxF2Xa4qQpBPziGdAvvLAHJx", + RateLimiter: lim, + }) + + r, err := b.GetUserList("6a901167007232200072541200000001000007701b6ceba9a960508e993456e9b48a5a", "b24-s5jg6c.bitrix24.ru") + if err != nil { + fmt.Println(err) + return + } + fmt.Println(r) +}