You've already forked authentication-service
mirror of
https://github.com/matrix-org/matrix-authentication-service.git
synced 2025-11-20 12:02:22 +03:00
WIP: repository pattern for upstream oauth2 links
This commit is contained in:
@@ -25,8 +25,9 @@ use mas_oidc_client::requests::{
|
||||
authorization_code::AuthorizationValidationData, jose::JwtVerificationData,
|
||||
};
|
||||
use mas_router::{Route, UrlBuilder};
|
||||
use mas_storage::upstream_oauth2::{
|
||||
add_link, complete_session, lookup_link_by_subject, lookup_session,
|
||||
use mas_storage::{
|
||||
upstream_oauth2::{complete_session, lookup_session},
|
||||
Repository, UpstreamOAuthLinkRepository,
|
||||
};
|
||||
use oauth2_types::errors::ClientErrorCode;
|
||||
use serde::Deserialize;
|
||||
@@ -231,12 +232,17 @@ pub(crate) async fn get(
|
||||
let subject = mas_jose::claims::SUB.extract_required(&mut id_token)?;
|
||||
|
||||
// Look for an existing link
|
||||
let maybe_link = lookup_link_by_subject(&mut txn, &provider, &subject).await?;
|
||||
let maybe_link = txn
|
||||
.upstream_oauth_link()
|
||||
.find_by_subject(&provider, &subject)
|
||||
.await?;
|
||||
|
||||
let link = if let Some(link) = maybe_link {
|
||||
link
|
||||
} else {
|
||||
add_link(&mut txn, &mut rng, &clock, &provider, subject).await?
|
||||
txn.upstream_oauth_link()
|
||||
.add(&mut rng, &clock, &provider, subject)
|
||||
.await?
|
||||
};
|
||||
|
||||
let session = complete_session(&mut txn, &clock, session, &link, response.id_token).await?;
|
||||
|
||||
@@ -25,10 +25,9 @@ use mas_axum_utils::{
|
||||
};
|
||||
use mas_keystore::Encrypter;
|
||||
use mas_storage::{
|
||||
upstream_oauth2::{
|
||||
associate_link_to_user, consume_session, lookup_link, lookup_session_on_link,
|
||||
},
|
||||
upstream_oauth2::{consume_session, lookup_session_on_link},
|
||||
user::{add_user, authenticate_session_with_upstream, lookup_user, start_session},
|
||||
Repository, UpstreamOAuthLinkRepository,
|
||||
};
|
||||
use mas_templates::{
|
||||
EmptyContext, TemplateContext, Templates, UpstreamExistingLinkContext, UpstreamRegister,
|
||||
@@ -104,7 +103,9 @@ pub(crate) async fn get(
|
||||
.lookup_link(link_id)
|
||||
.map_err(|_| RouteError::MissingCookie)?;
|
||||
|
||||
let link = lookup_link(&mut txn, link_id)
|
||||
let link = txn
|
||||
.upstream_oauth_link()
|
||||
.lookup(link_id)
|
||||
.await?
|
||||
.ok_or(RouteError::LinkNotFound)?;
|
||||
|
||||
@@ -205,7 +206,9 @@ pub(crate) async fn post(
|
||||
post_auth_action: post_auth_action.cloned(),
|
||||
};
|
||||
|
||||
let link = lookup_link(&mut txn, link_id)
|
||||
let link = txn
|
||||
.upstream_oauth_link()
|
||||
.lookup(link_id)
|
||||
.await?
|
||||
.ok_or(RouteError::LinkNotFound)?;
|
||||
|
||||
@@ -224,7 +227,10 @@ pub(crate) async fn post(
|
||||
|
||||
let mut session = match (maybe_user_session, link.user_id, form) {
|
||||
(Some(session), None, FormData::Link) => {
|
||||
associate_link_to_user(&mut txn, &link, &session.user).await?;
|
||||
txn.upstream_oauth_link()
|
||||
.associate_to_user(&link, &session.user)
|
||||
.await?;
|
||||
|
||||
session
|
||||
}
|
||||
|
||||
@@ -235,7 +241,9 @@ pub(crate) async fn post(
|
||||
|
||||
(None, None, FormData::Register { username }) => {
|
||||
let user = add_user(&mut txn, &mut rng, &clock, &username).await?;
|
||||
associate_link_to_user(&mut txn, &link, &user).await?;
|
||||
txn.upstream_oauth_link()
|
||||
.associate_to_user(&link, &user)
|
||||
.await?;
|
||||
|
||||
start_session(&mut txn, &mut rng, &clock, user).await?
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user