feat(auth): implement user and device authentication
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
package webui
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
|
||||
"cmroubao/backend-api/internal/usecase"
|
||||
)
|
||||
|
||||
type AuthUsecaseAdapter struct {
|
||||
service *usecase.AuthService
|
||||
}
|
||||
|
||||
func NewAuthUsecaseAdapter(
|
||||
service *usecase.AuthService,
|
||||
) (*AuthUsecaseAdapter, error) {
|
||||
if service == nil {
|
||||
return nil, errors.New("admin auth use case is required")
|
||||
}
|
||||
return &AuthUsecaseAdapter{service: service}, nil
|
||||
}
|
||||
|
||||
func (adapter *AuthUsecaseAdapter) LoginAdmin(
|
||||
ctx context.Context,
|
||||
input AdminLoginInput,
|
||||
) (AdminLoginResult, error) {
|
||||
result, err := adapter.service.LoginAdmin(
|
||||
ctx,
|
||||
usecase.LoginAdminCommand{
|
||||
Username: input.Username,
|
||||
Password: input.Password,
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
return AdminLoginResult{}, mapAuthUsecaseError(err)
|
||||
}
|
||||
return AdminLoginResult{
|
||||
Token: result.Token,
|
||||
ExpiresAt: result.ExpiresAt,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (adapter *AuthUsecaseAdapter) LogoutAdmin(
|
||||
ctx context.Context,
|
||||
token string,
|
||||
) error {
|
||||
if err := adapter.service.LogoutAdmin(ctx, token); err != nil {
|
||||
return mapAuthUsecaseError(err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func mapAuthUsecaseError(err error) error {
|
||||
var typed *usecase.Error
|
||||
if !errors.As(err, &typed) {
|
||||
return err
|
||||
}
|
||||
var public error
|
||||
switch typed.Kind {
|
||||
case usecase.ErrorKindUnauthorized,
|
||||
usecase.ErrorKindForbidden,
|
||||
usecase.ErrorKindInvalid:
|
||||
public = ErrInvalidCredentials
|
||||
case usecase.ErrorKindUnavailable:
|
||||
public = ErrUnavailable
|
||||
default:
|
||||
return err
|
||||
}
|
||||
return &adapterError{
|
||||
public: public,
|
||||
cause: err,
|
||||
}
|
||||
}
|
||||
|
||||
var _ AdminSessionService = (*AuthUsecaseAdapter)(nil)
|
||||
Reference in New Issue
Block a user