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
Fully sync the devices with the homeserver
This commit is contained in:
@@ -20,7 +20,7 @@ use mas_axum_utils::sentry::SentryEventID;
|
||||
use mas_data_model::TokenType;
|
||||
use mas_storage::{
|
||||
compat::{CompatAccessTokenRepository, CompatSessionRepository},
|
||||
job::{DeleteDeviceJob, JobRepositoryExt},
|
||||
job::{JobRepositoryExt, SyncDevicesJob},
|
||||
BoxClock, BoxRepository, Clock, RepositoryAccess,
|
||||
};
|
||||
use thiserror::Error;
|
||||
@@ -111,9 +111,8 @@ pub(crate) async fn post(
|
||||
// XXX: this is probably not the right error
|
||||
.ok_or(RouteError::InvalidAuthorization)?;
|
||||
|
||||
repo.job()
|
||||
.schedule_job(DeleteDeviceJob::new(&user, &session.device))
|
||||
.await?;
|
||||
// Schedule a job to sync the devices of the user with the homeserver
|
||||
repo.job().schedule_job(SyncDevicesJob::new(&user)).await?;
|
||||
|
||||
repo.compat_session().finish(&clock, session).await?;
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ use anyhow::Context as _;
|
||||
use async_graphql::{Context, Enum, InputObject, Object, ID};
|
||||
use mas_storage::{
|
||||
compat::CompatSessionRepository,
|
||||
job::{DeleteDeviceJob, JobRepositoryExt},
|
||||
job::{JobRepositoryExt, SyncDevicesJob},
|
||||
RepositoryAccess,
|
||||
};
|
||||
|
||||
@@ -101,10 +101,8 @@ impl CompatSessionMutations {
|
||||
.await?
|
||||
.context("Could not load user")?;
|
||||
|
||||
// Schedule a job to delete the device.
|
||||
repo.job()
|
||||
.schedule_job(DeleteDeviceJob::new(&user, &session.device))
|
||||
.await?;
|
||||
// Schedule a job to sync the devices of the user with the homeserver
|
||||
repo.job().schedule_job(SyncDevicesJob::new(&user)).await?;
|
||||
|
||||
let session = repo.compat_session().finish(&clock, session).await?;
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ use async_graphql::{Context, Description, Enum, InputObject, Object, ID};
|
||||
use chrono::Duration;
|
||||
use mas_data_model::{Device, TokenType};
|
||||
use mas_storage::{
|
||||
job::{DeleteDeviceJob, JobRepositoryExt, ProvisionDeviceJob},
|
||||
job::{JobRepositoryExt, ProvisionDeviceJob, SyncDevicesJob},
|
||||
oauth2::{
|
||||
OAuth2AccessTokenRepository, OAuth2ClientRepository, OAuth2RefreshTokenRepository,
|
||||
OAuth2SessionRepository,
|
||||
@@ -236,20 +236,8 @@ impl OAuth2SessionMutations {
|
||||
.await?
|
||||
.context("Could not load user")?;
|
||||
|
||||
// Scan the scopes of the session to find if there is any device that should be
|
||||
// deleted from the Matrix server.
|
||||
// TODO: this should be moved in a higher level "end oauth session" method.
|
||||
// XXX: this might not be the right semantic, but it's the best we
|
||||
// can do for now, since we're not explicitly storing devices for OAuth2
|
||||
// sessions.
|
||||
for scope in &*session.scope {
|
||||
if let Some(device) = Device::from_scope_token(scope) {
|
||||
// Schedule a job to delete the device.
|
||||
repo.job()
|
||||
.schedule_job(DeleteDeviceJob::new(&user, &device))
|
||||
.await?;
|
||||
}
|
||||
}
|
||||
// Schedule a job to sync the devices of the user with the homeserver
|
||||
repo.job().schedule_job(SyncDevicesJob::new(&user)).await?;
|
||||
}
|
||||
|
||||
let session = repo.oauth2_session().finish(&clock, session).await?;
|
||||
|
||||
@@ -19,11 +19,11 @@ use mas_axum_utils::{
|
||||
http_client_factory::HttpClientFactory,
|
||||
sentry::SentryEventID,
|
||||
};
|
||||
use mas_data_model::{Device, TokenType};
|
||||
use mas_data_model::TokenType;
|
||||
use mas_iana::oauth::OAuthTokenTypeHint;
|
||||
use mas_keystore::Encrypter;
|
||||
use mas_storage::{
|
||||
job::{DeleteDeviceJob, JobRepositoryExt},
|
||||
job::{JobRepositoryExt, SyncDevicesJob},
|
||||
BoxClock, BoxRepository, RepositoryAccess,
|
||||
};
|
||||
use oauth2_types::{
|
||||
@@ -217,20 +217,8 @@ pub(crate) async fn post(
|
||||
.await?
|
||||
.ok_or(RouteError::UnknownToken)?;
|
||||
|
||||
// Scan the scopes of the session to find if there is any device that should be
|
||||
// deleted from the Matrix server.
|
||||
// TODO: this should be moved in a higher level "end oauth session" method.
|
||||
// XXX: this might not be the right semantic, but it's the best we
|
||||
// can do for now, since we're not explicitly storing devices for OAuth2
|
||||
// sessions.
|
||||
for scope in &*session.scope {
|
||||
if let Some(device) = Device::from_scope_token(scope) {
|
||||
// Schedule a job to delete the device.
|
||||
repo.job()
|
||||
.schedule_job(DeleteDeviceJob::new(&user, &device))
|
||||
.await?;
|
||||
}
|
||||
}
|
||||
// Schedule a job to sync the devices of the user with the homeserver
|
||||
repo.job().schedule_job(SyncDevicesJob::new(&user)).await?;
|
||||
}
|
||||
|
||||
// Now that we checked everything, we can end the session.
|
||||
|
||||
Reference in New Issue
Block a user