aboutsummaryrefslogtreecommitdiffstats
path: root/lib/auth-service/src/client/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'lib/auth-service/src/client/mod.rs')
-rw-r--r--lib/auth-service/src/client/mod.rs49
1 files changed, 49 insertions, 0 deletions
diff --git a/lib/auth-service/src/client/mod.rs b/lib/auth-service/src/client/mod.rs
new file mode 100644
index 0000000..25cf16c
--- /dev/null
+++ b/lib/auth-service/src/client/mod.rs
@@ -0,0 +1,49 @@
+use oauth2::{AuthUrl, ClientId, ClientSecret, EndpointNotSet, EndpointSet, RedirectUrl, TokenUrl};
+use secrecy::{ExposeSecret, SecretString};
+use tracing::debug;
+use url::Url;
+
+use crate::AuthServiceError;
+
+pub struct OauthClient(
+ oauth2::basic::BasicClient<
+ EndpointSet,
+ EndpointNotSet,
+ EndpointNotSet,
+ EndpointNotSet,
+ EndpointSet,
+ >,
+);
+
+pub struct ClientConfig {
+ client_id: String,
+ client_secret: SecretString,
+ token_url: Url,
+ auth_url: Url,
+}
+
+impl TryFrom<ClientConfig> for OauthClient {
+ type Error = AuthServiceError;
+
+ fn try_from(value: ClientConfig) -> Result<Self, Self::Error> {
+ debug!("creating oauth client");
+ Ok(Self(
+ oauth2::basic::BasicClient::new(ClientId::new(value.client_id))
+ .set_client_secret(ClientSecret::new(
+ value.client_secret.expose_secret().to_string(),
+ ))
+ .set_auth_uri(AuthUrl::from_url(value.auth_url))
+ .set_token_uri(TokenUrl::from_url(value.token_url)),
+ ))
+ }
+}
+
+impl OauthClient {
+ #[must_use]
+ pub fn with_redirect_url(self, url: &Url) -> Self {
+ Self(
+ self.0
+ .set_redirect_uri(RedirectUrl::from_url(url.to_owned())),
+ )
+ }
+}