shrupl/src/sharry/mod.rs

73 lines
1.6 KiB
Rust
Raw Normal View History

2025-05-22 17:34:44 +00:00
pub mod api;
2025-05-22 21:07:49 +00:00
use api::{NewShareRequest, NewShareResponse, NotifyShareResponse, URI};
2025-05-22 17:34:44 +00:00
use log::debug;
2025-05-22 21:07:49 +00:00
use ureq::{self, RequestBuilder};
2025-05-22 17:34:44 +00:00
#[derive(Debug)]
2025-05-22 21:07:49 +00:00
pub struct Alias {
uri: URI,
2025-05-22 17:34:44 +00:00
id: String,
}
2025-05-22 21:07:49 +00:00
impl Alias {
pub fn new(uri: URI, id: &str) -> Self {
Self { uri, id: id.into() }
}
fn add_headers<B>(&self, req: RequestBuilder<B>) -> RequestBuilder<B> {
req.header("Sharry-Alias", &self.id)
2025-05-22 17:34:44 +00:00
}
pub fn create_share(
&self,
http: &ureq::Agent,
data: &NewShareRequest,
) -> Result<Share, ureq::Error> {
2025-05-22 21:07:49 +00:00
let endpoint = self.uri.get_endpoint("alias/upload/new");
let res = self
.add_headers(http.post(endpoint))
2025-05-22 17:34:44 +00:00
.send_json(data)?
.body_mut()
.read_json::<NewShareResponse>()?;
2025-05-22 21:07:49 +00:00
debug!("response: {:?}", res);
assert!(res.success);
assert_eq!(res.message, "Share created.");
2025-05-22 17:34:44 +00:00
Ok(Share {
alias: self,
2025-05-22 21:07:49 +00:00
id: res.id,
2025-05-22 17:34:44 +00:00
})
}
}
#[derive(Debug)]
pub struct Share<'t> {
2025-05-22 21:07:49 +00:00
alias: &'t Alias,
2025-05-22 17:34:44 +00:00
id: String,
}
impl<'t> Share<'t> {
pub fn add_file(&self) {}
2025-05-22 21:07:49 +00:00
pub fn notify(&self, http: &ureq::Agent) -> Result<(), ureq::Error> {
let endpoint = self
.alias
.uri
.get_endpoint(&format!("alias/mail/notify/{}", &self.id));
let res = self
.alias
.add_headers(http.post(endpoint))
.send_empty()?
.body_mut()
.read_json::<NotifyShareResponse>()?;
debug!("response: {:?}", res);
Ok(())
}
2025-05-22 17:34:44 +00:00
}