aviary-cli/src/upload.rs

31 lines
986 B
Rust

use std::io::Read;
use ureq::{Agent, AgentBuilder};
const DATA_HEADER: &'static [u8] = b"--FuckLiterallyAllCops\r\nContent-Disposition: form-data; name=\"file\"; filename=\"pigeon.bin\"\r\nContent-Type: application/octet-stream\r\n\r\n";
const DATA_FOOTER: &'static [u8] = b"\r\n--FuckLiterallyAllCops--\r\n";
pub fn get_agent() -> Agent {
AgentBuilder::new()
.max_idle_connections(3)
.redirects(2)
.user_agent("aviary-cli/0.0.1")
.build()
}
pub fn put_data(agent: &Agent, server: &str, data: &[u8]) -> Result<String, ureq::Error> {
Ok(agent.post(server)
.set("Content-Type", "multipart/form-data; boundary=FuckLiterallyAllCops")
.send(DATA_HEADER.chain(data).chain(DATA_FOOTER))?.into_string()?)
}
pub fn get_data<'b>(agent: &Agent, location: &str, size_limit: u64, buffer: &'b mut Vec<u8>) -> Result<&'b mut Vec<u8>, ureq::Error> {
buffer.clear();
agent.get(location)
.call()?
.into_reader()
.take(size_limit)
.read_to_end(buffer)?;
Ok(buffer)
}