46 lines
1.9 KiB
Go
46 lines
1.9 KiB
Go
package mutil
|
|
|
|
import (
|
|
"errors"
|
|
"net/http"
|
|
|
|
"github.com/tech/sendico/pkg/api/http/response"
|
|
"github.com/tech/sendico/pkg/db/verification"
|
|
"github.com/tech/sendico/pkg/mlogger"
|
|
"github.com/tech/sendico/pkg/mservice"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
func MapTokenErrorToResponse(logger mlogger.Logger, service mservice.Type, err error) http.HandlerFunc {
|
|
if errors.Is(err, verification.ErrTokenNotFound) {
|
|
logger.Debug("Verification token not found during consume", zap.Error(err))
|
|
return response.NotFound(logger, service, "No account found associated with given verifcation token")
|
|
}
|
|
if errors.Is(err, verification.ErrTokenExpired) {
|
|
logger.Debug("Verification token expired during consume", zap.Error(err))
|
|
return response.Gone(logger, service, "token_expired", "verification token has expired")
|
|
}
|
|
if errors.Is(err, verification.ErrTokenAlreadyUsed) {
|
|
logger.Debug("Verification token already used during consume", zap.Error(err))
|
|
return response.DataConflict(logger, service, "verification token has already been used")
|
|
}
|
|
if errors.Is(err, verification.ErrTokenAttemptsExceeded) {
|
|
logger.Debug("Verification token attempts exceeded", zap.Error(err))
|
|
return response.Forbidden(logger, service, "code_attempts_exceeded", "verification token has already been used")
|
|
}
|
|
if errors.Is(err, verification.ErrCooldownActive) {
|
|
logger.Debug("Cooldown is still active", zap.Error(err))
|
|
return response.TooManyRequests(logger, service, "verification token can't be generated yet, cooldown is still active")
|
|
}
|
|
if errors.Is(err, verification.ErrIdempotencyConflict) {
|
|
logger.Debug("Verification idempotency key conflict", zap.Error(err))
|
|
return response.DataConflict(logger, service, "verification request was already processed")
|
|
}
|
|
if err != nil {
|
|
logger.Warn("Unexpected error during token verification", zap.Error(err))
|
|
return response.Auto(logger, service, err)
|
|
}
|
|
logger.Debug("No token verification error found")
|
|
return response.Success(logger)
|
|
}
|