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/service"
|
||||
"amocrm/pkg/closer"
|
||||
pena_social_auth "amocrm/pkg/pena-social-auth"
|
||||
"context"
|
||||
"errors"
|
||||
"time"
|
||||
@ -34,14 +35,20 @@ func Run(ctx context.Context, config initialize.Config, logger *zap.Logger) erro
|
||||
return err
|
||||
}
|
||||
|
||||
socialAithClient := pena_social_auth.NewClient(pena_social_auth.Deps{
|
||||
PenaSocialAuthURL: config.PenaSocialAuthURL,
|
||||
Logger: logger,
|
||||
ReturnURL: config.ReturnURL,
|
||||
})
|
||||
|
||||
repo := repository.NewRepository(repository.Deps{
|
||||
MdbUser: mdb.Collection("amoUsers"),
|
||||
})
|
||||
|
||||
svc := service.NewService(service.Deps{
|
||||
Repository: repo,
|
||||
Logger: logger,
|
||||
ConnectLink: config.ConnectLink,
|
||||
Repository: repo,
|
||||
Logger: logger,
|
||||
SocialAuthClient: socialAithClient,
|
||||
})
|
||||
|
||||
controller := controllers.NewController(controllers.Deps{
|
||||
|
@ -154,8 +154,7 @@ func (c *Controller) GetCurrentAccount(ctx *fiber.Ctx) error {
|
||||
// при запросе на этот контроллер приходит только токен из которого получаем id аккаунта в ис
|
||||
// отдает ссылку на подключение к amocrm и создает модель в монге имеющую связь с аккаунтом
|
||||
// в постгресе по accountid
|
||||
// создем запись в базе данных с пустыми полями и accountID, после аворизации через pena-social-auth
|
||||
// его клиент присылает на этот сервис запрос с отстальными данными пользователя, они добавляются
|
||||
// ссылку составляет сервис соц авторизации
|
||||
func (c *Controller) ConnectAccount(ctx *fiber.Ctx) error {
|
||||
accountID, ok := middleware.GetAccountId(ctx)
|
||||
if !ok {
|
||||
|
@ -10,7 +10,8 @@ type Config struct {
|
||||
MongoPassword string `env:"MONGO_PASSWORD" envDefault:"test"`
|
||||
MongoDatabase string `env:"MONGO_DB" envDefault:"admin"`
|
||||
MongoAuth string `env:"MONGO_AUTH" envDefault:"admin"`
|
||||
//ссылка для коннекта аккаунта к амо всегда одинаковая, содержит:
|
||||
//client_id - id интеграции,state - параметр состояния, mode - popup или post_message
|
||||
ConnectLink string `env:"CONNECT_LINK"`
|
||||
// урл в соц аус сервисе для генерации ссылки для авторизации в амо
|
||||
PenaSocialAuthURL string `env:"PENA_SOCIAL_AUTH_URL"`
|
||||
// урл на который будет возвращен пользователь после авторизации
|
||||
ReturnURL string `env:"RETURN_URL"`
|
||||
}
|
||||
|
@ -3,27 +3,28 @@ package service
|
||||
import (
|
||||
"amocrm/internal/models"
|
||||
"amocrm/internal/repository"
|
||||
pena_social_auth "amocrm/pkg/pena-social-auth"
|
||||
"context"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
type Deps struct {
|
||||
Repository *repository.Repository
|
||||
Logger *zap.Logger
|
||||
ConnectLink string
|
||||
Repository *repository.Repository
|
||||
Logger *zap.Logger
|
||||
SocialAuthClient *pena_social_auth.Client
|
||||
}
|
||||
|
||||
type Service struct {
|
||||
repository *repository.Repository
|
||||
logger *zap.Logger
|
||||
connectLink string
|
||||
repository *repository.Repository
|
||||
logger *zap.Logger
|
||||
socialAuthClient *pena_social_auth.Client
|
||||
}
|
||||
|
||||
func NewService(deps Deps) *Service {
|
||||
return &Service{
|
||||
repository: deps.Repository,
|
||||
logger: deps.Logger,
|
||||
connectLink: deps.ConnectLink,
|
||||
repository: deps.Repository,
|
||||
logger: deps.Logger,
|
||||
socialAuthClient: deps.SocialAuthClient,
|
||||
}
|
||||
}
|
||||
|
||||
@ -97,8 +98,13 @@ func (s *Service) ConnectAccount(ctx context.Context, accountID string) (*models
|
||||
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{
|
||||
Link: s.connectLink,
|
||||
Link: link,
|
||||
}
|
||||
|
||||
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