1#![deny(missing_docs)]
2use async_trait::async_trait;
9use neuron_auth::{AuthError, AuthProvider, AuthRequest, AuthToken};
10
11pub struct OidcAuthProvider {
13 _issuer_url: String,
14}
15
16impl OidcAuthProvider {
17 pub fn new(issuer_url: impl Into<String>) -> Self {
19 Self {
20 _issuer_url: issuer_url.into(),
21 }
22 }
23}
24
25#[async_trait]
26impl AuthProvider for OidcAuthProvider {
27 async fn provide(&self, _request: &AuthRequest) -> Result<AuthToken, AuthError> {
28 Err(AuthError::BackendError("OidcAuthProvider is a stub".into()))
29 }
30}
31
32#[cfg(test)]
33mod tests {
34 use super::*;
35 use std::sync::Arc;
36
37 fn _assert_send_sync<T: Send + Sync>() {}
38
39 #[test]
40 fn object_safety() {
41 _assert_send_sync::<Box<dyn AuthProvider>>();
42 _assert_send_sync::<Arc<dyn AuthProvider>>();
43 let _: Arc<dyn AuthProvider> =
44 Arc::new(OidcAuthProvider::new("https://issuer.example.com"));
45 }
46
47 #[tokio::test]
48 async fn returns_stub_error() {
49 let provider = OidcAuthProvider::new("https://issuer.example.com");
50 let err = provider.provide(&AuthRequest::new()).await.unwrap_err();
51 assert!(matches!(err, AuthError::BackendError(_)));
52 assert!(err.to_string().contains("stub"));
53 }
54}