customer/internal/client/auth.go
2023-05-16 04:12:34 +03:00

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
}