Support following the .well-known entries for a username's domain (#209)

This commit is contained in:
Ulyssa 2024-02-28 23:21:31 -08:00 committed by GitHub
parent c5999bffc8
commit 84bc6be822
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 29 additions and 8 deletions

View file

@ -61,6 +61,20 @@ nix profile install "github:ulyssa/iamb"
You can create a basic configuration in `$CONFIG_DIR/iamb/config.json` that looks like: You can create a basic configuration in `$CONFIG_DIR/iamb/config.json` that looks like:
```json
{
"profiles": {
"example.com": {
"user_id": "@user:example.com"
}
}
}
```
If you homeserver is located on a different domain than the server part of the
`user_id` and you don't have a [`/.well-known`][well_known_entry] entry, then
you can explicitly specify the homeserver URL to use:
```json ```json
{ {
"profiles": { "profiles": {
@ -122,6 +136,7 @@ iamb is released under the [Apache License, Version 2.0].
[iamb.chat]: https://iamb.chat [iamb.chat]: https://iamb.chat
[gomuks]: https://github.com/tulir/gomuks [gomuks]: https://github.com/tulir/gomuks
[weechat-matrix]: https://github.com/poljar/weechat-matrix [weechat-matrix]: https://github.com/poljar/weechat-matrix
[well_known_entry]: https://spec.matrix.org/latest/client-server-api/#getwell-knownmatrixclient
[#8]: https://github.com/ulyssa/iamb/issues/8 [#8]: https://github.com/ulyssa/iamb/issues/8
[#14]: https://github.com/ulyssa/iamb/issues/14 [#14]: https://github.com/ulyssa/iamb/issues/14
[#16]: https://github.com/ulyssa/iamb/issues/16 [#16]: https://github.com/ulyssa/iamb/issues/16

View file

@ -505,7 +505,7 @@ pub enum Layout {
#[derive(Clone, Deserialize)] #[derive(Clone, Deserialize)]
pub struct ProfileConfig { pub struct ProfileConfig {
pub user_id: OwnedUserId, pub user_id: OwnedUserId,
pub url: Url, pub url: Option<Url>,
pub settings: Option<Tunables>, pub settings: Option<Tunables>,
pub dirs: Option<Directories>, pub dirs: Option<Directories>,
pub layout: Option<Layout>, pub layout: Option<Layout>,

View file

@ -209,7 +209,7 @@ pub fn mock_settings() -> ApplicationSettings {
profile_name: "test".into(), profile_name: "test".into(),
profile: ProfileConfig { profile: ProfileConfig {
user_id: user_id!("@user:example.com").to_owned(), user_id: user_id!("@user:example.com").to_owned(),
url: Url::parse("https://example.com").unwrap(), url: None,
settings: None, settings: None,
dirs: None, dirs: None,
layout: None, layout: None,

View file

@ -738,15 +738,21 @@ impl ClientWorker {
let req_config = RequestConfig::new().timeout(req_timeout).retry_timeout(req_timeout); let req_config = RequestConfig::new().timeout(req_timeout).retry_timeout(req_timeout);
// Set up the Matrix client for the selected profile. // Set up the Matrix client for the selected profile.
let client = Client::builder() let builder = Client::builder()
.http_client(Arc::new(http)) .http_client(Arc::new(http))
.homeserver_url(account.url.clone())
.sled_store(settings.matrix_dir.as_path(), None) .sled_store(settings.matrix_dir.as_path(), None)
.expect("Failed to setup up sled store for Matrix SDK") .expect("Failed to setup up sled store for Matrix SDK")
.request_config(req_config) .request_config(req_config);
.build()
.await let builder = if let Some(url) = account.url.as_ref() {
.expect("Failed to instantiate Matrix client"); // Use the explicitly specified homeserver.
builder.homeserver_url(url.as_str())
} else {
// Try to discover the homeserver from the user ID.
builder.server_name(account.user_id.server_name())
};
let client = builder.build().await.expect("Failed to instantiate Matrix client");
let mut worker = ClientWorker { let mut worker = ClientWorker {
initialized: false, initialized: false,