diff --git a/internal/domain/user.go b/internal/domain/user.go index 1ff4967..74a431e 100644 --- a/internal/domain/user.go +++ b/internal/domain/user.go @@ -46,12 +46,18 @@ type User struct { DeletedAt *time.Time } +// TODO: move to another file? type Challenge struct { Message uuid.UUID TimeStamp time.Time ExpiresAt time.Time } +// TODO: check EIP712 in here for challenge validation +func (c *Challenge) IsExpired() bool { + return time.Now().After(c.ExpiresAt) +} + func NewUser(pubKey, name, lastName, phoneNumber, email, nationalID string) (*User, error) { _, err := phone.IsValid(phoneNumber) diff --git a/internal/usecase/auth_service.go b/internal/usecase/auth_service.go index 4f7edd2..53b362a 100644 --- a/internal/usecase/auth_service.go +++ b/internal/usecase/auth_service.go @@ -11,6 +11,7 @@ import ( type AuthService interface { GenerateChallenge(ctx context.Context, pubKey string) (*domain.Challenge, error) + Authenticate(ctx context.Context, pubKey string, signature string, challenge *domain.Challenge, chainID uint) (*UserToken, error) } type authService struct { @@ -21,6 +22,12 @@ type authService struct { refreshTokenExp uint } +type UserToken struct { + AuthorizationToken string + RefreshToken string + ExpiresAt int64 +} + func NewAuthService( userRepo *domain.UserRepo, sessionRepo *domain.SessionRepo, @@ -47,3 +54,7 @@ func (s *authService) GenerateChallenge(ctx context.Context, pubKey string) (*do } return challenge, nil } + +func (s *authService) Authenticate(ctx context.Context, pubKey string, signature string, challenge *domain.Challenge, chainID uint) (*UserToken, error) { + return nil, nil +}