Browse Source

Merge branch 'kcommaille/bump-sdk' into 'main'

Upgrade matrix-sdk and ruma crates

See merge request World/fractal!2149
merge-requests/2149/merge
Kévin Commaille 2 weeks ago
parent
commit
bcb7bd53c0
  1. 36
      Cargo.lock
  2. 8
      Cargo.toml
  3. 37
      src/account_settings/general_page/deactivate_account_subpage.rs
  4. 36
      src/account_settings/general_page/mod.rs
  5. 70
      src/account_settings/mod.rs
  6. 34
      src/account_settings/user_session/user_session_subpage.rs

36
Cargo.lock generated

@ -2844,7 +2844,7 @@ dependencies = [
[[package]]
name = "matrix-sdk"
version = "0.16.0"
source = "git+https://github.com/matrix-org/matrix-rust-sdk.git?rev=bbdfe7b38fd17952beb82e6e13c7d448b53fb2d1#bbdfe7b38fd17952beb82e6e13c7d448b53fb2d1"
source = "git+https://github.com/matrix-org/matrix-rust-sdk.git?rev=029148ef6e45d51e6325a4f5aadcdee7ec9385cc#029148ef6e45d51e6325a4f5aadcdee7ec9385cc"
dependencies = [
"anymap2",
"aquamarine",
@ -2902,7 +2902,7 @@ dependencies = [
[[package]]
name = "matrix-sdk-base"
version = "0.16.0"
source = "git+https://github.com/matrix-org/matrix-rust-sdk.git?rev=bbdfe7b38fd17952beb82e6e13c7d448b53fb2d1#bbdfe7b38fd17952beb82e6e13c7d448b53fb2d1"
source = "git+https://github.com/matrix-org/matrix-rust-sdk.git?rev=029148ef6e45d51e6325a4f5aadcdee7ec9385cc#029148ef6e45d51e6325a4f5aadcdee7ec9385cc"
dependencies = [
"as_variant",
"async-trait",
@ -2928,7 +2928,7 @@ dependencies = [
[[package]]
name = "matrix-sdk-common"
version = "0.16.0"
source = "git+https://github.com/matrix-org/matrix-rust-sdk.git?rev=bbdfe7b38fd17952beb82e6e13c7d448b53fb2d1#bbdfe7b38fd17952beb82e6e13c7d448b53fb2d1"
source = "git+https://github.com/matrix-org/matrix-rust-sdk.git?rev=029148ef6e45d51e6325a4f5aadcdee7ec9385cc#029148ef6e45d51e6325a4f5aadcdee7ec9385cc"
dependencies = [
"eyeball-im",
"futures-core",
@ -2951,7 +2951,7 @@ dependencies = [
[[package]]
name = "matrix-sdk-crypto"
version = "0.16.0"
source = "git+https://github.com/matrix-org/matrix-rust-sdk.git?rev=bbdfe7b38fd17952beb82e6e13c7d448b53fb2d1#bbdfe7b38fd17952beb82e6e13c7d448b53fb2d1"
source = "git+https://github.com/matrix-org/matrix-rust-sdk.git?rev=029148ef6e45d51e6325a4f5aadcdee7ec9385cc#029148ef6e45d51e6325a4f5aadcdee7ec9385cc"
dependencies = [
"aes",
"aquamarine",
@ -2992,7 +2992,7 @@ dependencies = [
[[package]]
name = "matrix-sdk-indexeddb"
version = "0.16.0"
source = "git+https://github.com/matrix-org/matrix-rust-sdk.git?rev=bbdfe7b38fd17952beb82e6e13c7d448b53fb2d1#bbdfe7b38fd17952beb82e6e13c7d448b53fb2d1"
source = "git+https://github.com/matrix-org/matrix-rust-sdk.git?rev=029148ef6e45d51e6325a4f5aadcdee7ec9385cc#029148ef6e45d51e6325a4f5aadcdee7ec9385cc"
dependencies = [
"async-trait",
"base64",
@ -3023,7 +3023,7 @@ dependencies = [
[[package]]
name = "matrix-sdk-qrcode"
version = "0.16.0"
source = "git+https://github.com/matrix-org/matrix-rust-sdk.git?rev=bbdfe7b38fd17952beb82e6e13c7d448b53fb2d1#bbdfe7b38fd17952beb82e6e13c7d448b53fb2d1"
source = "git+https://github.com/matrix-org/matrix-rust-sdk.git?rev=029148ef6e45d51e6325a4f5aadcdee7ec9385cc#029148ef6e45d51e6325a4f5aadcdee7ec9385cc"
dependencies = [
"byteorder",
"qrcode",
@ -3035,7 +3035,7 @@ dependencies = [
[[package]]
name = "matrix-sdk-sqlite"
version = "0.16.0"
source = "git+https://github.com/matrix-org/matrix-rust-sdk.git?rev=bbdfe7b38fd17952beb82e6e13c7d448b53fb2d1#bbdfe7b38fd17952beb82e6e13c7d448b53fb2d1"
source = "git+https://github.com/matrix-org/matrix-rust-sdk.git?rev=029148ef6e45d51e6325a4f5aadcdee7ec9385cc#029148ef6e45d51e6325a4f5aadcdee7ec9385cc"
dependencies = [
"as_variant",
"async-trait",
@ -3062,7 +3062,7 @@ dependencies = [
[[package]]
name = "matrix-sdk-store-encryption"
version = "0.16.0"
source = "git+https://github.com/matrix-org/matrix-rust-sdk.git?rev=bbdfe7b38fd17952beb82e6e13c7d448b53fb2d1#bbdfe7b38fd17952beb82e6e13c7d448b53fb2d1"
source = "git+https://github.com/matrix-org/matrix-rust-sdk.git?rev=029148ef6e45d51e6325a4f5aadcdee7ec9385cc#029148ef6e45d51e6325a4f5aadcdee7ec9385cc"
dependencies = [
"base64",
"blake3",
@ -3082,7 +3082,7 @@ dependencies = [
[[package]]
name = "matrix-sdk-ui"
version = "0.16.0"
source = "git+https://github.com/matrix-org/matrix-rust-sdk.git?rev=bbdfe7b38fd17952beb82e6e13c7d448b53fb2d1#bbdfe7b38fd17952beb82e6e13c7d448b53fb2d1"
source = "git+https://github.com/matrix-org/matrix-rust-sdk.git?rev=029148ef6e45d51e6325a4f5aadcdee7ec9385cc#029148ef6e45d51e6325a4f5aadcdee7ec9385cc"
dependencies = [
"as_variant",
"async-rx",
@ -4042,7 +4042,7 @@ dependencies = [
[[package]]
name = "ruma"
version = "0.14.1"
source = "git+https://github.com/ruma/ruma.git?rev=289bee87974bd3c2ad14a6c15801c80b683b67dc#289bee87974bd3c2ad14a6c15801c80b683b67dc"
source = "git+https://github.com/ruma/ruma.git?rev=4a0ae80fbf42d1b759e108d7315537d13583c144#4a0ae80fbf42d1b759e108d7315537d13583c144"
dependencies = [
"assign",
"js_int",
@ -4058,7 +4058,7 @@ dependencies = [
[[package]]
name = "ruma-client-api"
version = "0.22.1"
source = "git+https://github.com/ruma/ruma.git?rev=289bee87974bd3c2ad14a6c15801c80b683b67dc#289bee87974bd3c2ad14a6c15801c80b683b67dc"
source = "git+https://github.com/ruma/ruma.git?rev=4a0ae80fbf42d1b759e108d7315537d13583c144#4a0ae80fbf42d1b759e108d7315537d13583c144"
dependencies = [
"as_variant",
"assign",
@ -4081,7 +4081,7 @@ dependencies = [
[[package]]
name = "ruma-common"
version = "0.17.1"
source = "git+https://github.com/ruma/ruma.git?rev=289bee87974bd3c2ad14a6c15801c80b683b67dc#289bee87974bd3c2ad14a6c15801c80b683b67dc"
source = "git+https://github.com/ruma/ruma.git?rev=4a0ae80fbf42d1b759e108d7315537d13583c144#4a0ae80fbf42d1b759e108d7315537d13583c144"
dependencies = [
"as_variant",
"base64",
@ -4114,7 +4114,7 @@ dependencies = [
[[package]]
name = "ruma-events"
version = "0.32.1"
source = "git+https://github.com/ruma/ruma.git?rev=289bee87974bd3c2ad14a6c15801c80b683b67dc#289bee87974bd3c2ad14a6c15801c80b683b67dc"
source = "git+https://github.com/ruma/ruma.git?rev=4a0ae80fbf42d1b759e108d7315537d13583c144#4a0ae80fbf42d1b759e108d7315537d13583c144"
dependencies = [
"as_variant",
"indexmap",
@ -4140,7 +4140,7 @@ dependencies = [
[[package]]
name = "ruma-federation-api"
version = "0.13.1"
source = "git+https://github.com/ruma/ruma.git?rev=289bee87974bd3c2ad14a6c15801c80b683b67dc#289bee87974bd3c2ad14a6c15801c80b683b67dc"
source = "git+https://github.com/ruma/ruma.git?rev=4a0ae80fbf42d1b759e108d7315537d13583c144#4a0ae80fbf42d1b759e108d7315537d13583c144"
dependencies = [
"headers",
"http",
@ -4159,7 +4159,7 @@ dependencies = [
[[package]]
name = "ruma-html"
version = "0.6.0"
source = "git+https://github.com/ruma/ruma.git?rev=289bee87974bd3c2ad14a6c15801c80b683b67dc#289bee87974bd3c2ad14a6c15801c80b683b67dc"
source = "git+https://github.com/ruma/ruma.git?rev=4a0ae80fbf42d1b759e108d7315537d13583c144#4a0ae80fbf42d1b759e108d7315537d13583c144"
dependencies = [
"as_variant",
"html5ever",
@ -4171,7 +4171,7 @@ dependencies = [
[[package]]
name = "ruma-identifiers-validation"
version = "0.12.0"
source = "git+https://github.com/ruma/ruma.git?rev=289bee87974bd3c2ad14a6c15801c80b683b67dc#289bee87974bd3c2ad14a6c15801c80b683b67dc"
source = "git+https://github.com/ruma/ruma.git?rev=4a0ae80fbf42d1b759e108d7315537d13583c144#4a0ae80fbf42d1b759e108d7315537d13583c144"
dependencies = [
"js_int",
"thiserror 2.0.18",
@ -4180,7 +4180,7 @@ dependencies = [
[[package]]
name = "ruma-macros"
version = "0.17.1"
source = "git+https://github.com/ruma/ruma.git?rev=289bee87974bd3c2ad14a6c15801c80b683b67dc#289bee87974bd3c2ad14a6c15801c80b683b67dc"
source = "git+https://github.com/ruma/ruma.git?rev=4a0ae80fbf42d1b759e108d7315537d13583c144#4a0ae80fbf42d1b759e108d7315537d13583c144"
dependencies = [
"as_variant",
"cfg-if",
@ -4196,7 +4196,7 @@ dependencies = [
[[package]]
name = "ruma-signatures"
version = "0.19.0"
source = "git+https://github.com/ruma/ruma.git?rev=289bee87974bd3c2ad14a6c15801c80b683b67dc#289bee87974bd3c2ad14a6c15801c80b683b67dc"
source = "git+https://github.com/ruma/ruma.git?rev=4a0ae80fbf42d1b759e108d7315537d13583c144#4a0ae80fbf42d1b759e108d7315537d13583c144"
dependencies = [
"base64",
"ed25519-dalek",

8
Cargo.toml

@ -75,23 +75,23 @@ sourceview = { version = "0.10", package = "sourceview5" }
[dependencies.matrix-sdk]
# version = "0.14"
git = "https://github.com/matrix-org/matrix-rust-sdk.git"
rev = "bbdfe7b38fd17952beb82e6e13c7d448b53fb2d1"
rev = "029148ef6e45d51e6325a4f5aadcdee7ec9385cc"
features = ["socks", "sso-login", "markdown", "qrcode"]
[dependencies.matrix-sdk-store-encryption]
# version = "0.14"
git = "https://github.com/matrix-org/matrix-rust-sdk.git"
rev = "bbdfe7b38fd17952beb82e6e13c7d448b53fb2d1"
rev = "029148ef6e45d51e6325a4f5aadcdee7ec9385cc"
[dependencies.matrix-sdk-ui]
# version = "0.14"
git = "https://github.com/matrix-org/matrix-rust-sdk.git"
rev = "bbdfe7b38fd17952beb82e6e13c7d448b53fb2d1"
rev = "029148ef6e45d51e6325a4f5aadcdee7ec9385cc"
[dependencies.ruma]
# version = "0.14"
git = "https://github.com/ruma/ruma.git"
rev = "289bee87974bd3c2ad14a6c15801c80b683b67dc"
rev = "4a0ae80fbf42d1b759e108d7315537d13583c144"
features = [
"client-api-c",
"markdown",

37
src/account_settings/general_page/deactivate_account_subpage.rs

@ -1,7 +1,9 @@
use adw::{prelude::*, subclass::prelude::*};
use gettextrs::gettext;
use gtk::{glib, glib::clone};
use matrix_sdk::authentication::oauth::{AccountManagementActionFull, AccountManagementUrlBuilder};
use ruma::api::client::discovery::get_authorization_server_metadata::v1::{
AccountManagementActionData, AuthorizationServerMetadata,
};
use tracing::error;
use super::AccountSettings;
@ -71,7 +73,7 @@ mod imp {
fn set_account_settings(&self, account_settings: &AccountSettings) {
self.account_settings.set(Some(account_settings));
account_settings.connect_account_management_url_builder_changed(clone!(
account_settings.connect_oauth_server_metadata_changed(clone!(
#[weak(rename_to = imp)]
self,
move |_| {
@ -81,17 +83,18 @@ mod imp {
self.update_visible_button();
}
/// The builder for the account management URL of the OAuth 2.0
/// authorization server, if any.
fn account_management_url_builder(&self) -> Option<AccountManagementUrlBuilder> {
/// The OAuth 2.0 authorization server metadata, if any.
fn oauth_server_metadata(&self) -> Option<AuthorizationServerMetadata> {
self.account_settings
.upgrade()
.and_then(|s| s.account_management_url_builder())
.and_then(|s| s.oauth_server_metadata())
}
/// Update the visible button for the current state.
fn update_visible_button(&self) {
let should_open_url = self.account_management_url_builder().is_some();
let should_open_url = self
.oauth_server_metadata()
.is_some_and(|metadata| metadata.account_management_uri.is_some());
self.loading_button.set_visible(!should_open_url);
self.open_url_button.set_visible(should_open_url);
}
@ -112,7 +115,10 @@ mod imp {
/// Deactivate the account with the proper method.
#[template_callback]
async fn deactivate_account(&self) {
if self.account_management_url_builder().is_some() {
if self
.oauth_server_metadata()
.is_some_and(|metadata| metadata.account_management_uri.is_some())
{
self.open_deactivate_account_url().await;
} else {
self.deactivate_account_with_request().await;
@ -165,20 +171,23 @@ mod imp {
// Open the account management URL to deactivate the account.
#[template_callback]
async fn open_deactivate_account_url(&self) {
let Some(url_builder) = self.account_management_url_builder() else {
error!("Could not find open account management URL");
let Some(metadata) = self.oauth_server_metadata() else {
error!("Could not find OAuth 2.0 authorization server metadata");
return;
};
let url = url_builder
.action(AccountManagementActionFull::AccountDeactivate)
.build();
let Some(url) = metadata
.account_management_url_with_action(AccountManagementActionData::AccountDeactivate)
else {
error!("Could not build OAuth 2.0 account management URL");
return;
};
if let Err(error) = gtk::UriLauncher::new(url.as_str())
.launch_future(self.obj().root().and_downcast_ref::<gtk::Window>())
.await
{
error!("Could not launch account management URL: {error}");
error!("Could not launch OAuth 2.0 account management URL: {error}");
}
}
}

36
src/account_settings/general_page/mod.rs

@ -1,13 +1,17 @@
use adw::{prelude::*, subclass::prelude::*};
use gettextrs::gettext;
use gtk::{gio, glib, glib::clone};
use matrix_sdk::authentication::oauth::{AccountManagementActionFull, AccountManagementUrlBuilder};
use ruma::{
OwnedMxcUri,
api::{
Metadata, SupportedVersions,
client::{
discovery::get_capabilities::v3::Capabilities,
discovery::{
get_authorization_server_metadata::v1::{
AccountManagementActionData, AuthorizationServerMetadata,
},
get_capabilities::v3::Capabilities,
},
profile::{ProfileFieldName, delete_profile_field},
},
},
@ -191,7 +195,7 @@ mod imp {
self.account_settings.set(account_settings);
if let Some(account_settings) = account_settings {
account_settings.connect_account_management_url_builder_changed(clone!(
account_settings.connect_oauth_server_metadata_changed(clone!(
#[weak(rename_to = imp)]
self,
move |_| {
@ -203,12 +207,11 @@ mod imp {
self.update_capabilities();
}
/// The builder for the account management URL of the OAuth 2.0
/// authorization server, if any.
fn account_management_url_builder(&self) -> Option<AccountManagementUrlBuilder> {
/// The OAuth 2.0 authorization server metadata, if any.
fn oauth_server_metadata(&self) -> Option<AuthorizationServerMetadata> {
self.account_settings
.upgrade()
.and_then(|s| s.account_management_url_builder())
.and_then(|s| s.oauth_server_metadata())
}
/// Load the possible changes on the user account.
@ -255,7 +258,9 @@ mod imp {
};
let uses_oauth_api = session.uses_oauth_api();
let has_account_management_url = self.account_management_url_builder().is_some();
let has_account_management_url = self
.oauth_server_metadata()
.is_some_and(|metadata| metadata.account_management_uri.is_some());
let capabilities_data = self.capabilities_data.borrow();
self.avatar.set_editable(
@ -276,20 +281,23 @@ mod imp {
/// Open the URL to manage the account.
#[template_callback]
async fn manage_account(&self) {
let Some(url_builder) = self.account_management_url_builder() else {
error!("Could not find open account management URL");
let Some(metadata) = self.oauth_server_metadata() else {
error!("Could not find OAuth 2.0 authorization server metadata");
return;
};
let url = url_builder
.action(AccountManagementActionFull::Profile)
.build();
let Some(url) =
metadata.account_management_url_with_action(AccountManagementActionData::Profile)
else {
error!("Could not build OAuth 2.0 account management URL");
return;
};
if let Err(error) = gtk::UriLauncher::new(url.as_str())
.launch_future(self.obj().root().and_downcast_ref::<gtk::Window>())
.await
{
error!("Could not launch account management URL: {error}");
error!("Could not launch OAuth 2.0 account management URL: {error}");
}
}

70
src/account_settings/mod.rs

@ -3,9 +3,8 @@ use gtk::{
glib,
glib::{clone, closure_local},
};
use matrix_sdk::authentication::oauth::{
AccountManagementUrlBuilder, OAuthError, error::OAuthDiscoveryError,
};
use matrix_sdk::authentication::oauth::error::OAuthDiscoveryError;
use ruma::api::client::discovery::get_authorization_server_metadata::v1::AuthorizationServerMetadata;
use tracing::{error, warn};
mod encryption_page;
@ -65,9 +64,8 @@ mod imp {
/// The current session.
#[property(get, set = Self::set_session, nullable)]
session: BoundObjectWeakRef<Session>,
/// The builder for the account management URL of the OAuth 2.0
/// authorization server, if any.
account_management_url_builder: RefCell<Option<AccountManagementUrlBuilder>>,
/// The OAuth 2.0 authorization server metadata, if any.
oauth_server_metadata: RefCell<Option<AuthorizationServerMetadata>>,
}
#[glib::object_subclass]
@ -133,9 +131,8 @@ mod imp {
#[glib::derived_properties]
impl ObjectImpl for AccountSettings {
fn signals() -> &'static [Signal] {
static SIGNALS: LazyLock<Vec<Signal>> = LazyLock::new(|| {
vec![Signal::builder("account-management-url-builder-changed").build()]
});
static SIGNALS: LazyLock<Vec<Signal>> =
LazyLock::new(|| vec![Signal::builder("oauth-server-metadata-changed").build()]);
SIGNALS.as_ref()
}
}
@ -153,7 +150,7 @@ mod imp {
let obj = self.obj();
self.session.disconnect_signals();
self.set_account_management_url_builder(None);
self.set_oauth_server_metadata(None);
if let Some(session) = session {
let logged_out_handler = session.connect_logged_out(clone!(
@ -179,7 +176,7 @@ mod imp {
#[weak(rename_to = imp)]
self,
async move {
imp.load_account_management_url_builder().await;
imp.load_oauth_server_metadata().await;
}
));
}
@ -187,47 +184,39 @@ mod imp {
obj.notify_session();
}
/// Load the builder for the account management URL of the OAuth 2.0
/// authorization server.
async fn load_account_management_url_builder(&self) {
/// Load the the OAuth 2.0 authorization server metadata.
async fn load_oauth_server_metadata(&self) {
let Some(session) = self.session.obj() else {
return;
};
let oauth = session.client().oauth();
let handle = spawn_tokio!(async move { oauth.account_management_url().await });
let handle = spawn_tokio!(async move { oauth.cached_server_metadata().await });
let url_builder = match handle.await.expect("task was not aborted") {
Ok(url_builder) => url_builder,
let metadata = match handle.await.expect("task was not aborted") {
Ok(metadata) => Some(metadata),
Err(error) => {
// Ignore the error that says that OAuth 2.0 is not supported, it can happen.
if !matches!(
error,
OAuthError::Discovery(OAuthDiscoveryError::NotSupported)
) {
warn!("Could not fetch OAuth 2.0 account management URL: {error}");
if !matches!(error, OAuthDiscoveryError::NotSupported) {
warn!("Could not fetch OAuth 2.0 authorization server metadata: {error}");
}
None
}
};
self.set_account_management_url_builder(url_builder);
self.set_oauth_server_metadata(metadata);
}
/// Set the builder for the account management URL of the OAuth 2.0
/// authorization server.
fn set_account_management_url_builder(
&self,
url_builder: Option<AccountManagementUrlBuilder>,
) {
self.account_management_url_builder.replace(url_builder);
fn set_oauth_server_metadata(&self, metadata: Option<AuthorizationServerMetadata>) {
self.oauth_server_metadata.replace(metadata);
self.obj()
.emit_by_name::<()>("account-management-url-builder-changed", &[]);
.emit_by_name::<()>("oauth-server-metadata-changed", &[]);
}
/// The builder for the account management URL of the OAuth 2.0
/// authorization server, if any.
pub(super) fn account_management_url_builder(&self) -> Option<AccountManagementUrlBuilder> {
self.account_management_url_builder.borrow().clone()
/// The OAuth 2.0 authorization server metadata, if any.
pub(super) fn oauth_server_metadata(&self) -> Option<AuthorizationServerMetadata> {
self.oauth_server_metadata.borrow().clone()
}
/// Reload the sessions from the server.
@ -254,10 +243,9 @@ impl AccountSettings {
glib::Object::builder().property("session", session).build()
}
/// The builder for the account management URL of the OAuth 2.0
/// authorization server, if any.
fn account_management_url_builder(&self) -> Option<AccountManagementUrlBuilder> {
self.imp().account_management_url_builder()
/// The OAuth 2.0 authorization server metadata, if any.
fn oauth_server_metadata(&self) -> Option<AuthorizationServerMetadata> {
self.imp().oauth_server_metadata()
}
/// Show the "Encryption" tab.
@ -358,14 +346,14 @@ impl AccountSettings {
self.push_subpage(&page);
}
/// Connect to the signal emitted when the builder for the OAuth 2.0 account
/// management URL changed.
pub fn connect_account_management_url_builder_changed<F: Fn(&Self) + 'static>(
/// Connect to the signal emitted when the OAuth 2.0 authorization server
/// metadata changed.
pub fn connect_oauth_server_metadata_changed<F: Fn(&Self) + 'static>(
&self,
f: F,
) -> glib::SignalHandlerId {
self.connect_closure(
"account-management-url-builder-changed",
"oauth-server-metadata-changed",
true,
closure_local!(move |obj: Self| {
f(&obj);

34
src/account_settings/user_session/user_session_subpage.rs

@ -1,7 +1,9 @@
use adw::{prelude::*, subclass::prelude::*};
use gettextrs::gettext;
use gtk::{glib, glib::clone};
use matrix_sdk::authentication::oauth::{AccountManagementActionFull, AccountManagementUrlBuilder};
use ruma::api::client::discovery::get_authorization_server_metadata::v1::{
AccountManagementActionData, AuthorizationServerMetadata, DeviceDeleteData,
};
use tracing::error;
use crate::{
@ -124,7 +126,7 @@ mod imp {
/// Set the ancestor [`AccountSettings`].
fn set_account_settings(&self, account_settings: AccountSettings) {
let handler = account_settings.connect_account_management_url_builder_changed(clone!(
let handler = account_settings.connect_oauth_server_metadata_changed(clone!(
#[weak(rename_to = imp)]
self,
move |_| {
@ -134,10 +136,9 @@ mod imp {
self.account_settings.set(account_settings, vec![handler]);
}
/// The builder for the account management URL of the OAuth 2.0
/// authorization server, if any.
fn account_management_url_builder(&self) -> Option<AccountManagementUrlBuilder> {
self.account_settings.obj().account_management_url_builder()
/// The OAuth 2.0 authorization server metadata, if any.
fn oauth_server_metadata(&self) -> Option<AuthorizationServerMetadata> {
self.account_settings.obj().oauth_server_metadata()
}
/// Update the visible disconnect button.
@ -158,7 +159,9 @@ mod imp {
};
let uses_oauth_api = session.uses_oauth_api();
let has_account_management_url = self.account_management_url_builder().is_some();
let has_account_management_url = self
.oauth_server_metadata()
.is_some_and(|metadata| metadata.account_management_uri.is_some());
self.log_out_button.set_visible(false);
self.loading_disconnect_button
@ -258,21 +261,24 @@ mod imp {
return;
};
let device_id = user_session.device_id_string().into();
let Some(url_builder) = self.account_management_url_builder() else {
error!("Could not find account management URL");
let device_id = user_session.device_id();
let Some(metadata) = self.oauth_server_metadata() else {
error!("Could not find OAuth 2.0 authorization server metadata");
return;
};
let url = url_builder
.action(AccountManagementActionFull::SessionEnd { device_id })
.build();
let Some(url) = metadata.account_management_url_with_action(
AccountManagementActionData::DeviceDelete(DeviceDeleteData::new(device_id)),
) else {
error!("Could not build OAuth 2.0 account management URL");
return;
};
if let Err(error) = gtk::UriLauncher::new(url.as_str())
.launch_future(self.obj().root().and_downcast_ref::<gtk::Window>())
.await
{
error!("Could not launch account management URL: {error}");
error!("Could not launch OAuth 2.0 account management URL: {error}");
}
}
}

Loading…
Cancel
Save