Fix Scan Trigger by providing JWT Auth
All checks were successful
Run Tests on Code / run-tests (push) Successful in 15s
All checks were successful
Run Tests on Code / run-tests (push) Successful in 15s
This commit is contained in:
parent
3abca4c124
commit
3e27cad6a8
1 changed files with 44 additions and 20 deletions
64
src/main.rs
64
src/main.rs
|
@ -1,7 +1,6 @@
|
||||||
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};
|
||||||
|
@ -11,8 +10,7 @@ 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 reqwest::{Error, Response};
|
use serde::{Deserialize, Serialize};
|
||||||
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};
|
||||||
|
@ -200,29 +198,43 @@ 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 url = format!("{}/api/Library/scan-folder", var("KAVITA_URL").expect("KAVITA_URL needs to be set in the .env file"));
|
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 request_body = LibraryScanBody {
|
|
||||||
folder_path: file.format,
|
|
||||||
api_key: var("KAVITA_API_KEY").expect("KAVITA_API_KEY needs to be set in the .env file")
|
|
||||||
};
|
|
||||||
|
|
||||||
let body = serde_json::to_string::<LibraryScanBody>(&request_body).expect("Unable to Parse LibraryScanBody");
|
match client.post(jwt_url).send().await {
|
||||||
|
Ok(data) => {
|
||||||
|
let auth: PluginAuthResponse = serde_json::from_str(&data.text().await.unwrap()).unwrap();
|
||||||
|
let url = format!("{}/api/Library/scan-folder", var("KAVITA_URL").expect("KAVITA_URL needs to be set in the .env file"));
|
||||||
|
|
||||||
let res = client
|
let request_body = LibraryScanBody {
|
||||||
.post(url)
|
folder_path: file.format,
|
||||||
.body(body)
|
api_key: var("KAVITA_API_KEY").expect("KAVITA_API_KEY needs to be set in the .env file")
|
||||||
.send()
|
};
|
||||||
.await;
|
|
||||||
|
let body = serde_json::to_string::<LibraryScanBody>(&request_body).expect("Unable to Parse LibraryScanBody");
|
||||||
match res {
|
|
||||||
Ok(_) => {
|
let res = client
|
||||||
state.log.info("Scan Triggered".to_string());
|
.post(url)
|
||||||
|
.bearer_auth(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)>
|
||||||
|
@ -252,3 +264,15 @@ struct LibraryScanBody {
|
||||||
folder_path: String,
|
folder_path: 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
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue