50 lines
1.1 KiB
Go
50 lines
1.1 KiB
Go
package usecase
|
|
|
|
import (
|
|
"backend/internal/domain"
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/ethereum/go-ethereum/common"
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
type AuthService interface {
|
|
GenerateChallenge(ctx context.Context, pubKey string) (*domain.Challenge, error)
|
|
}
|
|
|
|
type authService struct {
|
|
userRepo *domain.UserRepo
|
|
sessionRepo *domain.SessionRepo
|
|
challengeExp uint
|
|
tokenExp uint
|
|
refreshTokenExp uint
|
|
}
|
|
|
|
func NewAuthService(
|
|
userRepo *domain.UserRepo,
|
|
sessionRepo *domain.SessionRepo,
|
|
challengeExp uint,
|
|
tokenExp uint,
|
|
refreshTokenExp uint) AuthService {
|
|
return &authService{
|
|
userRepo: userRepo,
|
|
sessionRepo: sessionRepo,
|
|
challengeExp: challengeExp,
|
|
tokenExp: tokenExp,
|
|
refreshTokenExp: refreshTokenExp,
|
|
}
|
|
}
|
|
|
|
func (s *authService) GenerateChallenge(ctx context.Context, pubKey string) (*domain.Challenge, error) {
|
|
if !common.IsHexAddress(pubKey) {
|
|
return nil, domain.ErrWalletInvalid
|
|
}
|
|
challenge := &domain.Challenge{
|
|
Message: uuid.New(),
|
|
TimeStamp: time.Now().UTC(),
|
|
ExpiresAt: time.Now().Add(time.Duration(s.challengeExp) * time.Minute),
|
|
}
|
|
return challenge, nil
|
|
}
|