sa_token_core/
error.rs

1// Author: 金书记
2//
3//! Error type definitions | 错误类型定义
4
5use thiserror::Error;
6
7pub type SaTokenResult<T> = Result<T, SaTokenError>;
8
9#[derive(Debug, Error)]
10pub enum SaTokenError {
11    // ============ Basic Token Errors | 基础 Token 错误 ============
12    #[error("Token not found or expired")]
13    TokenNotFound,
14    
15    #[error("Token is invalid: {0}")]
16    InvalidToken(String),
17    
18    #[error("Token has expired")]
19    TokenExpired,
20    
21    // ============ Authentication Errors | 认证错误 ============
22    #[error("User not logged in")]
23    NotLogin,
24    
25    // ============ Authorization Errors | 授权错误 ============
26    #[error("Permission denied: missing permission '{0}'")]
27    PermissionDenied(String),
28    
29    #[error("Role denied: missing role '{0}'")]
30    RoleDenied(String),
31    
32    // ============ Account Status Errors | 账户状态错误 ============
33    #[error("Account is banned until {0}")]
34    AccountBanned(String),
35    
36    #[error("Account is kicked out")]
37    AccountKickedOut,
38    
39    // ============ Session Errors | Session 错误 ============
40    #[error("Session not found")]
41    SessionNotFound,
42    
43    // ============ Nonce Errors | Nonce 错误 ============
44    #[error("Nonce has been used, possible replay attack detected")]
45    NonceAlreadyUsed,
46    
47    #[error("Invalid nonce format")]
48    InvalidNonceFormat,
49    
50    #[error("Nonce timestamp is invalid or expired")]
51    InvalidNonceTimestamp,
52    
53    // ============ Refresh Token Errors | 刷新令牌错误 ============
54    #[error("Refresh token not found or expired")]
55    RefreshTokenNotFound,
56    
57    #[error("Invalid refresh token data")]
58    RefreshTokenInvalidData,
59    
60    #[error("Missing login_id in refresh token")]
61    RefreshTokenMissingLoginId,
62    
63    #[error("Invalid expire time format in refresh token")]
64    RefreshTokenInvalidExpireTime,
65    
66    // ============ Token Validation Errors | Token 验证错误 ============
67    #[error("Token is empty")]
68    TokenEmpty,
69    
70    #[error("Token is too short")]
71    TokenTooShort,
72    
73    #[error("Login ID is not a valid number")]
74    LoginIdNotNumber,
75    
76    // ============ OAuth2 Errors | OAuth2 错误 ============
77    #[error("OAuth2 client not found")]
78    OAuth2ClientNotFound,
79    
80    #[error("Invalid client credentials")]
81    OAuth2InvalidCredentials,
82    
83    #[error("Client ID mismatch")]
84    OAuth2ClientIdMismatch,
85    
86    #[error("Redirect URI mismatch")]
87    OAuth2RedirectUriMismatch,
88    
89    #[error("Authorization code not found or expired")]
90    OAuth2CodeNotFound,
91    
92    #[error("Access token not found or expired")]
93    OAuth2AccessTokenNotFound,
94    
95    #[error("Refresh token not found or expired")]
96    OAuth2RefreshTokenNotFound,
97    
98    #[error("Invalid refresh token data")]
99    OAuth2InvalidRefreshToken,
100    
101    #[error("Invalid scope data")]
102    OAuth2InvalidScope,
103    
104    // ============ System Errors | 系统错误 ============
105    #[error("Storage error: {0}")]
106    StorageError(String),
107    
108    #[error("Configuration error: {0}")]
109    ConfigError(String),
110    
111    #[error("Serialization error: {0}")]
112    SerializationError(#[from] serde_json::Error),
113    
114    #[error("Internal error: {0}")]
115    InternalError(String),
116}