2024-04-09 12:13:21 +00:00
|
|
|
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"`
|
|
|
|
}
|
|
|
|
|
2024-04-19 16:05:42 +00:00
|
|
|
func (c *Client) GenerateAmocrmAuthURL(accountID string) (string, error) {
|
|
|
|
url := c.penaSocialAuthURL + "?accessToken=" + accountID + "&returnUrl=" + c.returnURL
|
2024-04-09 12:13:21 +00:00
|
|
|
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
|
|
|
|
}
|