summaryrefslogtreecommitdiff
path: root/src/services/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/services/mod.rs')
-rw-r--r--src/services/mod.rs49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/services/mod.rs b/src/services/mod.rs
new file mode 100644
index 0000000..26d74e3
--- /dev/null
+++ b/src/services/mod.rs
@@ -0,0 +1,49 @@
+use anyhow::Result;
+use std::collections::HashMap;
+
+/// Service trait for client authentication
+pub trait ClientAuthenticator: Send + Sync {
+ fn authenticate(
+ &self,
+ params: &HashMap<String, String>,
+ auth_header: Option<&str>,
+ ) -> Result<(String, String), String>; // Returns (client_id, client_secret)
+}
+
+/// Service trait for rate limiting
+pub trait RateLimiter: Send + Sync {
+ fn check_rate_limit(&self, identifier: &str, endpoint: &str) -> Result<()>;
+}
+
+/// Service trait for audit logging
+pub trait AuditLogger: Send + Sync {
+ fn log_event(
+ &self,
+ event_type: &str,
+ client_id: Option<&str>,
+ user_id: Option<&str>,
+ ip_address: Option<&str>,
+ success: bool,
+ details: Option<&str>,
+ ) -> Result<()>;
+}
+
+/// Service trait for token generation
+pub trait TokenGenerator: Send + Sync {
+ fn generate_access_token(
+ &self,
+ user_id: &str,
+ client_id: &str,
+ scope: &Option<String>,
+ token_id: &str,
+ ) -> Result<String, String>;
+
+ fn generate_refresh_token(
+ &self,
+ client_id: &str,
+ user_id: &str,
+ scope: &Option<String>,
+ ) -> Result<String, String>;
+}
+
+pub mod implementations;