package usecase import ( "context" "backend/pkg/permission/domain/entity" ) // TokenUseCase 定義與 Token 相關的操作接口 // //nolint:interfacebloat type TokenUseCase interface { // NewToken 創建新 Token,通常為 Access Token NewToken(ctx context.Context, req entity.AuthorizationReq) (entity.TokenResp, error) // RefreshToken 刷新目前的 Token,包括一次性 Token RefreshToken(ctx context.Context, req entity.RefreshTokenReq) (entity.RefreshTokenResp, error) // CancelToken 取消 Token,包括取消其關聯的 One-Time Token CancelToken(ctx context.Context, req entity.CancelTokenReq) error // ValidationToken 驗證 Token 是否有效 ValidationToken(ctx context.Context, req entity.ValidationTokenReq) (entity.ValidationTokenResp, error) // CancelTokens 根據 UID 或 Token ID 取消所有相關 Token,通常在用戶登出時使用 CancelTokens(ctx context.Context, req entity.DoTokenByUIDReq) error // CancelTokenByDeviceID 根據 Device ID 取消所有相關的 Token CancelTokenByDeviceID(ctx context.Context, req entity.DoTokenByDeviceIDReq) error // GetUserTokensByDeviceID 根據 Device ID 獲取所有 Token GetUserTokensByDeviceID(ctx context.Context, req entity.DoTokenByDeviceIDReq) ([]*entity.TokenResp, error) // GetUserTokensByUID 根據 UID 獲取所有 Token GetUserTokensByUID(ctx context.Context, req entity.QueryTokenByUIDReq) ([]*entity.TokenResp, error) // NewOneTimeToken 創建一次性 Token,例如 Refresh Token NewOneTimeToken(ctx context.Context, req entity.CreateOneTimeTokenReq) (entity.CreateOneTimeTokenResp, error) // CancelOneTimeToken 取消一次性 Token CancelOneTimeToken(ctx context.Context, req entity.CancelOneTimeTokenReq) error // ReadTokenBasicData 檢查Token 帶的資料 ReadTokenBasicData(ctx context.Context, token string) (map[string]string, error) // Blacklist operations // BlacklistToken 將 JWT token 加入黑名單 (立即撤銷) BlacklistToken(ctx context.Context, token string, reason string) error // IsTokenBlacklisted 檢查 JWT token 是否在黑名單中 IsTokenBlacklisted(ctx context.Context, jti string) (bool, error) // BlacklistAllUserTokens 將用戶的所有 token 加入黑名單 (全設備登出) BlacklistAllUserTokens(ctx context.Context, uid string, reason string) error }