summaryrefslogtreecommitdiff
path: root/net-im/fractal
diff options
context:
space:
mode:
authorV3n3RiX <venerix@koprulu.sector>2023-12-01 23:01:08 +0000
committerV3n3RiX <venerix@koprulu.sector>2023-12-01 23:01:08 +0000
commitb0632f33a9a34123e027e91c44916235a5cd9494 (patch)
treec5f561876ec5641cc9b198262d4da3c91ef6b120 /net-im/fractal
parentb704a12f55494cd0f6fef2a547cab684dcecd4de (diff)
gentoo auto-resync : 01:12:2023 - 23:01:08
Diffstat (limited to 'net-im/fractal')
-rw-r--r--net-im/fractal/Manifest3
-rw-r--r--net-im/fractal/files/fractal-5-secret-service.patch168
-rw-r--r--net-im/fractal/fractal-5-r1.ebuild (renamed from net-im/fractal/fractal-5.ebuild)5
3 files changed, 175 insertions, 1 deletions
diff --git a/net-im/fractal/Manifest b/net-im/fractal/Manifest
index 2dd80030c3b5..0a6ba49aee47 100644
--- a/net-im/fractal/Manifest
+++ b/net-im/fractal/Manifest
@@ -1,6 +1,7 @@
+AUX fractal-5-secret-service.patch 6627 BLAKE2B 7b25e5ae17429deeafe5737c05b9ddd6bbf70d01d3769bafdf20372009a3820f3ed4407e15bb8059f1373e3a4978605bf49b69b6232631d09eddd4f9669d5fd5 SHA512 25f21fa1b8361471706f1500759042aef0308df36c08adb2f42d7d5e216f700a71f869628ae9e8caa1c3054aee1b598ac9d1f9a53ec79addf690a68c2be21d85
DIST fractal-5-crates.tar.xz 42625036 BLAKE2B c63f3b7b0029d9c0d6519463c233c7f46b4541e3bfd202cc906318342eca49889e848408dc718caa55311066423acbc6c4936e6dfc97939683a9f3b89e678add SHA512 d2cb81a61de4abec67999598750226e7d19d0f0e46bea509f17beb45c04bcef2996c20244d6b28489e3ef91d597d0f973f1b0dad5a501ca0d17d72fdef413af2
DIST fractal-5.tar.bz2 1362630 BLAKE2B 4fb7f638a535ae75c479d84730c5608165fe28c22b228b1ca2a69c340858cedc0fc5833a27d644804b62897f2466869af037a2634921915c5efd060e6e721277 SHA512 d7ed615edb16e30ad932d005298f72cf38b10f3f87c255622b2f8ec7551a8f0fc76bc54bc5e55538e07ff603a01355c7df86e56e63a0cbefa9e43843d9c9c3f7
DIST matrix-authentication-service-357481b52e6dc092178a16b8a7d86df036aac608.gh.tar.gz 1406414 BLAKE2B 6f00cc3c9db792b29911be9efae6dfbd4c5d80d1251953ccad4b4e4e863e18b84db2235636208efc48a8e84b83b3c4b4acfd6630263d178db9aa98e448bedd88 SHA512 b9dfa13f6479a330c0da8529ac2a723df87c044f306a66a5887e70ae2d4089ba8e7cae2d7c59e8cb0c3d7e6076eae6c2072d314dab208565891a4bcbfc511f54
DIST matrix-rust-sdk-8895ce40d13faa79012144c97044990284215758.gh.tar.gz 1677376 BLAKE2B 175062e6782fa9c435c5a9f32ed9e971762a7d387064faa0ffe59407235ea858028a200496d0f3ac2718814f1e5d36a7e5f3fa93c718a345b0ee8ed997442cd6 SHA512 6ed4601ca75d0182797a4036d61d0df6f99689ab7a77638863c697ba52395ca3ef35290c38871d4136e9f4406c8f0c527c57727d808328ec9401276bf024d88d
-EBUILD fractal-5.ebuild 4024 BLAKE2B b598844060500fe3d455f03804a12aa9516bd2dfa718c8f4e7fad1bd21d1e80412b76dffa25353e93eb86960f92cb2eceeeee39a79985e0a3946418572d38558 SHA512 ea59b58af6d7709385e5fe9d834789e4978c71766cc274ed419379e17466573a1736f877d4f54bac615cdfbfc69acb875c0ba7fa1608728ff9a11c62c366315a
+EBUILD fractal-5-r1.ebuild 4142 BLAKE2B f8248c13a0c15b5b765db6d019b5f0514c2f797a38ab0b414f460c8e483baa54d35bd7b7e3c82e2db0dc8c23b7813302854c128e34f029510a173e7ec41e7608 SHA512 e2cc8c443530c07428274c07b9e8905dc5de666ffbde72b0590fd4015c6f0729a9b3a751c24b01897a0dd0d08975845239099e44a9d52a7062d818c716b56212
MISC metadata.xml 332 BLAKE2B 569a289b8162fcaf4ea56281b75c2b61a6cb104779a518ae630c25479836b80741b27b526ba6b15fc7ded67f6857518fcfed6a1070612544ece16d1ce3a10c13 SHA512 f876529939b590a35ab9becc0e33c5c50dc7c1da0b10bda95a7ed8fe483b30141d2b8719b58e5080d6caebaf6d28691b6fa5a9f08f6fdbc5ae5fd131c3c881f0
diff --git a/net-im/fractal/files/fractal-5-secret-service.patch b/net-im/fractal/files/fractal-5-secret-service.patch
new file mode 100644
index 000000000000..99d9554590ab
--- /dev/null
+++ b/net-im/fractal/files/fractal-5-secret-service.patch
@@ -0,0 +1,168 @@
+From 2e867841619efc67e8d221b7d15833520d56f3be Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?K=C3=A9vin=20Commaille?= <zecakeh@tedomum.fr>
+Date: Mon, 27 Nov 2023 13:10:22 +0100
+Subject: [PATCH] secret: Serialize secret as JSON
+
+MessagePack creates issues with Secret Service providers that expect a
+valid string.
+We don't really care about saving a few bytes when storing secrets.
+---
+ src/secret.rs | 80 ++++++++++++++++++++++++---------------------------
+ 1 file changed, 38 insertions(+), 42 deletions(-)
+
+diff --git a/src/secret.rs b/src/secret.rs
+index 1c7a6759f..88f757f5b 100644
+--- a/src/secret.rs
++++ b/src/secret.rs
+@@ -13,14 +13,14 @@ use ruma::{DeviceId, OwnedDeviceId, OwnedUserId, UserId};
+ use serde::{Deserialize, Serialize};
+ use serde_json::error::Error as JsonError;
+ use thiserror::Error;
+-use tracing::{debug, error, warn};
++use tracing::{debug, error, info};
+ use url::Url;
+
+ use crate::{
+ application::AppProfile, gettext_f, prelude::*, spawn_tokio, utils::matrix, APP_ID, PROFILE,
+ };
+
+-pub const CURRENT_VERSION: u8 = 4;
++pub const CURRENT_VERSION: u8 = 5;
+ const SCHEMA_ATTRIBUTE: &str = "xdg:schema";
+
+ static DATA_PATH: Lazy<PathBuf> = Lazy::new(|| {
+@@ -275,21 +275,21 @@ impl StoredSession {
+ };
+ let secret = match item.secret().await {
+ Ok(secret) => {
+- if version == 0 {
+- match Secret::from_utf8(&secret) {
++ if version <= 4 {
++ match rmp_serde::from_slice::<Secret>(&secret) {
+ Ok(secret) => secret,
+ Err(error) => {
+- error!("Could not parse secret in stored session: {error:?}");
++ error!("Could not parse secret in stored session: {error}");
+ return Err(SecretError::Invalid(gettext(
+ "Malformed secret in stored session",
+ )));
+ }
+ }
+ } else {
+- match rmp_serde::from_slice::<Secret>(&secret) {
++ match serde_json::from_slice(&secret) {
+ Ok(secret) => secret,
+ Err(error) => {
+- error!("Could not parse secret in stored session: {error}");
++ error!("Could not parse secret in stored session: {error:?}");
+ return Err(SecretError::Invalid(gettext(
+ "Malformed secret in stored session",
+ )));
+@@ -407,7 +407,7 @@ impl StoredSession {
+
+ let attrs = self.attributes();
+ let attributes = attrs.iter().map(|(k, v)| (*k, v.as_ref())).collect();
+- let secret = rmp_serde::to_vec_named(&self.secret).unwrap();
++ let secret = serde_json::to_string(&self.secret).unwrap();
+
+ keyring
+ .create_item(
+@@ -478,34 +478,30 @@ impl StoredSession {
+ Ok(())
+ }
+
+- /// Migrate this session to version 4.
+- ///
+- /// This implies moving the database under Fractal's directory.
+- pub async fn migrate_to_v4(&mut self, item: Item) {
+- warn!(
+- "Session {} with version {} found for user {}, migrating to version 4…",
+- self.id(),
+- self.version,
+- self.user_id,
+- );
++ /// Migrate this session to the current version.
++ pub async fn apply_migrations(&mut self, item: Item) {
++ if self.version < 4 {
++ info!("Migrating to version 4…");
+
+- let target_path = DATA_PATH.join(self.id());
++ let target_path = DATA_PATH.join(self.id());
+
+- if self.path != target_path {
+- debug!("Moving database to: {}", target_path.to_string_lossy());
++ if self.path != target_path {
++ debug!("Moving database to: {}", target_path.to_string_lossy());
+
+- if let Err(error) = fs::create_dir_all(&target_path) {
+- error!("Failed to create new directory: {error}");
+- }
++ if let Err(error) = fs::create_dir_all(&target_path) {
++ error!("Failed to create new directory: {error}");
++ }
+
+- if let Err(error) = fs::rename(&self.path, &target_path) {
+- error!("Failed to move database: {error}");
+- }
++ if let Err(error) = fs::rename(&self.path, &target_path) {
++ error!("Failed to move database: {error}");
++ }
+
+- self.path = target_path;
++ self.path = target_path;
++ }
+ }
+
+- self.version = 4;
++ info!("Migrating to version 5…");
++ self.version = 5;
+
+ let clone = self.clone();
+ spawn_tokio!(async move {
+@@ -548,14 +544,6 @@ pub struct Secret {
+ pub passphrase: String,
+ }
+
+-impl Secret {
+- /// Converts a vector of bytes to a `Secret`.
+- pub fn from_utf8(slice: &[u8]) -> Result<Self, FromUtf8SecretError> {
+- let s = String::from_utf8(slice.to_owned())?;
+- Ok(serde_json::from_str(&s)?)
+- }
+-}
+-
+ /// Retrieves all sessions stored to the `SecretService`
+ pub async fn restore_sessions() -> Result<Vec<StoredSession>, SecretError> {
+ let keyring = Keyring::new().await?;
+@@ -575,15 +563,23 @@ pub async fn restore_sessions() -> Result<Vec<StoredSession>, SecretError> {
+ Ok(session) => sessions.push(session),
+ Err(SecretError::OldVersion { item, mut session }) => {
+ if session.version == 0 {
+- warn!(
+- "Found old session for {} with sled store, removing…",
++ info!(
++ "Found old session for user {} with sled store, removing…",
+ session.user_id
+ );
+ session.delete(Some(item), true).await;
+- } else if session.version < 4 {
+- session.migrate_to_v4(item).await;
+- sessions.push(session);
++ continue;
+ }
++
++ info!(
++ "Found session {} for user {} with old version {}, applying migrations…",
++ session.id(),
++ session.user_id,
++ session.version,
++ );
++ session.apply_migrations(item).await;
++
++ sessions.push(session);
+ }
+ Err(SecretError::WrongProfile) => {}
+ Err(error) => {
+--
+GitLab
+
diff --git a/net-im/fractal/fractal-5.ebuild b/net-im/fractal/fractal-5-r1.ebuild
index ae658f2b7106..5a675aac42dd 100644
--- a/net-im/fractal/fractal-5.ebuild
+++ b/net-im/fractal/fractal-5-r1.ebuild
@@ -70,6 +70,11 @@ RDEPEND="
# Rust
QA_FLAGS_IGNORED="usr/bin/fractal"
+PATCHES=(
+ # https://gitlab.gnome.org/GNOME/fractal/-/merge_requests/1462
+ "${FILESDIR}/${P}-secret-service.patch"
+)
+
src_configure() {
meson_src_configure
ln -s "${CARGO_HOME}" "${BUILD_DIR}/cargo-home" || die