Added get_albums and refactoring to make code more usable and less coupled
Signed-off-by: Louis Vallat <louis@louis-vallat.xyz>
This commit is contained in:
parent
6ef99ec389
commit
c3882de838
61
src/main.rs
61
src/main.rs
@ -1,27 +1,56 @@
|
|||||||
use hyper_tls::HttpsConnector;
|
use hyper_tls::HttpsConnector;
|
||||||
use hyper::{Body, Client, Method, Request};
|
use hyper::{Body, Client, Method, Request, Response, client::HttpConnector, header::{AUTHORIZATION, CONTENT_TYPE, COOKIE, HeaderValue, SET_COOKIE}};
|
||||||
use std::str;
|
use json::{JsonValue, object};
|
||||||
use dotenv::dotenv;
|
use dotenv::dotenv;
|
||||||
|
|
||||||
|
|
||||||
|
async fn body_to_str<'a>(res: Response<Body>) -> String {
|
||||||
|
let body = hyper::body::to_bytes(res).await.unwrap();
|
||||||
|
let body_str = std::str::from_utf8(&body).unwrap().clone();
|
||||||
|
return body_str.to_string();
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn login(client: &Client<HttpsConnector<HttpConnector>>) -> HeaderValue {
|
||||||
|
let login_data = object! {
|
||||||
|
"username": dotenv::var("USERNAME").unwrap(),
|
||||||
|
"password": dotenv::var("PASSWORD").unwrap()
|
||||||
|
};
|
||||||
|
|
||||||
|
let req = Request::builder()
|
||||||
|
.method(Method::POST)
|
||||||
|
.uri(dotenv::var("LYCHEE_ENDPOINT").unwrap() + "/api/Session::login")
|
||||||
|
.header(AUTHORIZATION, dotenv::var("API_KEY").unwrap())
|
||||||
|
.header(CONTENT_TYPE, "application/json")
|
||||||
|
.body(Body::from(login_data.dump()))
|
||||||
|
.expect("error");
|
||||||
|
let res = client.request(req).await.unwrap();
|
||||||
|
let lychee_session = res.headers().get(SET_COOKIE.as_str()).unwrap().clone();
|
||||||
|
assert_eq!(json::parse(body_to_str(res).await.as_str()).unwrap(), true);
|
||||||
|
|
||||||
|
return lychee_session;
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn get_albums(client: &Client<HttpsConnector<HttpConnector>>, lychee_session: HeaderValue) -> JsonValue {
|
||||||
|
let req = Request::builder()
|
||||||
|
.method(Method::POST)
|
||||||
|
.uri(dotenv::var("LYCHEE_ENDPOINT").unwrap() + "/api/Albums::get")
|
||||||
|
.header(COOKIE, lychee_session)
|
||||||
|
.header(AUTHORIZATION, dotenv::var("API_KEY").unwrap())
|
||||||
|
.body(Body::empty())
|
||||||
|
.expect("error");
|
||||||
|
let _res = client.request(req).await.unwrap();
|
||||||
|
return json::parse(body_to_str(_res).await.as_str()).unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
|
async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
|
||||||
dotenv().ok();
|
dotenv().ok();
|
||||||
|
|
||||||
let https = HttpsConnector::new();
|
let https = HttpsConnector::new();
|
||||||
let client = Client::builder().build::<_, hyper::Body>(https);
|
let client = Client::builder().build::<_, hyper::Body>(https);
|
||||||
let req = Request::builder()
|
let lychee_session = login(&client).await;
|
||||||
.method(Method::POST)
|
let albums = get_albums(&client, lychee_session).await;
|
||||||
.uri(dotenv::var("LYCHEE_ENDPOINT").unwrap() + "/api/Session::init")
|
println!("{}", albums["albums"].pretty(4));
|
||||||
.body(Body::empty())
|
|
||||||
.expect("error");
|
|
||||||
let res = client.request(req).await?;
|
|
||||||
|
|
||||||
println!("{}", res.status().as_u16());
|
|
||||||
|
|
||||||
let buf = hyper::body::to_bytes(res).await?;
|
|
||||||
let s = str::from_utf8(&buf).unwrap();
|
|
||||||
println!("{:?}", s);
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user