diff --git "a/\\" "b/\\" deleted file mode 100644 index af9f83d..0000000 --- "a/\\" +++ /dev/null @@ -1,123 +0,0 @@ -package v1 - -import ( - "context" - "errors" - - "gitea.badhouseplants.net/softplayer/softplayer-backend/internal/services" - accounts "gitea.badhouseplants.net/softplayer/softplayer-go-proto/pkg/accounts/v1" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" -) - -func NewPublicAccountServer( - accountsCtrl *services.AccountController, - authorizationCtrl *services.AuthController, -) *PublicAccountService { - return &PublicAccountService{ - accountsCtrl: accountsCtrl, - authorizationCtrl: authorizationCtrl, - } -} - -type PublicAccountService struct { - accounts.UnimplementedPublicAccountsServiceServer - accountsCtrl *services.AccountController - authorizationCtrl *services.AuthController -} - -func (a *PublicAccountService) SignIn(ctx context.Context, in *accounts.SignInRequest) (*accounts.SignInResponse, error) { - id, err := a.accountsCtrl.Login(ctx, in.GetEmail(), in.GetPassword()) - if err != nil { - if errors.Is(err, services.ErrUserNotFound) { - return nil, status.Error(codes.NotFound, "User not found") - } - return nil, status.Error(codes.Aborted, "Couldn't create a user") - } - accessToken, _, err := a.authorizationCtrl.GenerateToken(&services.JWTData{ - UserID: id, - TokenType: services.TokenTypeAccess, - TokenAud: services.TokenAudWeb, - }) - if err != nil { - return nil, status.Error(codes.Aborted, "Couldn't generate an access token") - } - - refreshToken, tokenID, err := a.authorizationCtrl.GenerateToken(&services.JWTData{ - UserID: id, - TokenType: services.TokenTypeRefresh, - TokenAud: services.TokenAudWeb, - }) - if err != nil { - return nil, status.Error(codes.Aborted, "Couldn't generate an access token") - } - - session := &services.Session{UserID: id} - - if err := a.authorizationCtrl.SaveSession(ctx, tokenID, session); err != nil { - return nil, status.Error(codes.Aborted, "Couldn't store session") - } - return &accounts.SignInResponse{ - TokenPair: &accounts.TokenPair{ - AccessToken: accessToken, - RefreshToken: refreshToken, - }, - }, nil -} - -// Create a new account in Softplayer -func (a *PublicAccountService) SignUp(ctx context.Context, in *accounts.SignUpRequest) (*accounts.SignUpResponse, error) { - data := &services.AccountData{ - Password: in.GetPassword(), - Email: in.GetEmail(), - Name: in.PersonalData.GetName(), - Surname: in.PersonalData.GetSurname(), - } - id, err := a.accountsCtrl.Create(ctx, data) - if err != nil { - if errors.Is(err, services.ErrEmailUsed) { - return nil, status.Error(codes.AlreadyExists, "Email is already used by another account") - } - return nil, status.Error(codes.Aborted, "Couldn't create a user") - } - - accessToken, _, err := a.authorizationCtrl.GenerateToken(&services.JWTData{ - UserID: id, - TokenType: services.TokenTypeAccess, - TokenAud: services.TokenAudWeb, - }) - if err != nil { - return nil, status.Error(codes.Aborted, "Couldn't generate an access token") - } - - refreshToken, tokenID, err := a.authorizationCtrl.GenerateToken(&services.JWTData{ - UserID: id, - TokenType: services.TokenTypeRefresh, - TokenAud: services.TokenAudWeb, - }) - if err != nil { - return nil, status.Error(codes.Aborted, "Couldn't generate an access token") - } - - session := &services.Session{UserID: id} - - if err := a.authorizationCtrl.SaveSession(ctx, tokenID, session); err != nil { - return nil, status.Error(codes.Aborted, "Couldn't store session") - } - - return &accounts.SignUpResponse{ - TokenPair: &accounts.TokenPair{ - AccessToken: accessToken, - RefreshToken: refreshToken, - }, - }, nil -} - -// Check if an email is already used by an account -func (a *PublicAccountService) IsEmailAvailable(ctx context.Context, in *accounts.IsEmailUsedRequest) (*accounts.IsEmailUsedResponse, error) { - exists, err := a.accountsCtrl.IsExist(ctx, in.GetEmail()) - if err != nil { - return nil, status.Error(codes.Aborted, "Couldn't check email availability") - } - return &accounts.IsEmailUsedResponse{Used: exists}, nil -}