From 3e78e441d4e8209c8f9f076394edf1b29811cd07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Commaille?= Date: Wed, 22 Jan 2025 17:09:02 +0100 Subject: [PATCH] refactor(sdk): Move oidc module to authentication::oidc MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Kévin Commaille --- bindings/matrix-sdk-ffi/src/authentication.rs | 2 +- bindings/matrix-sdk-ffi/src/client.rs | 18 +++++++++--------- bindings/matrix-sdk-ffi/src/error.rs | 4 ++-- crates/matrix-sdk/src/authentication/mod.rs | 5 +++-- .../oidc/auth_code_builder.rs | 0 .../{ => authentication}/oidc/backend/mock.rs | 2 +- .../{ => authentication}/oidc/backend/mod.rs | 0 .../oidc/backend/server.rs | 2 +- .../{ => authentication}/oidc/cross_process.rs | 2 +- .../{ => authentication}/oidc/data_serde.rs | 0 .../oidc/end_session_builder.rs | 0 .../src/{ => authentication}/oidc/mod.rs | 2 +- .../{ => authentication}/oidc/registrations.rs | 0 .../src/{ => authentication}/oidc/tests.rs | 7 ++----- .../src/authentication/qrcode/login.rs | 2 +- .../src/authentication/qrcode/mod.rs | 6 +++--- .../src/authentication/qrcode/oidc_client.rs | 2 +- crates/matrix-sdk/src/client/builder/mod.rs | 4 ++-- crates/matrix-sdk/src/client/futures.rs | 2 +- crates/matrix-sdk/src/client/mod.rs | 2 +- crates/matrix-sdk/src/error.rs | 4 ++-- crates/matrix-sdk/src/lib.rs | 2 -- .../integration/encryption/cross_signing.rs | 2 +- examples/oidc_cli/src/main.rs | 6 +++--- examples/qr-login/src/main.rs | 14 ++++++++------ 25 files changed, 44 insertions(+), 46 deletions(-) rename crates/matrix-sdk/src/{ => authentication}/oidc/auth_code_builder.rs (100%) rename crates/matrix-sdk/src/{ => authentication}/oidc/backend/mock.rs (99%) rename crates/matrix-sdk/src/{ => authentication}/oidc/backend/mod.rs (100%) rename crates/matrix-sdk/src/{ => authentication}/oidc/backend/server.rs (98%) rename crates/matrix-sdk/src/{ => authentication}/oidc/cross_process.rs (99%) rename crates/matrix-sdk/src/{ => authentication}/oidc/data_serde.rs (100%) rename crates/matrix-sdk/src/{ => authentication}/oidc/end_session_builder.rs (100%) rename crates/matrix-sdk/src/{ => authentication}/oidc/mod.rs (99%) rename crates/matrix-sdk/src/{ => authentication}/oidc/registrations.rs (100%) rename crates/matrix-sdk/src/{ => authentication}/oidc/tests.rs (99%) diff --git a/bindings/matrix-sdk-ffi/src/authentication.rs b/bindings/matrix-sdk-ffi/src/authentication.rs index a2e41a5f9..3cbf57654 100644 --- a/bindings/matrix-sdk-ffi/src/authentication.rs +++ b/bindings/matrix-sdk-ffi/src/authentication.rs @@ -5,7 +5,7 @@ use std::{ }; use matrix_sdk::{ - oidc::{ + authentication::oidc::{ registrations::OidcRegistrationsError, types::{ iana::oauth::OAuthClientAuthenticationMethod, diff --git a/bindings/matrix-sdk-ffi/src/client.rs b/bindings/matrix-sdk-ffi/src/client.rs index 66d2f0256..d2431c25e 100644 --- a/bindings/matrix-sdk-ffi/src/client.rs +++ b/bindings/matrix-sdk-ffi/src/client.rs @@ -7,11 +7,7 @@ use std::{ use anyhow::{anyhow, Context as _}; use matrix_sdk::{ - media::{ - MediaFileHandle as SdkMediaFileHandle, MediaFormat, MediaRequestParameters, - MediaThumbnailSettings, - }, - oidc::{ + authentication::oidc::{ registrations::{ClientId, OidcRegistrations}, requests::account_management::AccountManagementActionFull, types::{ @@ -23,6 +19,10 @@ use matrix_sdk::{ }, OidcAuthorizationData, OidcSession, }, + media::{ + MediaFileHandle as SdkMediaFileHandle, MediaFormat, MediaRequestParameters, + MediaThumbnailSettings, + }, reqwest::StatusCode, ruma::{ api::client::{ @@ -1556,10 +1556,10 @@ impl Session { } // Build the session from the OIDC UserSession. AuthApi::Oidc(api) => { - let matrix_sdk::oidc::UserSession { + let matrix_sdk::authentication::oidc::UserSession { meta: matrix_sdk::SessionMeta { user_id, device_id }, tokens: - matrix_sdk::oidc::OidcSessionTokens { + matrix_sdk::authentication::oidc::OidcSessionTokens { access_token, refresh_token, latest_id_token, @@ -1620,12 +1620,12 @@ impl TryFrom for AuthSession { .transpose() .context("OIDC latest_id_token is invalid.")?; - let user_session = matrix_sdk::oidc::UserSession { + let user_session = matrix_sdk::authentication::oidc::UserSession { meta: matrix_sdk::SessionMeta { user_id: user_id.try_into()?, device_id: device_id.into(), }, - tokens: matrix_sdk::oidc::OidcSessionTokens { + tokens: matrix_sdk::authentication::oidc::OidcSessionTokens { access_token, refresh_token, latest_id_token, diff --git a/bindings/matrix-sdk-ffi/src/error.rs b/bindings/matrix-sdk-ffi/src/error.rs index 9f630a767..7e42d246f 100644 --- a/bindings/matrix-sdk-ffi/src/error.rs +++ b/bindings/matrix-sdk-ffi/src/error.rs @@ -1,8 +1,8 @@ use std::{collections::HashMap, fmt, fmt::Display}; use matrix_sdk::{ - encryption::CryptoStoreError, event_cache::EventCacheError, oidc::OidcError, reqwest, - room::edit::EditError, send_queue::RoomSendQueueError, HttpError, IdParseError, + authentication::oidc::OidcError, encryption::CryptoStoreError, event_cache::EventCacheError, + reqwest, room::edit::EditError, send_queue::RoomSendQueueError, HttpError, IdParseError, NotificationSettingsError as SdkNotificationSettingsError, QueueWedgeError as SdkQueueWedgeError, StoreError, }; diff --git a/crates/matrix-sdk/src/authentication/mod.rs b/crates/matrix-sdk/src/authentication/mod.rs index add20b253..eafd9c38a 100644 --- a/crates/matrix-sdk/src/authentication/mod.rs +++ b/crates/matrix-sdk/src/authentication/mod.rs @@ -15,7 +15,6 @@ //! Types and functions related to authentication in Matrix. // TODO:(pixlwave) Move AuthenticationService from the FFI into this module. -// TODO:(poljar) Move the oidc module under this module. use std::sync::Arc; @@ -24,10 +23,12 @@ use matrix_sdk_base::SessionMeta; use tokio::sync::{broadcast, Mutex, OnceCell}; pub mod matrix; +#[cfg(feature = "experimental-oidc")] +pub mod oidc; use self::matrix::{MatrixAuth, MatrixAuthData}; #[cfg(feature = "experimental-oidc")] -use crate::oidc::{self, Oidc, OidcAuthData, OidcCtx}; +use self::oidc::{Oidc, OidcAuthData, OidcCtx}; use crate::{Client, RefreshTokenError, SessionChange}; #[cfg(all(feature = "experimental-oidc", feature = "e2e-encryption", not(target_arch = "wasm32")))] diff --git a/crates/matrix-sdk/src/oidc/auth_code_builder.rs b/crates/matrix-sdk/src/authentication/oidc/auth_code_builder.rs similarity index 100% rename from crates/matrix-sdk/src/oidc/auth_code_builder.rs rename to crates/matrix-sdk/src/authentication/oidc/auth_code_builder.rs diff --git a/crates/matrix-sdk/src/oidc/backend/mock.rs b/crates/matrix-sdk/src/authentication/oidc/backend/mock.rs similarity index 99% rename from crates/matrix-sdk/src/oidc/backend/mock.rs rename to crates/matrix-sdk/src/authentication/oidc/backend/mock.rs index de3573967..e6e67f0ae 100644 --- a/crates/matrix-sdk/src/oidc/backend/mock.rs +++ b/crates/matrix-sdk/src/authentication/oidc/backend/mock.rs @@ -37,7 +37,7 @@ use mas_oidc_client::{ use url::Url; use super::{OidcBackend, OidcError, RefreshedSessionTokens}; -use crate::oidc::{AuthorizationCode, OidcSessionTokens}; +use crate::authentication::oidc::{AuthorizationCode, OidcSessionTokens}; pub(crate) const ISSUER_URL: &str = "https://oidc.example.com/issuer"; pub(crate) const AUTHORIZATION_URL: &str = "https://oidc.example.com/authorization"; diff --git a/crates/matrix-sdk/src/oidc/backend/mod.rs b/crates/matrix-sdk/src/authentication/oidc/backend/mod.rs similarity index 100% rename from crates/matrix-sdk/src/oidc/backend/mod.rs rename to crates/matrix-sdk/src/authentication/oidc/backend/mod.rs diff --git a/crates/matrix-sdk/src/oidc/backend/server.rs b/crates/matrix-sdk/src/authentication/oidc/backend/server.rs similarity index 98% rename from crates/matrix-sdk/src/oidc/backend/server.rs rename to crates/matrix-sdk/src/authentication/oidc/backend/server.rs index b2ea157aa..a97efc20d 100644 --- a/crates/matrix-sdk/src/oidc/backend/server.rs +++ b/crates/matrix-sdk/src/authentication/oidc/backend/server.rs @@ -42,7 +42,7 @@ use url::Url; use super::{OidcBackend, OidcError, RefreshedSessionTokens}; use crate::{ - oidc::{rng, AuthorizationCode, OidcSessionTokens}, + authentication::oidc::{rng, AuthorizationCode, OidcSessionTokens}, Client, }; diff --git a/crates/matrix-sdk/src/oidc/cross_process.rs b/crates/matrix-sdk/src/authentication/oidc/cross_process.rs similarity index 99% rename from crates/matrix-sdk/src/oidc/cross_process.rs rename to crates/matrix-sdk/src/authentication/oidc/cross_process.rs index 87c057d17..3a41f3e0a 100644 --- a/crates/matrix-sdk/src/oidc/cross_process.rs +++ b/crates/matrix-sdk/src/authentication/oidc/cross_process.rs @@ -264,7 +264,7 @@ mod tests { use super::compute_session_hash; use crate::{ - oidc::{ + authentication::oidc::{ backend::mock::{MockImpl, ISSUER_URL}, cross_process::SessionHash, tests, diff --git a/crates/matrix-sdk/src/oidc/data_serde.rs b/crates/matrix-sdk/src/authentication/oidc/data_serde.rs similarity index 100% rename from crates/matrix-sdk/src/oidc/data_serde.rs rename to crates/matrix-sdk/src/authentication/oidc/data_serde.rs diff --git a/crates/matrix-sdk/src/oidc/end_session_builder.rs b/crates/matrix-sdk/src/authentication/oidc/end_session_builder.rs similarity index 100% rename from crates/matrix-sdk/src/oidc/end_session_builder.rs rename to crates/matrix-sdk/src/authentication/oidc/end_session_builder.rs diff --git a/crates/matrix-sdk/src/oidc/mod.rs b/crates/matrix-sdk/src/authentication/oidc/mod.rs similarity index 99% rename from crates/matrix-sdk/src/oidc/mod.rs rename to crates/matrix-sdk/src/authentication/oidc/mod.rs index 5fb525d75..db42bd95a 100644 --- a/crates/matrix-sdk/src/oidc/mod.rs +++ b/crates/matrix-sdk/src/authentication/oidc/mod.rs @@ -217,11 +217,11 @@ pub use self::{ use self::{ backend::{server::OidcServer, OidcBackend}, cross_process::{CrossProcessRefreshLockGuard, CrossProcessRefreshManager}, + registrations::{ClientId, OidcRegistrations}, }; use crate::{ authentication::{qrcode::LoginWithQrCode, AuthData}, client::SessionChange, - oidc::registrations::{ClientId, OidcRegistrations}, Client, HttpError, RefreshTokenError, Result, }; diff --git a/crates/matrix-sdk/src/oidc/registrations.rs b/crates/matrix-sdk/src/authentication/oidc/registrations.rs similarity index 100% rename from crates/matrix-sdk/src/oidc/registrations.rs rename to crates/matrix-sdk/src/authentication/oidc/registrations.rs diff --git a/crates/matrix-sdk/src/oidc/tests.rs b/crates/matrix-sdk/src/authentication/oidc/tests.rs similarity index 99% rename from crates/matrix-sdk/src/oidc/tests.rs rename to crates/matrix-sdk/src/authentication/oidc/tests.rs index 0c40cff89..2a01657fc 100644 --- a/crates/matrix-sdk/src/oidc/tests.rs +++ b/crates/matrix-sdk/src/authentication/oidc/tests.rs @@ -26,14 +26,11 @@ use wiremock::{ use super::{ backend::mock::{MockImpl, AUTHORIZATION_URL, ISSUER_URL}, + registrations::{ClientId, OidcRegistrations}, AuthorizationCode, AuthorizationError, AuthorizationResponse, Oidc, OidcError, OidcSession, OidcSessionTokens, RedirectUriQueryParseError, UserSession, }; -use crate::{ - oidc::registrations::{ClientId, OidcRegistrations}, - test_utils::test_client_builder, - Client, Error, -}; +use crate::{test_utils::test_client_builder, Client, Error}; const CLIENT_ID: &str = "test_client_id"; const REDIRECT_URI_STRING: &str = "http://matrix.example.com/oidc/callback"; diff --git a/crates/matrix-sdk/src/authentication/qrcode/login.rs b/crates/matrix-sdk/src/authentication/qrcode/login.rs index 4422d6b07..9bf13daaa 100644 --- a/crates/matrix-sdk/src/authentication/qrcode/login.rs +++ b/crates/matrix-sdk/src/authentication/qrcode/login.rs @@ -34,7 +34,7 @@ use super::{ SecureChannelError, }; #[cfg(doc)] -use crate::oidc::Oidc; +use crate::authentication::oidc::Oidc; use crate::{ authentication::qrcode::{ messages::QrAuthMessage, secure_channel::EstablishedSecureChannel, QRCodeLoginError, diff --git a/crates/matrix-sdk/src/authentication/qrcode/mod.rs b/crates/matrix-sdk/src/authentication/qrcode/mod.rs index 752f21e0c..0044f36a6 100644 --- a/crates/matrix-sdk/src/authentication/qrcode/mod.rs +++ b/crates/matrix-sdk/src/authentication/qrcode/mod.rs @@ -33,8 +33,8 @@ use url::Url; pub use vodozemac::ecies::{Error as EciesError, MessageDecodeError}; #[cfg(doc)] -use crate::oidc::Oidc; -use crate::{oidc::CrossProcessRefreshLockError, HttpError}; +use crate::authentication::oidc::Oidc; +use crate::{authentication::oidc::CrossProcessRefreshLockError, HttpError}; mod login; mod messages; @@ -113,7 +113,7 @@ pub enum DeviceAuhorizationOidcError { /// A generic OIDC error happened while we were attempting to register the /// device with the OIDC provider. #[error(transparent)] - Oidc(#[from] crate::oidc::OidcError), + Oidc(#[from] crate::authentication::oidc::OidcError), /// The issuer URL failed to be parsed. #[error(transparent)] diff --git a/crates/matrix-sdk/src/authentication/qrcode/oidc_client.rs b/crates/matrix-sdk/src/authentication/qrcode/oidc_client.rs index 3cdc3a0a2..1adce855a 100644 --- a/crates/matrix-sdk/src/authentication/qrcode/oidc_client.rs +++ b/crates/matrix-sdk/src/authentication/qrcode/oidc_client.rs @@ -32,7 +32,7 @@ use openidconnect::{ use vodozemac::Curve25519PublicKey; use super::DeviceAuhorizationOidcError; -use crate::{http_client::HttpClient, oidc::OidcSessionTokens}; +use crate::{authentication::oidc::OidcSessionTokens, http_client::HttpClient}; // Obtain the device_authorization_url from the OIDC metadata provider. #[derive(Clone, Debug, serde::Deserialize, serde::Serialize)] diff --git a/crates/matrix-sdk/src/client/builder/mod.rs b/crates/matrix-sdk/src/client/builder/mod.rs index 8902f2360..bf4ab18ca 100644 --- a/crates/matrix-sdk/src/client/builder/mod.rs +++ b/crates/matrix-sdk/src/client/builder/mod.rs @@ -28,14 +28,14 @@ use tokio::sync::{broadcast, Mutex, OnceCell}; use tracing::{debug, field::debug, instrument, Span}; use super::{Client, ClientInner}; +#[cfg(feature = "experimental-oidc")] +use crate::authentication::oidc::OidcCtx; #[cfg(feature = "e2e-encryption")] use crate::crypto::{CollectStrategy, TrustRequirement}; #[cfg(feature = "e2e-encryption")] use crate::encryption::EncryptionSettings; #[cfg(not(target_arch = "wasm32"))] use crate::http_client::HttpSettings; -#[cfg(feature = "experimental-oidc")] -use crate::oidc::OidcCtx; use crate::{ authentication::AuthCtx, client::ClientServerCapabilities, config::RequestConfig, error::RumaApiError, http_client::HttpClient, send_queue::SendQueueData, diff --git a/crates/matrix-sdk/src/client/futures.rs b/crates/matrix-sdk/src/client/futures.rs index 7c828cc7b..4cd5ebce1 100644 --- a/crates/matrix-sdk/src/client/futures.rs +++ b/crates/matrix-sdk/src/client/futures.rs @@ -35,7 +35,7 @@ use tracing::trace; use super::super::Client; #[cfg(feature = "experimental-oidc")] -use crate::oidc::OidcError; +use crate::authentication::oidc::OidcError; use crate::{ config::RequestConfig, error::{HttpError, HttpResult}, diff --git a/crates/matrix-sdk/src/client/mod.rs b/crates/matrix-sdk/src/client/mod.rs index 773c1c54c..27d6ece52 100644 --- a/crates/matrix-sdk/src/client/mod.rs +++ b/crates/matrix-sdk/src/client/mod.rs @@ -74,7 +74,7 @@ use url::Url; use self::futures::SendRequest; #[cfg(feature = "experimental-oidc")] -use crate::oidc::Oidc; +use crate::authentication::oidc::Oidc; use crate::{ authentication::{ matrix::MatrixAuth, AuthCtx, AuthData, ReloadSessionCallback, SaveSessionCallback, diff --git a/crates/matrix-sdk/src/error.rs b/crates/matrix-sdk/src/error.rs index 99658d2fc..241ebab8f 100644 --- a/crates/matrix-sdk/src/error.rs +++ b/crates/matrix-sdk/src/error.rs @@ -354,7 +354,7 @@ pub enum Error { /// An error occurred interacting with the OpenID Connect API. #[cfg(feature = "experimental-oidc")] #[error(transparent)] - Oidc(#[from] crate::oidc::OidcError), + Oidc(#[from] crate::authentication::oidc::OidcError), /// A concurrent request to a deduplicated request has failed. #[error("a concurrent request failed; see logs for details")] @@ -561,7 +561,7 @@ pub enum RefreshTokenError { /// An error occurred interacting with the OpenID Connect API. #[cfg(feature = "experimental-oidc")] #[error(transparent)] - Oidc(#[from] Arc), + Oidc(#[from] Arc), } /// Errors that can occur when manipulating push notification settings. diff --git a/crates/matrix-sdk/src/lib.rs b/crates/matrix-sdk/src/lib.rs index 0eac2350a..4f4d4b217 100644 --- a/crates/matrix-sdk/src/lib.rs +++ b/crates/matrix-sdk/src/lib.rs @@ -47,8 +47,6 @@ pub mod event_handler; mod http_client; pub mod media; pub mod notification_settings; -#[cfg(feature = "experimental-oidc")] -pub mod oidc; pub mod pusher; pub mod room; pub mod room_directory_search; diff --git a/crates/matrix-sdk/tests/integration/encryption/cross_signing.rs b/crates/matrix-sdk/tests/integration/encryption/cross_signing.rs index 033d61391..46274a744 100644 --- a/crates/matrix-sdk/tests/integration/encryption/cross_signing.rs +++ b/crates/matrix-sdk/tests/integration/encryption/cross_signing.rs @@ -129,8 +129,8 @@ async fn test_reset_oidc() { registration::{ClientMetadata, VerifiedClientMetadata}, }; use matrix_sdk::{ + authentication::oidc::{OidcSession, OidcSessionTokens, UserSession}, encryption::CrossSigningResetAuthType, - oidc::{OidcSession, OidcSessionTokens, UserSession}, }; use similar_asserts::assert_eq; use url::Url; diff --git a/examples/oidc_cli/src/main.rs b/examples/oidc_cli/src/main.rs index 8761bcef3..13d0d82c8 100644 --- a/examples/oidc_cli/src/main.rs +++ b/examples/oidc_cli/src/main.rs @@ -30,9 +30,7 @@ use axum::{ }; use futures_util::StreamExt; use matrix_sdk::{ - config::SyncSettings, - encryption::{recovery::RecoveryState, CrossSigningResetAuthType}, - oidc::{ + authentication::oidc::{ requests::account_management::AccountManagementActionFull, types::{ client_credentials::ClientCredentials, @@ -44,6 +42,8 @@ use matrix_sdk::{ }, AuthorizationCode, AuthorizationResponse, OidcAuthorizationData, OidcSession, UserSession, }, + config::SyncSettings, + encryption::{recovery::RecoveryState, CrossSigningResetAuthType}, room::Room, ruma::events::room::message::{MessageType, OriginalSyncRoomMessageEvent}, Client, ClientBuildError, Result, RoomState, diff --git a/examples/qr-login/src/main.rs b/examples/qr-login/src/main.rs index 665c511b1..67699bd9c 100644 --- a/examples/qr-login/src/main.rs +++ b/examples/qr-login/src/main.rs @@ -4,12 +4,14 @@ use anyhow::{bail, Context, Result}; use clap::Parser; use futures_util::StreamExt; use matrix_sdk::{ - authentication::qrcode::{LoginProgress, QrCodeData, QrCodeModeData}, - oidc::types::{ - iana::oauth::OAuthClientAuthenticationMethod, - oidc::ApplicationType, - registration::{ClientMetadata, Localized, VerifiedClientMetadata}, - requests::GrantType, + authentication::{ + oidc::types::{ + iana::oauth::OAuthClientAuthenticationMethod, + oidc::ApplicationType, + registration::{ClientMetadata, Localized, VerifiedClientMetadata}, + requests::GrantType, + }, + qrcode::{LoginProgress, QrCodeData, QrCodeModeData}, }, Client, };