78 lines
2.0 KiB
Go
78 lines
2.0 KiB
Go
package grpc
|
|
|
|
import (
|
|
"context"
|
|
"log"
|
|
|
|
"datarush/internal/auth/domain"
|
|
"datarush/internal/auth/service"
|
|
pb "datarush/pkg/api/auth"
|
|
|
|
"google.golang.org/grpc/codes"
|
|
"google.golang.org/grpc/status"
|
|
)
|
|
|
|
type AuthHandler struct {
|
|
pb.UnimplementedAuthServiceServer
|
|
authService *service.AuthService
|
|
}
|
|
|
|
func NewAuthHandler(authService *service.AuthService) *AuthHandler {
|
|
return &AuthHandler{
|
|
authService: authService,
|
|
}
|
|
}
|
|
|
|
func (h *AuthHandler) SignUp(ctx context.Context, req *pb.SignUpRequest) (*pb.SignUpResponse, error) {
|
|
token, err := h.authService.SignUp(ctx, req.Email, req.Username, req.Password)
|
|
if err != nil {
|
|
log.Printf("signup error: %v", err)
|
|
switch err {
|
|
case domain.ErrUserAlreadyExists:
|
|
return nil, status.Error(codes.AlreadyExists, "user already exists")
|
|
default:
|
|
return nil, status.Error(codes.Internal, "internal error")
|
|
}
|
|
}
|
|
|
|
return &pb.SignUpResponse{Token: token}, nil
|
|
}
|
|
|
|
func (h *AuthHandler) SignIn(ctx context.Context, req *pb.SignInRequest) (*pb.SignInResponse, error) {
|
|
token, err := h.authService.SignIn(ctx, req.Email, req.Password)
|
|
if err != nil {
|
|
log.Printf("signin error: %v", err)
|
|
switch err {
|
|
case domain.ErrInvalidPassword, domain.ErrUserNotFound:
|
|
return nil, status.Error(codes.Unauthenticated, "invalid credentials")
|
|
default:
|
|
return nil, status.Error(codes.Internal, "internal error")
|
|
}
|
|
}
|
|
|
|
return &pb.SignInResponse{Token: token}, nil
|
|
}
|
|
|
|
func (h *AuthHandler) ValidateToken(
|
|
ctx context.Context,
|
|
req *pb.ValidateTokenRequest,
|
|
) (*pb.ValidateTokenResponse, error) {
|
|
token := req.Token
|
|
|
|
if token == "" {
|
|
return nil, status.Error(codes.Unauthenticated, "missing token")
|
|
}
|
|
|
|
if token == "" {
|
|
return nil, status.Error(codes.Unauthenticated, "missing token")
|
|
}
|
|
|
|
user, err := h.authService.ValidateToken(ctx, token)
|
|
if err != nil {
|
|
log.Printf("validate token error: %v", err)
|
|
return nil, status.Error(codes.Unauthenticated, "invalid token")
|
|
}
|
|
|
|
return &pb.ValidateTokenResponse{UserId: user.ID.String()}, nil
|
|
}
|