generated from PenaSide/GolangTemplate
91 lines
2.9 KiB
Go
91 lines
2.9 KiB
Go
package client
|
|
|
|
import (
|
|
"context"
|
|
"net/url"
|
|
|
|
"github.com/sirupsen/logrus"
|
|
"penahub.gitlab.yandexcloud.net/pena-services/pena-social-auth/internal/errors"
|
|
"penahub.gitlab.yandexcloud.net/pena-services/pena-social-auth/internal/models"
|
|
"penahub.gitlab.yandexcloud.net/pena-services/pena-social-auth/internal/utils"
|
|
"penahub.gitlab.yandexcloud.net/pena-services/pena-social-auth/pkg/client"
|
|
)
|
|
|
|
type AuthClientDeps struct {
|
|
Logger *logrus.Logger
|
|
URLs *models.AuthMicroServiceURL
|
|
}
|
|
|
|
type AuthClient struct {
|
|
logger *logrus.Logger
|
|
urls *models.AuthMicroServiceURL
|
|
}
|
|
|
|
func NewAuthClient(deps *AuthClientDeps) *AuthClient {
|
|
return &AuthClient{
|
|
logger: deps.Logger,
|
|
urls: deps.URLs,
|
|
}
|
|
}
|
|
|
|
func (receiver *AuthClient) GetUser(ctx context.Context, userID string) (*models.AuthUser, error) {
|
|
userURL, err := url.JoinPath(receiver.urls.User, userID)
|
|
if err != nil {
|
|
return nil, errors.ErrInvalidReturnValue
|
|
}
|
|
|
|
response, err := client.Get[models.AuthUser, models.FastifyError](ctx, &client.RequestSettings{
|
|
URL: userURL,
|
|
Headers: map[string]string{"Content-Type": "application/json"},
|
|
})
|
|
if err != nil {
|
|
receiver.logger.Errorf("failed to get user on <GetUser> of <AuthClient>: %v", err)
|
|
return nil, err
|
|
}
|
|
if response.Error != nil {
|
|
receiver.logger.Errorf("failed request on <GetUser> of <AuthClient>: %s", response.Error.Message)
|
|
return nil, utils.DetermineClientErrorResponse(response.StatusCode)
|
|
}
|
|
|
|
return response.Body, nil
|
|
}
|
|
|
|
func (receiver *AuthClient) Register(ctx context.Context, request *models.RegisterRequest) (*models.Tokens, error) {
|
|
response, err := client.Post[models.Tokens, models.FastifyError](ctx, &client.RequestSettings{
|
|
URL: receiver.urls.Register,
|
|
Headers: map[string]string{"Content-Type": "application/json"},
|
|
Body: request,
|
|
})
|
|
if err != nil {
|
|
receiver.logger.Errorf("failed to register user on <Register> of <AuthClient>: %v", err)
|
|
return nil, err
|
|
}
|
|
if response.Error != nil {
|
|
receiver.logger.Errorf("failed request on <Register> of <AuthClient>: %s", response.Error.Message)
|
|
return nil, utils.DetermineClientErrorResponse(response.StatusCode)
|
|
}
|
|
|
|
return response.Body, nil
|
|
}
|
|
|
|
func (receiver *AuthClient) Exchange(ctx context.Context, userID, signature string) (*models.Tokens, error) {
|
|
response, err := client.Post[models.Tokens, models.FastifyError](ctx, &client.RequestSettings{
|
|
URL: receiver.urls.Exchange,
|
|
Headers: map[string]string{"Content-Type": "application/json"},
|
|
Body: models.ExchangeRequest{
|
|
UserID: userID,
|
|
Signature: signature,
|
|
},
|
|
})
|
|
if err != nil {
|
|
receiver.logger.Errorf("failed to exchange code on <Exchange> of <AuthClient>: %v", err)
|
|
return nil, err
|
|
}
|
|
if response.Error != nil {
|
|
receiver.logger.Errorf("failed request on <Exchange> of <AuthClient>: %s", response.Error.Message)
|
|
return nil, utils.DetermineClientErrorResponse(response.StatusCode)
|
|
}
|
|
|
|
return response.Body, nil
|
|
}
|