48 lines
1.1 KiB
Go
48 lines
1.1 KiB
Go
|
|
package usecase
|
||
|
|
|
||
|
|
import "context"
|
||
|
|
|
||
|
|
// TokenType distinguishes CloudEP JWT kinds.
|
||
|
|
type TokenType string
|
||
|
|
|
||
|
|
const (
|
||
|
|
TokenTypeAccess TokenType = "access"
|
||
|
|
TokenTypeRefresh TokenType = "refresh"
|
||
|
|
)
|
||
|
|
|
||
|
|
// TokenPair is issued to clients after login or register confirm.
|
||
|
|
type TokenPair struct {
|
||
|
|
AccessToken string
|
||
|
|
RefreshToken string
|
||
|
|
ExpiresIn int64
|
||
|
|
TokenType string
|
||
|
|
}
|
||
|
|
|
||
|
|
// IssuePairRequest identifies the member receiving tokens.
|
||
|
|
type IssuePairRequest struct {
|
||
|
|
TenantID string
|
||
|
|
UID string
|
||
|
|
AuthGen int64
|
||
|
|
}
|
||
|
|
|
||
|
|
// AccessClaims are parsed from a valid access JWT.
|
||
|
|
type AccessClaims struct {
|
||
|
|
TenantID string
|
||
|
|
UID string
|
||
|
|
AuthGen int64
|
||
|
|
JTI string
|
||
|
|
}
|
||
|
|
|
||
|
|
// LogoutRequest revokes the current access token and its paired refresh token.
|
||
|
|
type LogoutRequest struct {
|
||
|
|
AccessToken string
|
||
|
|
}
|
||
|
|
|
||
|
|
// TokenUseCase signs and validates CloudEP JWTs.
|
||
|
|
type TokenUseCase interface {
|
||
|
|
IssuePair(ctx context.Context, req *IssuePairRequest) (*TokenPair, error)
|
||
|
|
Refresh(ctx context.Context, refreshToken string) (*TokenPair, error)
|
||
|
|
Logout(ctx context.Context, req *LogoutRequest) error
|
||
|
|
ParseAccessToken(ctx context.Context, accessToken string) (*AccessClaims, error)
|
||
|
|
}
|