use crate::oauth::GithubProfileProvider;
use crate::oauth::{
builder::OAuthClientBuilder, error::OAuthClientBuildError, store::InflightOAuthRequestStore,
GithubSubjectProvider, OAuthClient,
};
pub struct GithubOAuthClientBuilder {
inner: OAuthClientBuilder,
}
impl GithubOAuthClientBuilder {
pub fn new() -> Self {
let inner = OAuthClientBuilder::new()
.with_auth_url("https://github.com/login/oauth/authorize".into())
.with_token_url("https://github.com/login/oauth/access_token".into())
.with_subject_provider(Box::new(GithubSubjectProvider))
.with_profile_provider(Box::new(GithubProfileProvider));
Self { inner }
}
pub fn with_client_id(self, client_id: String) -> Self {
Self {
inner: self.inner.with_client_id(client_id),
}
}
pub fn with_client_secret(self, client_secret: String) -> Self {
Self {
inner: self.inner.with_client_secret(client_secret),
}
}
pub fn with_redirect_url(self, redirect_url: String) -> Self {
Self {
inner: self.inner.with_redirect_url(redirect_url),
}
}
pub fn with_inflight_request_store(
self,
inflight_request_store: Box<dyn InflightOAuthRequestStore>,
) -> Self {
Self {
inner: self
.inner
.with_inflight_request_store(inflight_request_store),
}
}
pub fn build(self) -> Result<OAuthClient, OAuthClientBuildError> {
self.inner.build()
}
}
impl Default for GithubOAuthClientBuilder {
fn default() -> Self {
Self::new()
}
}