From 5a1ff49fe38451451a55266e86a9e9aedecfb44d Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sun, 19 Feb 2023 15:55:34 +0100 Subject: added api --- server/src/routes/api/mod.rs | 51 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 server/src/routes/api/mod.rs (limited to 'server/src/routes/api/mod.rs') diff --git a/server/src/routes/api/mod.rs b/server/src/routes/api/mod.rs new file mode 100644 index 0000000..5f48873 --- /dev/null +++ b/server/src/routes/api/mod.rs @@ -0,0 +1,51 @@ +pub mod error; + +use std::path::PathBuf; + +use super::ui::account::{login_logic, LoginForm}; +use crate::{ + database::Database, + library::{Library, Node}, + routes::{api::error::ApiResult, ui::account::session::Session}, +}; +use anyhow::Context; +use rocket::{get, http::CookieJar, post, serde::json::Json, State}; +use serde_json::{json, Value}; + +#[get("/api/version")] +pub fn r_api_version() -> &'static str { + "1" +} + +#[post("/api/account/login", data = "")] +pub fn r_api_account_login( + database: &State, + jar: &CookieJar, + data: Json, +) -> ApiResult { + login_logic(jar, database, &data.username, &data.password)?; + Ok(json!({ "ok": true })) +} + +#[get("/api/library/")] +pub fn r_api_library_node( + _sess: Session, + path: PathBuf, + library: &State, +) -> ApiResult { + let node = library + .nested_path(&path) + .context("retrieving library node")?; + + match node.as_ref() { + Node::Directory(d) => Ok(json!({ + "identifier": d.identifier, + "info": d.info, + "children": d.children.iter().map(|c| c.identifier().to_string()).collect::>() + })), + Node::Item(i) => Ok(json!({ + "identifier": i.identifier, + "info": i.info, + })), + } +} -- cgit v1.2.3-70-g09d2