Compare commits

..

No commits in common. "main" and "0.0.5" have entirely different histories.
main ... 0.0.5

3 changed files with 23 additions and 47 deletions

2
Cargo.lock generated
View file

@ -34,7 +34,7 @@ dependencies = [
[[package]] [[package]]
name = "api-backend" name = "api-backend"
version = "0.0.8" version = "0.0.5"
dependencies = [ dependencies = [
"axum", "axum",
"chrono", "chrono",

View file

@ -1,7 +1,7 @@
[package] [package]
authors = ["Neshura"] authors = ["Neshura"]
name = "api-backend" name = "api-backend"
version = "0.0.8" version = "0.0.5"
edition = "2021" edition = "2021"
description = "API Backend For Easier Uploading To Kavita" description = "API Backend For Easier Uploading To Kavita"
license = "GPL-3.0-or-later" license = "GPL-3.0-or-later"

View file

@ -1,6 +1,7 @@
mod logging; mod logging;
use std::collections::HashMap; use std::collections::HashMap;
use std::fmt::format;
use std::path::{Path, PathBuf}; use std::path::{Path, PathBuf};
use axum::body::BodyDataStream; use axum::body::BodyDataStream;
use axum::extract::{Request, State}; use axum::extract::{Request, State};
@ -10,7 +11,8 @@ use axum::routing::post;
use dotenv::{dotenv, var}; use dotenv::{dotenv, var};
use futures::TryStreamExt; use futures::TryStreamExt;
use log::LevelFilter; use log::LevelFilter;
use serde::{Deserialize, Serialize}; use reqwest::{Error, Response};
use serde::Serialize;
use systemd_journal_logger::JournalLog; use systemd_journal_logger::JournalLog;
use tokio::fs::File; use tokio::fs::File;
use tokio::{fs, io}; use tokio::{fs, io};
@ -198,43 +200,29 @@ async fn upload_file(state: &mut App, request: Request) {
///$KAVITA_URL/api/Library/scan-folder ///$KAVITA_URL/api/Library/scan-folder
let client = reqwest::Client::new(); let client = reqwest::Client::new();
let jwt_url = format!("{}/api/Plugin/authenticate?apiKey={}&pluginName=kwm-api", var("KAVITA_URL").expect("KAVITA_URL needs to be set in the .env file"), var("KAVITA_API_KEY").expect("KAVITA_API_KEY needs to be set in the .env file")); let url = format!("{}/api/Library/scan-folder", var("KAVITA_URL").expect("KAVITA_URL needs to be set in the .env file"));
match client.post(jwt_url).send().await { let request_body = LibraryScanBody {
Ok(data) => { directory: file.format,
let auth: PluginAuthResponse = serde_json::from_str(&data.text().await.unwrap()).unwrap(); api_key: var("KAVITA_API_KEY").expect("KAVITA_API_KEY needs to be set in the .env file")
let url = format!("{}/api/Library/scan-folder", var("KAVITA_URL").expect("KAVITA_URL needs to be set in the .env file")); };
let body = serde_json::to_string::<LibraryScanBody>(&request_body).expect("Unable to Parse LibraryScanBody");
let request_body = LibraryScanBody { let res = client
folder_path: file.format, .post(url)
api_key: var("KAVITA_API_KEY").expect("KAVITA_API_KEY needs to be set in the .env file") .body(body)
}; .send()
.await;
let body = serde_json::to_string::<LibraryScanBody>(&request_body).expect("Unable to Parse LibraryScanBody");
match res {
let res = client Ok(_) => {
.post(url) state.log.info("Scan Triggered".to_string());
.header(reqwest::header::AUTHORIZATION, auth.token)
.body(body)
.send()
.await;
match res {
Ok(_) => {
state.log.info("Scan Triggered".to_string());
}
Err(e) => {
state.log.error(format!("Error Triggering Library Scan: {e}"));
}
}
} }
Err(e) => { Err(e) => {
state.log.error(format!("Error Triggering Library Scan: {e}"));
} }
} }
} }
async fn stream_to_file(path: &PathBuf, stream: BodyDataStream) -> Result<(), (StatusCode, String)> async fn stream_to_file(path: &PathBuf, stream: BodyDataStream) -> Result<(), (StatusCode, String)>
@ -261,18 +249,6 @@ async fn stream_to_file(path: &PathBuf, stream: BodyDataStream) -> Result<(), (S
#[derive(Serialize)] #[derive(Serialize)]
#[serde(rename_all="camelCase")] #[serde(rename_all="camelCase")]
struct LibraryScanBody { struct LibraryScanBody {
folder_path: String, directory: String,
api_key: String, api_key: String,
} }
#[derive(Deserialize)]
#[serde(rename_all="camelCase")]
struct PluginAuthResponse {
username: String,
token: String,
refresh_token: String,
api_key: String,
preferences: serde_json::Value,
age_restriction: serde_json::Value,
kavita_version: String
}