reworked add pena-social-auth client for gen aurhamourl
This commit is contained in:
parent
8ae7d51ad6
commit
3d88dcad04
@ -7,6 +7,7 @@ import (
|
|||||||
"amocrm/internal/server/http"
|
"amocrm/internal/server/http"
|
||||||
"amocrm/internal/service"
|
"amocrm/internal/service"
|
||||||
"amocrm/pkg/closer"
|
"amocrm/pkg/closer"
|
||||||
|
pena_social_auth "amocrm/pkg/pena-social-auth"
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"time"
|
"time"
|
||||||
@ -34,14 +35,20 @@ func Run(ctx context.Context, config initialize.Config, logger *zap.Logger) erro
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
socialAithClient := pena_social_auth.NewClient(pena_social_auth.Deps{
|
||||||
|
PenaSocialAuthURL: config.PenaSocialAuthURL,
|
||||||
|
Logger: logger,
|
||||||
|
ReturnURL: config.ReturnURL,
|
||||||
|
})
|
||||||
|
|
||||||
repo := repository.NewRepository(repository.Deps{
|
repo := repository.NewRepository(repository.Deps{
|
||||||
MdbUser: mdb.Collection("amoUsers"),
|
MdbUser: mdb.Collection("amoUsers"),
|
||||||
})
|
})
|
||||||
|
|
||||||
svc := service.NewService(service.Deps{
|
svc := service.NewService(service.Deps{
|
||||||
Repository: repo,
|
Repository: repo,
|
||||||
Logger: logger,
|
Logger: logger,
|
||||||
ConnectLink: config.ConnectLink,
|
SocialAuthClient: socialAithClient,
|
||||||
})
|
})
|
||||||
|
|
||||||
controller := controllers.NewController(controllers.Deps{
|
controller := controllers.NewController(controllers.Deps{
|
||||||
|
@ -154,8 +154,7 @@ func (c *Controller) GetCurrentAccount(ctx *fiber.Ctx) error {
|
|||||||
// при запросе на этот контроллер приходит только токен из которого получаем id аккаунта в ис
|
// при запросе на этот контроллер приходит только токен из которого получаем id аккаунта в ис
|
||||||
// отдает ссылку на подключение к amocrm и создает модель в монге имеющую связь с аккаунтом
|
// отдает ссылку на подключение к amocrm и создает модель в монге имеющую связь с аккаунтом
|
||||||
// в постгресе по accountid
|
// в постгресе по accountid
|
||||||
// создем запись в базе данных с пустыми полями и accountID, после аворизации через pena-social-auth
|
// ссылку составляет сервис соц авторизации
|
||||||
// его клиент присылает на этот сервис запрос с отстальными данными пользователя, они добавляются
|
|
||||||
func (c *Controller) ConnectAccount(ctx *fiber.Ctx) error {
|
func (c *Controller) ConnectAccount(ctx *fiber.Ctx) error {
|
||||||
accountID, ok := middleware.GetAccountId(ctx)
|
accountID, ok := middleware.GetAccountId(ctx)
|
||||||
if !ok {
|
if !ok {
|
||||||
|
@ -10,7 +10,8 @@ type Config struct {
|
|||||||
MongoPassword string `env:"MONGO_PASSWORD" envDefault:"test"`
|
MongoPassword string `env:"MONGO_PASSWORD" envDefault:"test"`
|
||||||
MongoDatabase string `env:"MONGO_DB" envDefault:"admin"`
|
MongoDatabase string `env:"MONGO_DB" envDefault:"admin"`
|
||||||
MongoAuth string `env:"MONGO_AUTH" envDefault:"admin"`
|
MongoAuth string `env:"MONGO_AUTH" envDefault:"admin"`
|
||||||
//ссылка для коннекта аккаунта к амо всегда одинаковая, содержит:
|
// урл в соц аус сервисе для генерации ссылки для авторизации в амо
|
||||||
//client_id - id интеграции,state - параметр состояния, mode - popup или post_message
|
PenaSocialAuthURL string `env:"PENA_SOCIAL_AUTH_URL"`
|
||||||
ConnectLink string `env:"CONNECT_LINK"`
|
// урл на который будет возвращен пользователь после авторизации
|
||||||
|
ReturnURL string `env:"RETURN_URL"`
|
||||||
}
|
}
|
||||||
|
@ -3,27 +3,28 @@ package service
|
|||||||
import (
|
import (
|
||||||
"amocrm/internal/models"
|
"amocrm/internal/models"
|
||||||
"amocrm/internal/repository"
|
"amocrm/internal/repository"
|
||||||
|
pena_social_auth "amocrm/pkg/pena-social-auth"
|
||||||
"context"
|
"context"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Deps struct {
|
type Deps struct {
|
||||||
Repository *repository.Repository
|
Repository *repository.Repository
|
||||||
Logger *zap.Logger
|
Logger *zap.Logger
|
||||||
ConnectLink string
|
SocialAuthClient *pena_social_auth.Client
|
||||||
}
|
}
|
||||||
|
|
||||||
type Service struct {
|
type Service struct {
|
||||||
repository *repository.Repository
|
repository *repository.Repository
|
||||||
logger *zap.Logger
|
logger *zap.Logger
|
||||||
connectLink string
|
socialAuthClient *pena_social_auth.Client
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewService(deps Deps) *Service {
|
func NewService(deps Deps) *Service {
|
||||||
return &Service{
|
return &Service{
|
||||||
repository: deps.Repository,
|
repository: deps.Repository,
|
||||||
logger: deps.Logger,
|
logger: deps.Logger,
|
||||||
connectLink: deps.ConnectLink,
|
socialAuthClient: deps.SocialAuthClient,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,8 +98,13 @@ func (s *Service) ConnectAccount(ctx context.Context, accountID string) (*models
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
link, err := s.socialAuthClient.GenerateAmocrmAuthURL()
|
||||||
|
if err != nil {
|
||||||
|
s.logger.Error("error sending request to pena social auth service:", zap.Error(err))
|
||||||
|
}
|
||||||
|
|
||||||
response := models.ConnectAccountResp{
|
response := models.ConnectAccountResp{
|
||||||
Link: s.connectLink,
|
Link: link,
|
||||||
}
|
}
|
||||||
|
|
||||||
return &response, nil
|
return &response, nil
|
||||||
|
67
pkg/pena-social-auth/client.go
Normal file
67
pkg/pena-social-auth/client.go
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
package pena_social_auth
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"github.com/gofiber/fiber/v2"
|
||||||
|
"go.uber.org/zap"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Deps struct {
|
||||||
|
PenaSocialAuthURL string
|
||||||
|
FiberClient *fiber.Client
|
||||||
|
Logger *zap.Logger
|
||||||
|
ReturnURL string
|
||||||
|
}
|
||||||
|
|
||||||
|
type Client struct {
|
||||||
|
penaSocialAuthURL string
|
||||||
|
fiberClient *fiber.Client
|
||||||
|
logger *zap.Logger
|
||||||
|
returnURL string
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewClient(deps Deps) *Client {
|
||||||
|
if deps.FiberClient == nil {
|
||||||
|
deps.FiberClient = fiber.AcquireClient()
|
||||||
|
}
|
||||||
|
|
||||||
|
return &Client{
|
||||||
|
penaSocialAuthURL: deps.PenaSocialAuthURL,
|
||||||
|
fiberClient: deps.FiberClient,
|
||||||
|
returnURL: deps.ReturnURL,
|
||||||
|
logger: deps.Logger,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type GenAuthURLResp struct {
|
||||||
|
URL string `json:"url"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) GenerateAmocrmAuthURL() (string, error) {
|
||||||
|
url := c.penaSocialAuthURL + "?accessToken=" + "" + "&returnUrl=" + c.returnURL
|
||||||
|
|
||||||
|
statusCode, resp, errs := c.fiberClient.Get(url).Bytes()
|
||||||
|
if len(errs) > 0 {
|
||||||
|
for _, err := range errs {
|
||||||
|
c.logger.Error("error sending request in GenerateAmocrmAuthURL", zap.Error(err))
|
||||||
|
}
|
||||||
|
return "", fmt.Errorf("request GenerateAmocrmAuthURL failed: %v", errs[0])
|
||||||
|
}
|
||||||
|
|
||||||
|
if statusCode != http.StatusOK {
|
||||||
|
errorMessage := fmt.Sprintf("received an incorrect response from GenerateAmocrmAuthURL: %d", statusCode)
|
||||||
|
c.logger.Error(errorMessage, zap.Int("status", statusCode))
|
||||||
|
return "", fmt.Errorf(errorMessage)
|
||||||
|
}
|
||||||
|
|
||||||
|
var response GenAuthURLResp
|
||||||
|
err := json.Unmarshal(resp, &response)
|
||||||
|
if err != nil {
|
||||||
|
c.logger.Error("error unmarshal GenAuthURLResp:", zap.Error(err))
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
return response.URL, nil
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user