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
storage: Load with less joins
This is done to simplify some queries, to avoid loading more data than necessary, and in preparation of a proper cache layer
This commit is contained in:
@@ -12,9 +12,12 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
use async_graphql::{Description, Object, ID};
|
||||
use anyhow::Context as _;
|
||||
use async_graphql::{Context, Description, Object, ID};
|
||||
use chrono::{DateTime, Utc};
|
||||
use mas_data_model::CompatSsoLoginState;
|
||||
use mas_storage::{user::UserRepository, Repository};
|
||||
use sqlx::PgPool;
|
||||
use url::Url;
|
||||
|
||||
use super::{NodeType, User};
|
||||
@@ -32,8 +35,14 @@ impl CompatSession {
|
||||
}
|
||||
|
||||
/// The user authorized for this session.
|
||||
async fn user(&self) -> User {
|
||||
User(self.0.user.clone())
|
||||
async fn user(&self, ctx: &Context<'_>) -> Result<User, async_graphql::Error> {
|
||||
let mut conn = ctx.data::<PgPool>()?.acquire().await?;
|
||||
let user = conn
|
||||
.user()
|
||||
.lookup(self.0.user_id)
|
||||
.await?
|
||||
.context("Could not load user")?;
|
||||
Ok(User(user))
|
||||
}
|
||||
|
||||
/// The Matrix Device ID of this session.
|
||||
|
||||
@@ -14,7 +14,9 @@
|
||||
|
||||
use anyhow::Context as _;
|
||||
use async_graphql::{Context, Description, Object, ID};
|
||||
use mas_storage::{oauth2::client::OAuth2ClientRepository, Repository};
|
||||
use mas_storage::{
|
||||
oauth2::client::OAuth2ClientRepository, user::BrowserSessionRepository, Repository,
|
||||
};
|
||||
use oauth2_types::scope::Scope;
|
||||
use sqlx::PgPool;
|
||||
use ulid::Ulid;
|
||||
@@ -35,8 +37,15 @@ impl OAuth2Session {
|
||||
}
|
||||
|
||||
/// OAuth 2.0 client used by this session.
|
||||
pub async fn client(&self) -> OAuth2Client {
|
||||
OAuth2Client(self.0.client.clone())
|
||||
pub async fn client(&self, ctx: &Context<'_>) -> Result<OAuth2Client, async_graphql::Error> {
|
||||
let mut conn = ctx.data::<PgPool>()?.acquire().await?;
|
||||
let client = conn
|
||||
.oauth2_client()
|
||||
.lookup(self.0.client_id)
|
||||
.await?
|
||||
.context("Could not load client")?;
|
||||
|
||||
Ok(OAuth2Client(client))
|
||||
}
|
||||
|
||||
/// Scope granted for this session.
|
||||
@@ -45,13 +54,30 @@ impl OAuth2Session {
|
||||
}
|
||||
|
||||
/// The browser session which started this OAuth 2.0 session.
|
||||
pub async fn browser_session(&self) -> BrowserSession {
|
||||
BrowserSession(self.0.browser_session.clone())
|
||||
pub async fn browser_session(
|
||||
&self,
|
||||
ctx: &Context<'_>,
|
||||
) -> Result<BrowserSession, async_graphql::Error> {
|
||||
let mut conn = ctx.data::<PgPool>()?.acquire().await?;
|
||||
let browser_session = conn
|
||||
.browser_session()
|
||||
.lookup(self.0.user_session_id)
|
||||
.await?
|
||||
.context("Could not load browser session")?;
|
||||
|
||||
Ok(BrowserSession(browser_session))
|
||||
}
|
||||
|
||||
/// User authorized for this session.
|
||||
pub async fn user(&self) -> User {
|
||||
User(self.0.browser_session.user.clone())
|
||||
pub async fn user(&self, ctx: &Context<'_>) -> Result<User, async_graphql::Error> {
|
||||
let mut conn = ctx.data::<PgPool>()?.acquire().await?;
|
||||
let browser_session = conn
|
||||
.browser_session()
|
||||
.lookup(self.0.user_session_id)
|
||||
.await?
|
||||
.context("Could not load browser session")?;
|
||||
|
||||
Ok(User(browser_session.user))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user