1
0
mirror of https://github.com/matrix-org/matrix-authentication-service.git synced 2025-08-09 04:22:45 +03:00

storage: impl Repository for Box<impl Repository + ?Sized>

This commit is contained in:
Quentin Gliech
2023-01-23 18:12:50 +01:00
parent a9facab131
commit 6a8c79c497
20 changed files with 152 additions and 40 deletions

View File

@@ -63,7 +63,7 @@ pub async fn get(
let (session_info, cookie_jar) = cookie_jar.session_info();
let (csrf_token, cookie_jar) = cookie_jar.csrf_token(&clock, &mut rng);
let maybe_session = session_info.load_session(&mut *repo).await?;
let maybe_session = session_info.load_session(&mut repo).await?;
let session = if let Some(session) = maybe_session {
session
@@ -126,7 +126,7 @@ pub async fn post(
let (session_info, cookie_jar) = cookie_jar.session_info();
cookie_jar.verify_form(&clock, form)?;
let maybe_session = session_info.load_session(&mut *repo).await?;
let maybe_session = session_info.load_session(&mut repo).await?;
let session = if let Some(session) = maybe_session {
session

View File

@@ -67,7 +67,7 @@ pub async fn post(
let content_type = content_type.map(|TypedHeader(h)| h.to_string());
let (session_info, _cookie_jar) = cookie_jar.session_info();
let maybe_session = session_info.load_session(&mut *repo).await?;
let maybe_session = session_info.load_session(&mut repo).await?;
let mut request = async_graphql::http::receive_body(
content_type,
@@ -103,7 +103,7 @@ pub async fn get(
RawQuery(query): RawQuery,
) -> Result<impl IntoResponse, FancyError> {
let (session_info, _cookie_jar) = cookie_jar.session_info();
let maybe_session = session_info.load_session(&mut *repo).await?;
let maybe_session = session_info.load_session(&mut repo).await?;
let mut request =
async_graphql::http::parse_query_string(&query.unwrap_or_default())?.data(Mutex::new(repo));

View File

@@ -86,7 +86,7 @@ pub(crate) async fn get(
) -> Result<Response, RouteError> {
let (session_info, cookie_jar) = cookie_jar.session_info();
let maybe_session = session_info.load_session(&mut *repo).await?;
let maybe_session = session_info.load_session(&mut repo).await?;
let grant = repo
.oauth2_authorization_grant()

View File

@@ -167,7 +167,7 @@ pub(crate) async fn get(
let templates = templates.clone();
let callback_destination = callback_destination.clone();
async move {
let maybe_session = session_info.load_session(&mut *repo).await?;
let maybe_session = session_info.load_session(&mut repo).await?;
let prompt = params.auth.prompt.as_deref().unwrap_or_default();
// Check if the request/request_uri/registration params are used. If so, reply

View File

@@ -82,7 +82,7 @@ pub(crate) async fn get(
) -> Result<Response, RouteError> {
let (session_info, cookie_jar) = cookie_jar.session_info();
let maybe_session = session_info.load_session(&mut *repo).await?;
let maybe_session = session_info.load_session(&mut repo).await?;
let grant = repo
.oauth2_authorization_grant()
@@ -138,7 +138,7 @@ pub(crate) async fn post(
let (session_info, cookie_jar) = cookie_jar.session_info();
let maybe_session = session_info.load_session(&mut *repo).await?;
let maybe_session = session_info.load_session(&mut repo).await?;
let grant = repo
.oauth2_authorization_grant()

View File

@@ -130,7 +130,7 @@ pub(crate) async fn post(
) -> Result<impl IntoResponse, RouteError> {
let client = client_authorization
.credentials
.fetch(&mut *repo)
.fetch(&mut repo)
.await
.unwrap()
.ok_or(RouteError::ClientNotFound)?;

View File

@@ -168,7 +168,7 @@ pub(crate) async fn post(
) -> Result<impl IntoResponse, RouteError> {
let client = client_authorization
.credentials
.fetch(&mut *repo)
.fetch(&mut repo)
.await?
.ok_or(RouteError::ClientNotFound)?;

View File

@@ -103,7 +103,7 @@ pub async fn get(
State(key_store): State<Keystore>,
user_authorization: UserAuthorization,
) -> Result<Response, RouteError> {
let session = user_authorization.protected(&mut *repo, &clock).await?;
let session = user_authorization.protected(&mut repo, &clock).await?;
let browser_session = repo
.browser_session()

View File

@@ -128,7 +128,7 @@ pub(crate) async fn get(
let (user_session_info, cookie_jar) = cookie_jar.session_info();
let (csrf_token, mut cookie_jar) = cookie_jar.csrf_token(&clock, &mut rng);
let maybe_user_session = user_session_info.load_session(&mut *repo).await?;
let maybe_user_session = user_session_info.load_session(&mut repo).await?;
let render = match (maybe_user_session, link.user_id) {
(Some(session), Some(user_id)) if session.user.id == user_id => {
@@ -249,7 +249,7 @@ pub(crate) async fn post(
}
let (user_session_info, cookie_jar) = cookie_jar.session_info();
let maybe_user_session = user_session_info.load_session(&mut *repo).await?;
let maybe_user_session = user_session_info.load_session(&mut repo).await?;
let session = match (maybe_user_session, link.user_id, form) {
(Some(session), None, FormData::Link) => {

View File

@@ -46,7 +46,7 @@ pub(crate) async fn get(
let (csrf_token, cookie_jar) = cookie_jar.csrf_token(&clock, &mut rng);
let (session_info, cookie_jar) = cookie_jar.session_info();
let maybe_session = session_info.load_session(&mut *repo).await?;
let maybe_session = session_info.load_session(&mut repo).await?;
let session = if let Some(session) = maybe_session {
session
@@ -76,7 +76,7 @@ pub(crate) async fn post(
let form = cookie_jar.verify_form(&clock, form)?;
let (session_info, cookie_jar) = cookie_jar.session_info();
let maybe_session = session_info.load_session(&mut *repo).await?;
let maybe_session = session_info.load_session(&mut repo).await?;
let session = if let Some(session) = maybe_session {
session
@@ -98,7 +98,7 @@ pub(crate) async fn post(
};
start_email_verification(
&mailer,
&mut *repo,
&mut repo,
&mut rng,
&clock,
&session.user,

View File

@@ -55,10 +55,10 @@ pub(crate) async fn get(
) -> Result<Response, FancyError> {
let (session_info, cookie_jar) = cookie_jar.session_info();
let maybe_session = session_info.load_session(&mut *repo).await?;
let maybe_session = session_info.load_session(&mut repo).await?;
if let Some(session) = maybe_session {
render(&mut rng, &clock, templates, session, cookie_jar, &mut *repo).await
render(&mut rng, &clock, templates, session, cookie_jar, &mut repo).await
} else {
let login = mas_router::Login::default();
Ok((cookie_jar, login.go()).into_response())
@@ -130,7 +130,7 @@ pub(crate) async fn post(
) -> Result<Response, FancyError> {
let (session_info, cookie_jar) = cookie_jar.session_info();
let maybe_session = session_info.load_session(&mut *repo).await?;
let maybe_session = session_info.load_session(&mut repo).await?;
let mut session = if let Some(session) = maybe_session {
session
@@ -149,7 +149,7 @@ pub(crate) async fn post(
.await?;
let next = mas_router::AccountVerifyEmail::new(email.id);
start_email_verification(&mailer, &mut *repo, &mut rng, &clock, &session.user, email)
start_email_verification(&mailer, &mut repo, &mut rng, &clock, &session.user, email)
.await?;
repo.save().await?;
return Ok((cookie_jar, next.go()).into_response());
@@ -168,7 +168,7 @@ pub(crate) async fn post(
}
let next = mas_router::AccountVerifyEmail::new(email.id);
start_email_verification(&mailer, &mut *repo, &mut rng, &clock, &session.user, email)
start_email_verification(&mailer, &mut repo, &mut rng, &clock, &session.user, email)
.await?;
repo.save().await?;
return Ok((cookie_jar, next.go()).into_response());
@@ -211,7 +211,7 @@ pub(crate) async fn post(
templates.clone(),
session,
cookie_jar,
&mut *repo,
&mut repo,
)
.await?;

View File

@@ -48,7 +48,7 @@ pub(crate) async fn get(
let (csrf_token, cookie_jar) = cookie_jar.csrf_token(&clock, &mut rng);
let (session_info, cookie_jar) = cookie_jar.session_info();
let maybe_session = session_info.load_session(&mut *repo).await?;
let maybe_session = session_info.load_session(&mut repo).await?;
let session = if let Some(session) = maybe_session {
session
@@ -90,7 +90,7 @@ pub(crate) async fn post(
let form = cookie_jar.verify_form(&clock, form)?;
let (session_info, cookie_jar) = cookie_jar.session_info();
let maybe_session = session_info.load_session(&mut *repo).await?;
let maybe_session = session_info.load_session(&mut repo).await?;
let session = if let Some(session) = maybe_session {
session

View File

@@ -39,7 +39,7 @@ pub(crate) async fn get(
let (csrf_token, cookie_jar) = cookie_jar.csrf_token(&clock, &mut rng);
let (session_info, cookie_jar) = cookie_jar.session_info();
let maybe_session = session_info.load_session(&mut *repo).await?;
let maybe_session = session_info.load_session(&mut repo).await?;
let session = if let Some(session) = maybe_session {
session

View File

@@ -52,7 +52,7 @@ pub(crate) async fn get(
) -> Result<Response, FancyError> {
let (session_info, cookie_jar) = cookie_jar.session_info();
let maybe_session = session_info.load_session(&mut *repo).await?;
let maybe_session = session_info.load_session(&mut repo).await?;
if let Some(session) = maybe_session {
render(&mut rng, &clock, templates, session, cookie_jar).await
@@ -93,7 +93,7 @@ pub(crate) async fn post(
let (session_info, cookie_jar) = cookie_jar.session_info();
let maybe_session = session_info.load_session(&mut *repo).await?;
let maybe_session = session_info.load_session(&mut repo).await?;
let session = if let Some(session) = maybe_session {
session

View File

@@ -33,7 +33,7 @@ pub async fn get(
) -> Result<impl IntoResponse, FancyError> {
let (csrf_token, cookie_jar) = cookie_jar.csrf_token(&clock, &mut rng);
let (session_info, cookie_jar) = cookie_jar.session_info();
let session = session_info.load_session(&mut *repo).await?;
let session = session_info.load_session(&mut repo).await?;
let ctx = IndexContext::new(url_builder.oidc_discovery())
.maybe_with_session(session)

View File

@@ -59,7 +59,7 @@ pub(crate) async fn get(
let (csrf_token, cookie_jar) = cookie_jar.csrf_token(&clock, &mut rng);
let (session_info, cookie_jar) = cookie_jar.session_info();
let maybe_session = session_info.load_session(&mut *repo).await?;
let maybe_session = session_info.load_session(&mut repo).await?;
if maybe_session.is_some() {
let reply = query.go_next();
@@ -70,7 +70,7 @@ pub(crate) async fn get(
LoginContext::default().with_upstrem_providers(providers),
query,
csrf_token,
&mut *repo,
&mut repo,
&templates,
)
.await?;
@@ -116,7 +116,7 @@ pub(crate) async fn post(
.with_upstrem_providers(providers),
query,
csrf_token,
&mut *repo,
&mut repo,
&templates,
)
.await?;
@@ -126,7 +126,7 @@ pub(crate) async fn post(
match login(
password_manager,
&mut *repo,
&mut repo,
rng,
&clock,
&form.username,
@@ -148,7 +148,7 @@ pub(crate) async fn post(
LoginContext::default().with_form_state(state),
query,
csrf_token,
&mut *repo,
&mut repo,
&templates,
)
.await?;

View File

@@ -32,7 +32,7 @@ pub(crate) async fn post(
let (session_info, mut cookie_jar) = cookie_jar.session_info();
let maybe_session = session_info.load_session(&mut *repo).await?;
let maybe_session = session_info.load_session(&mut repo).await?;
if let Some(session) = maybe_session {
repo.browser_session().finish(&clock, session).await?;

View File

@@ -51,7 +51,7 @@ pub(crate) async fn get(
let (csrf_token, cookie_jar) = cookie_jar.csrf_token(&clock, &mut rng);
let (session_info, cookie_jar) = cookie_jar.session_info();
let maybe_session = session_info.load_session(&mut *repo).await?;
let maybe_session = session_info.load_session(&mut repo).await?;
let session = if let Some(session) = maybe_session {
session
@@ -63,7 +63,7 @@ pub(crate) async fn get(
};
let ctx = ReauthContext::default();
let next = query.load_context(&mut *repo).await?;
let next = query.load_context(&mut repo).await?;
let ctx = if let Some(next) = next {
ctx.with_post_action(next)
} else {
@@ -89,7 +89,7 @@ pub(crate) async fn post(
let (session_info, cookie_jar) = cookie_jar.session_info();
let maybe_session = session_info.load_session(&mut *repo).await?;
let maybe_session = session_info.load_session(&mut repo).await?;
let session = if let Some(session) = maybe_session {
session

View File

@@ -69,7 +69,7 @@ pub(crate) async fn get(
let (csrf_token, cookie_jar) = cookie_jar.csrf_token(&clock, &mut rng);
let (session_info, cookie_jar) = cookie_jar.session_info();
let maybe_session = session_info.load_session(&mut *repo).await?;
let maybe_session = session_info.load_session(&mut repo).await?;
if maybe_session.is_some() {
let reply = query.go_next();
@@ -79,7 +79,7 @@ pub(crate) async fn get(
RegisterContext::default(),
query,
csrf_token,
&mut *repo,
&mut repo,
&templates,
)
.await?;
@@ -174,7 +174,7 @@ pub(crate) async fn post(
RegisterContext::default().with_form_state(state),
query,
csrf_token,
&mut *repo,
&mut repo,
&templates,
)
.await?;

View File

@@ -265,3 +265,115 @@ where
))
}
}
impl<R: Repository + ?Sized> Repository for Box<R> {
type Error = R::Error;
fn save(self: Box<Self>) -> BoxFuture<'static, Result<(), Self::Error>>
where
Self: Sized,
{
// This shouldn't be callable?
unimplemented!()
}
fn cancel(self: Box<Self>) -> BoxFuture<'static, Result<(), Self::Error>>
where
Self: Sized,
{
// This shouldn't be callable?
unimplemented!()
}
fn upstream_oauth_link<'c>(
&'c mut self,
) -> Box<dyn UpstreamOAuthLinkRepository<Error = Self::Error> + 'c> {
(**self).upstream_oauth_link()
}
fn upstream_oauth_provider<'c>(
&'c mut self,
) -> Box<dyn UpstreamOAuthProviderRepository<Error = Self::Error> + 'c> {
(**self).upstream_oauth_provider()
}
fn upstream_oauth_session<'c>(
&'c mut self,
) -> Box<dyn UpstreamOAuthSessionRepository<Error = Self::Error> + 'c> {
(**self).upstream_oauth_session()
}
fn user<'c>(&'c mut self) -> Box<dyn UserRepository<Error = Self::Error> + 'c> {
(**self).user()
}
fn user_email<'c>(&'c mut self) -> Box<dyn UserEmailRepository<Error = Self::Error> + 'c> {
(**self).user_email()
}
fn user_password<'c>(
&'c mut self,
) -> Box<dyn UserPasswordRepository<Error = Self::Error> + 'c> {
(**self).user_password()
}
fn browser_session<'c>(
&'c mut self,
) -> Box<dyn BrowserSessionRepository<Error = Self::Error> + 'c> {
(**self).browser_session()
}
fn oauth2_client<'c>(
&'c mut self,
) -> Box<dyn OAuth2ClientRepository<Error = Self::Error> + 'c> {
(**self).oauth2_client()
}
fn oauth2_authorization_grant<'c>(
&'c mut self,
) -> Box<dyn OAuth2AuthorizationGrantRepository<Error = Self::Error> + 'c> {
(**self).oauth2_authorization_grant()
}
fn oauth2_session<'c>(
&'c mut self,
) -> Box<dyn OAuth2SessionRepository<Error = Self::Error> + 'c> {
(**self).oauth2_session()
}
fn oauth2_access_token<'c>(
&'c mut self,
) -> Box<dyn OAuth2AccessTokenRepository<Error = Self::Error> + 'c> {
(**self).oauth2_access_token()
}
fn oauth2_refresh_token<'c>(
&'c mut self,
) -> Box<dyn OAuth2RefreshTokenRepository<Error = Self::Error> + 'c> {
(**self).oauth2_refresh_token()
}
fn compat_session<'c>(
&'c mut self,
) -> Box<dyn CompatSessionRepository<Error = Self::Error> + 'c> {
(**self).compat_session()
}
fn compat_sso_login<'c>(
&'c mut self,
) -> Box<dyn CompatSsoLoginRepository<Error = Self::Error> + 'c> {
(**self).compat_sso_login()
}
fn compat_access_token<'c>(
&'c mut self,
) -> Box<dyn CompatAccessTokenRepository<Error = Self::Error> + 'c> {
(**self).compat_access_token()
}
fn compat_refresh_token<'c>(
&'c mut self,
) -> Box<dyn CompatRefreshTokenRepository<Error = Self::Error> + 'c> {
(**self).compat_refresh_token()
}
}