forked from NG-SD-Plugins/PowerTools
Fix ID population
This commit is contained in:
parent
be60be71ac
commit
9d452acc28
5 changed files with 48 additions and 4 deletions
2
backend/community_settings_srv/Cargo.lock
generated
2
backend/community_settings_srv/Cargo.lock
generated
|
@ -438,7 +438,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "community_settings_srv"
|
name = "community_settings_srv"
|
||||||
version = "0.1.0"
|
version = "0.1.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"actix-web",
|
"actix-web",
|
||||||
"clap",
|
"clap",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "community_settings_srv"
|
name = "community_settings_srv"
|
||||||
version = "0.1.0"
|
version = "0.1.1"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
|
@ -18,7 +18,7 @@ pub async fn save_setting_handler(
|
||||||
Err(_e) => return Err(std::io::Error::new(std::io::ErrorKind::InvalidData, "too many bytes in payload")),
|
Err(_e) => return Err(std::io::Error::new(std::io::ErrorKind::InvalidData, "too many bytes in payload")),
|
||||||
};
|
};
|
||||||
let next_id = file_util::next_setting_id(&cli.folder);
|
let next_id = file_util::next_setting_id(&cli.folder);
|
||||||
let parsed_data: community_settings_core::v1::Metadata = if super::is_mime_type_ron_capable(&content_type) {
|
let mut parsed_data: community_settings_core::v1::Metadata = if super::is_mime_type_ron_capable(&content_type) {
|
||||||
// Parse as RON
|
// Parse as RON
|
||||||
match ron::de::from_reader(bytes.as_ref()) {
|
match ron::de::from_reader(bytes.as_ref()) {
|
||||||
Ok(x) => x,
|
Ok(x) => x,
|
||||||
|
@ -42,6 +42,8 @@ pub async fn save_setting_handler(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
// Override the ID with the one used by this server
|
||||||
|
parsed_data.id = next_id.to_string();
|
||||||
// TODO validate user and app id
|
// TODO validate user and app id
|
||||||
// Reject blocked users and apps
|
// Reject blocked users and apps
|
||||||
let path_ron = file_util::setting_path_by_id(&cli.folder, next_id, file_util::RON_EXTENSION);
|
let path_ron = file_util::setting_path_by_id(&cli.folder, next_id, file_util::RON_EXTENSION);
|
||||||
|
|
|
@ -101,6 +101,46 @@ fn make_symlinks_absolute_in_dir(root: impl AsRef<Path>, dir: impl AsRef<Path>)
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn sync_ids(root: impl AsRef<Path>) -> std::io::Result<()> {
|
||||||
|
for dir_entry in root.as_ref()
|
||||||
|
.join(SETTING_FOLDER)
|
||||||
|
.join(ID_FOLDER)
|
||||||
|
.read_dir()? {
|
||||||
|
let dir_entry = dir_entry?;
|
||||||
|
let f_path = dir_entry.path();
|
||||||
|
if let Some(ext) = f_path.extension() {
|
||||||
|
let id = f_path.file_stem().map(|os| os.to_string_lossy().to_string()).unwrap();
|
||||||
|
if ext == RON_EXTENSION {
|
||||||
|
let reader = std::io::BufReader::new(std::fs::File::open(&f_path)?);
|
||||||
|
let mut setting: community_settings_core::v1::Metadata = match ron::de::from_reader(reader) {
|
||||||
|
Ok(x) => x,
|
||||||
|
Err(e) => {
|
||||||
|
log::debug!("Error while reading {}: {}", f_path.display(), e);
|
||||||
|
let e_msg = format!("{}", e);
|
||||||
|
return Err(std::io::Error::new(std::io::ErrorKind::InvalidData, e_msg));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
setting.id = id;
|
||||||
|
ron::ser::to_writer(std::fs::File::create(&f_path)?, &setting).unwrap();
|
||||||
|
} else if ext == JSON_EXTENSION {
|
||||||
|
let reader = std::io::BufReader::new(std::fs::File::open(&f_path)?);
|
||||||
|
let mut setting: community_settings_core::v1::Metadata = match serde_json::from_reader(reader) {
|
||||||
|
Ok(x) => x,
|
||||||
|
Err(e) => {
|
||||||
|
log::debug!("Error while reading {}: {}", f_path.display(), e);
|
||||||
|
let e_msg = format!("{}", e);
|
||||||
|
return Err(std::io::Error::new(std::io::ErrorKind::InvalidData, e_msg));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
setting.id = id;
|
||||||
|
serde_json::to_writer(std::fs::File::create(&f_path)?, &setting).unwrap();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
pub fn filename(id: u128, ext: &str) -> String {
|
pub fn filename(id: u128, ext: &str) -> String {
|
||||||
format!("{}.{}", id, ext)
|
format!("{}.{}", id, ext)
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,8 +31,10 @@ async fn main() -> std::io::Result<()> {
|
||||||
|
|
||||||
// fix things
|
// fix things
|
||||||
if args.fix {
|
if args.fix {
|
||||||
log::debug!("Fixing old symlinks");
|
log::info!("Fixing old symlinks");
|
||||||
file_util::fix_symlinks(&args.folder)?;
|
file_util::fix_symlinks(&args.folder)?;
|
||||||
|
log::info!("Resynchronizing file IDs with file name IDs");
|
||||||
|
file_util::sync_ids(&args.folder)?;
|
||||||
return Ok(())
|
return Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue