Compare commits

..

5 commits

Author SHA1 Message Date
54735fdf06 Merge branch '012-loose-ends' 2022-03-22 01:32:26 -04:00
3aa9b8d3d0 Add a README (#12) 2022-03-22 01:32:05 -04:00
50c36bbcbd Add WTF license (#9) 2022-03-22 01:17:19 -04:00
72062842e7 Panic if password script yields no password (#12)
This would happen, e.g., if the database is locked.
2022-03-22 01:10:21 -04:00
e77b79afae Improve URL handling (#11) 2022-03-22 00:47:02 -04:00
3 changed files with 24 additions and 4 deletions

13
LICENSE Normal file
View file

@ -0,0 +1,13 @@
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
Version 2, December 2004
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long
as the name is changed.
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. You just DO WHAT THE FUCK YOU WANT TO.

5
README.md Normal file
View file

@ -0,0 +1,5 @@
### publicise-rs
_Publicise_ is an application which traverses a Nextcloud folder and creates a public share for each file.
The application was originally devised as a way to share photos with people without Instagram accounts, and as an exploration of Rust.

View file

@ -153,7 +153,8 @@ async fn get_folder_contents(url_tail: &str, config: &Config) -> Result<String,
async fn publicise_it(path: &str, config: &Config) -> Result<bool, Box<dyn std::error::Error>> {
debug!("[publicise_it] Entering function...");
let url = "https://cloud.theadamcooper.com/ocs/v2.php/apps/files_sharing/api/v1/shares";
let base_url = Url::parse(config.paths.root.as_str())?;
let url = base_url.join("ocs/v2.php/apps/files_sharing/api/v1/shares")?;
let method = reqwest::Method::POST;
let client = reqwest::Client::new();
let params = [("path", path), ("shareType", "3")];
@ -225,25 +226,26 @@ async fn traverse(mut result: Multistatus, config: &Config) -> Result<bool, Box<
#[tokio::main]
async fn main() -> std::io::Result<()> {
env_logger::Builder::from_env(Env::default()).init();
println!("Publicise it!\n\n");
let mut config = init().unwrap();
if config.credentials.password == None {
let output = Command::new(&config.credentials.password_script.as_ref().unwrap()).output().unwrap();
if output.stdout.len() == 0 {
panic!("[main] Failed to acquire password from provided script.");
}
config.credentials.password = Some(String::from_utf8(output.stdout).unwrap());
}
debug!("[main] {:?}", &config);
let full_path = &(String::from("/remote.php/dav/files/") + &config.credentials.username + "/" + &config.paths.target);
let folder_contents: String =
get_folder_contents(full_path, &config)
.await
.unwrap();
let result: Multistatus = from_str(&folder_contents).unwrap();
debug!("[main] {:?}", result);
let _ = traverse(result, &config).await.unwrap();
Ok(())
}