mirror of
https://gitlab.com/famedly/conduit.git
synced 2025-07-02 16:38:36 +00:00
use the sha2 of the key and add database migrations
This commit is contained in:
parent
37952c1a19
commit
ca86b1772f
3 changed files with 47 additions and 5 deletions
|
@ -880,6 +880,27 @@ impl KeyValueDatabase {
|
||||||
warn!("Migration: 11 -> 12 finished");
|
warn!("Migration: 11 -> 12 finished");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if services().globals.database_version()? < 13 {
|
||||||
|
// Move old media files to new names
|
||||||
|
for (key, _) in db.mediaid_file.iter() {
|
||||||
|
// we know that this method is deprecated, but we need to use it to migrate the old files
|
||||||
|
// to the new location
|
||||||
|
//
|
||||||
|
// TODO: remove this once we're sure that all users have migrated
|
||||||
|
#[allow(deprecated)]
|
||||||
|
let old_path = services().globals.get_media_file_old(&key);
|
||||||
|
let path = services().globals.get_media_file(&key);
|
||||||
|
// move the file to the new location
|
||||||
|
if old_path.exists() {
|
||||||
|
tokio::fs::rename(&old_path, &path).await?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
services().globals.bump_database_version(13)?;
|
||||||
|
|
||||||
|
warn!("Migration: 12 -> 13 finished");
|
||||||
|
}
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
services().globals.database_version().unwrap(),
|
services().globals.database_version().unwrap(),
|
||||||
latest_database_version
|
latest_database_version
|
||||||
|
|
|
@ -3,6 +3,7 @@ pub use data::Data;
|
||||||
use ruma::{
|
use ruma::{
|
||||||
OwnedDeviceId, OwnedEventId, OwnedRoomId, OwnedServerName, OwnedServerSigningKeyId, OwnedUserId,
|
OwnedDeviceId, OwnedEventId, OwnedRoomId, OwnedServerName, OwnedServerSigningKeyId, OwnedUserId,
|
||||||
};
|
};
|
||||||
|
use sha2::Digest;
|
||||||
|
|
||||||
use crate::api::server_server::FedDest;
|
use crate::api::server_server::FedDest;
|
||||||
|
|
||||||
|
@ -14,14 +15,16 @@ use ruma::{
|
||||||
},
|
},
|
||||||
DeviceId, RoomVersionId, ServerName, UserId,
|
DeviceId, RoomVersionId, ServerName, UserId,
|
||||||
};
|
};
|
||||||
use std::sync::atomic::{self, AtomicBool};
|
|
||||||
use std::{
|
use std::{
|
||||||
collections::{BTreeMap, HashMap},
|
collections::{BTreeMap, HashMap},
|
||||||
fs,
|
fs,
|
||||||
future::Future,
|
future::Future,
|
||||||
net::{IpAddr, SocketAddr},
|
net::{IpAddr, SocketAddr},
|
||||||
path::PathBuf,
|
path::PathBuf,
|
||||||
sync::{Arc, Mutex, RwLock},
|
sync::{
|
||||||
|
atomic::{self, AtomicBool},
|
||||||
|
Arc, Mutex, RwLock,
|
||||||
|
},
|
||||||
time::{Duration, Instant},
|
time::{Duration, Instant},
|
||||||
};
|
};
|
||||||
use tokio::sync::{broadcast, watch::Receiver, Mutex as TokioMutex, Semaphore};
|
use tokio::sync::{broadcast, watch::Receiver, Mutex as TokioMutex, Semaphore};
|
||||||
|
@ -339,6 +342,24 @@ impl Service {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_media_file(&self, key: &[u8]) -> PathBuf {
|
pub fn get_media_file(&self, key: &[u8]) -> PathBuf {
|
||||||
|
let mut r = PathBuf::new();
|
||||||
|
r.push(self.config.database_path.clone());
|
||||||
|
r.push("media");
|
||||||
|
r.push(base64::encode_config(
|
||||||
|
// Using the hash of the key as the filename
|
||||||
|
// This is to prevent the total length of the path from exceeding the maximum length
|
||||||
|
sha2::Sha256::digest(key),
|
||||||
|
base64::URL_SAFE_NO_PAD,
|
||||||
|
));
|
||||||
|
r
|
||||||
|
}
|
||||||
|
|
||||||
|
/// This is the old version of `get_media_file` that uses the key as the filename.
|
||||||
|
///
|
||||||
|
/// This is deprecated and will be removed in a future release.
|
||||||
|
/// Please use `get_media_file` instead.
|
||||||
|
#[deprecated(note = "Use get_media_file instead")]
|
||||||
|
pub fn get_media_file_old(&self, key: &[u8]) -> PathBuf {
|
||||||
let mut r = PathBuf::new();
|
let mut r = PathBuf::new();
|
||||||
r.push(self.config.database_path.clone());
|
r.push(self.config.database_path.clone());
|
||||||
r.push("media");
|
r.push("media");
|
||||||
|
|
|
@ -269,9 +269,9 @@ mod tests {
|
||||||
|
|
||||||
fn search_file_metadata(
|
fn search_file_metadata(
|
||||||
&self,
|
&self,
|
||||||
mxc: String,
|
_mxc: String,
|
||||||
width: u32,
|
_width: u32,
|
||||||
height: u32,
|
_height: u32,
|
||||||
) -> Result<(Option<String>, Option<String>, Vec<u8>)> {
|
) -> Result<(Option<String>, Option<String>, Vec<u8>)> {
|
||||||
todo!()
|
todo!()
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue