diff --git a/Cargo.toml b/Cargo.toml index 4d24841..ac37dbe 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,8 +4,9 @@ version = "0.1.0" edition = "2021" [features] -default = ["rowing-tera"] +default = ["rest", "rowing-tera" ] rowing-tera = ["rocket_dyn_templates", "tera"] +rest = [] [dependencies] rocket = { version = "0.5.0-rc.3", features = ["secrets"]} diff --git a/src/lib.rs b/src/lib.rs index 78160a9..fbc4b0e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3,6 +3,9 @@ pub mod model; #[cfg(feature = "rowing-tera")] pub mod tera; +#[cfg(feature = "rest")] +pub mod rest; + #[cfg(test)] #[macro_export] macro_rules! testdb { diff --git a/src/main.rs b/src/main.rs index e677f93..d78387d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,13 +1,15 @@ use std::str::FromStr; +#[cfg(feature = "rest")] +use rot::rest; #[cfg(feature = "rowing-tera")] use rot::tera; + use sqlx::{pool::PoolOptions, sqlite::SqliteConnectOptions, ConnectOptions}; #[macro_use] extern crate rocket; -#[cfg(feature = "rowing-tera")] #[launch] async fn rocket() -> _ { use sqlx::SqlitePool; @@ -26,5 +28,8 @@ async fn rocket() -> _ { #[cfg(feature = "rowing-tera")] let rocket = tera::config(rocket); + #[cfg(feature = "rest")] + let rocket = rest::config(rocket); + rocket } diff --git a/src/rest/mod.rs b/src/rest/mod.rs new file mode 100644 index 0000000..706a646 --- /dev/null +++ b/src/rest/mod.rs @@ -0,0 +1,59 @@ +use rocket::{ + form::Form, fs::FileServer, http::CookieJar, post, routes, Build, FromForm, Rocket, State, +}; +use serde_json::json; +use sqlx::SqlitePool; + +use crate::model::user::{LoginError, User}; + +#[derive(FromForm)] +struct LoginForm<'r> { + name: &'r str, + password: &'r str, +} + +// curl -X POST localhost:8000/api/login -d "name=rower&password=rower" +#[post("/", data = "")] +async fn login(login: Form>, db: &State) -> String { + match User::login(db, login.name, login.password).await { + Ok(user) => serde_json::to_string(&json!({"status": "success", "user": user})).unwrap(), + Err(LoginError::NoPasswordSet(_)) => { + serde_json::to_string(&json!({"status": "set new pw"})).unwrap() + } + Err(_) => serde_json::to_string(&json!({"status": "wrong"})).unwrap(), + } + + //let user_json: String = format!("{}", json!(user)); + //cookies.add_private(Cookie::new("loggedin_user", user_json)); +} + +pub fn config(rocket: Rocket) -> Rocket { + rocket + .mount("/", FileServer::from("svelte/build").rank(0)) + .mount("/api/login", routes![login]) +} + +//#[cfg(test)] +//mod test { +// use crate::testdb; +// +// use super::start; +// use rocket::http::Status; +// use rocket::local::asynchronous::Client; +// use rocket::uri; +// use sqlx::SqlitePool; +// +// #[sqlx::test] +// fn test_not_logged_in() { +// let pool = testdb!(); +// +// let client = Client::tracked(start(pool)) +// .await +// .expect("valid rocket instance"); +// let response = client.get(uri!(super::index)).dispatch().await; +// +// assert_eq!(response.status(), Status::SeeOther); +// let location = response.headers().get("Location").next().unwrap(); +// assert_eq!(location, "/auth"); +// } +//} diff --git a/rot_app/.eslintignore b/svelte/.eslintignore similarity index 100% rename from rot_app/.eslintignore rename to svelte/.eslintignore diff --git a/rot_app/.eslintrc.cjs b/svelte/.eslintrc.cjs similarity index 100% rename from rot_app/.eslintrc.cjs rename to svelte/.eslintrc.cjs diff --git a/rot_app/.gitignore b/svelte/.gitignore similarity index 100% rename from rot_app/.gitignore rename to svelte/.gitignore diff --git a/rot_app/.npmrc b/svelte/.npmrc similarity index 100% rename from rot_app/.npmrc rename to svelte/.npmrc diff --git a/rot_app/.prettierignore b/svelte/.prettierignore similarity index 100% rename from rot_app/.prettierignore rename to svelte/.prettierignore diff --git a/rot_app/.prettierrc b/svelte/.prettierrc similarity index 100% rename from rot_app/.prettierrc rename to svelte/.prettierrc diff --git a/rot_app/README.md b/svelte/README.md similarity index 100% rename from rot_app/README.md rename to svelte/README.md diff --git a/rot_app/package-lock.json b/svelte/package-lock.json similarity index 100% rename from rot_app/package-lock.json rename to svelte/package-lock.json diff --git a/rot_app/package.json b/svelte/package.json similarity index 100% rename from rot_app/package.json rename to svelte/package.json diff --git a/rot_app/playwright.config.ts b/svelte/playwright.config.ts similarity index 100% rename from rot_app/playwright.config.ts rename to svelte/playwright.config.ts diff --git a/rot_app/postcss.config.js b/svelte/postcss.config.js similarity index 100% rename from rot_app/postcss.config.js rename to svelte/postcss.config.js diff --git a/rot_app/src/+layout.js/.ts b/svelte/src/+layout.js/.ts similarity index 100% rename from rot_app/src/+layout.js/.ts rename to svelte/src/+layout.js/.ts diff --git a/rot_app/src/app.css b/svelte/src/app.css similarity index 100% rename from rot_app/src/app.css rename to svelte/src/app.css diff --git a/rot_app/src/app.d.ts b/svelte/src/app.d.ts similarity index 100% rename from rot_app/src/app.d.ts rename to svelte/src/app.d.ts diff --git a/rot_app/src/app.html b/svelte/src/app.html similarity index 100% rename from rot_app/src/app.html rename to svelte/src/app.html diff --git a/rot_app/src/lib/images/github.svg b/svelte/src/lib/images/github.svg similarity index 100% rename from rot_app/src/lib/images/github.svg rename to svelte/src/lib/images/github.svg diff --git a/rot_app/src/lib/images/svelte-logo.svg b/svelte/src/lib/images/svelte-logo.svg similarity index 100% rename from rot_app/src/lib/images/svelte-logo.svg rename to svelte/src/lib/images/svelte-logo.svg diff --git a/rot_app/src/lib/images/svelte-welcome.png b/svelte/src/lib/images/svelte-welcome.png similarity index 100% rename from rot_app/src/lib/images/svelte-welcome.png rename to svelte/src/lib/images/svelte-welcome.png diff --git a/rot_app/src/lib/images/svelte-welcome.webp b/svelte/src/lib/images/svelte-welcome.webp similarity index 100% rename from rot_app/src/lib/images/svelte-welcome.webp rename to svelte/src/lib/images/svelte-welcome.webp diff --git a/rot_app/src/routes/+layout.svelte b/svelte/src/routes/+layout.svelte similarity index 100% rename from rot_app/src/routes/+layout.svelte rename to svelte/src/routes/+layout.svelte diff --git a/rot_app/src/routes/+page.svelte b/svelte/src/routes/+page.svelte similarity index 100% rename from rot_app/src/routes/+page.svelte rename to svelte/src/routes/+page.svelte diff --git a/rot_app/src/routes/+page.ts b/svelte/src/routes/+page.ts similarity index 100% rename from rot_app/src/routes/+page.ts rename to svelte/src/routes/+page.ts diff --git a/rot_app/src/routes/Counter.svelte b/svelte/src/routes/Counter.svelte similarity index 100% rename from rot_app/src/routes/Counter.svelte rename to svelte/src/routes/Counter.svelte diff --git a/rot_app/src/routes/Header.svelte b/svelte/src/routes/Header.svelte similarity index 100% rename from rot_app/src/routes/Header.svelte rename to svelte/src/routes/Header.svelte diff --git a/rot_app/src/routes/Login.svelte b/svelte/src/routes/Login.svelte similarity index 100% rename from rot_app/src/routes/Login.svelte rename to svelte/src/routes/Login.svelte diff --git a/rot_app/src/routes/about/+page.svelte b/svelte/src/routes/about/+page.svelte similarity index 100% rename from rot_app/src/routes/about/+page.svelte rename to svelte/src/routes/about/+page.svelte diff --git a/rot_app/src/routes/about/+page.ts b/svelte/src/routes/about/+page.ts similarity index 100% rename from rot_app/src/routes/about/+page.ts rename to svelte/src/routes/about/+page.ts diff --git a/rot_app/src/routes/admin/+page.svelte b/svelte/src/routes/admin/+page.svelte similarity index 100% rename from rot_app/src/routes/admin/+page.svelte rename to svelte/src/routes/admin/+page.svelte diff --git a/rot_app/src/routes/admin/+page.ts b/svelte/src/routes/admin/+page.ts similarity index 100% rename from rot_app/src/routes/admin/+page.ts rename to svelte/src/routes/admin/+page.ts diff --git a/rot_app/src/routes/faq/+page.svelte b/svelte/src/routes/faq/+page.svelte similarity index 100% rename from rot_app/src/routes/faq/+page.svelte rename to svelte/src/routes/faq/+page.svelte diff --git a/rot_app/src/routes/faq/+page.ts b/svelte/src/routes/faq/+page.ts similarity index 100% rename from rot_app/src/routes/faq/+page.ts rename to svelte/src/routes/faq/+page.ts diff --git a/rot_app/src/routes/faq/FAQ.svelte b/svelte/src/routes/faq/FAQ.svelte similarity index 100% rename from rot_app/src/routes/faq/FAQ.svelte rename to svelte/src/routes/faq/FAQ.svelte diff --git a/rot_app/src/routes/sverdle/+page.server.ts b/svelte/src/routes/sverdle/+page.server.ts similarity index 100% rename from rot_app/src/routes/sverdle/+page.server.ts rename to svelte/src/routes/sverdle/+page.server.ts diff --git a/rot_app/src/routes/sverdle/+page.svelte b/svelte/src/routes/sverdle/+page.svelte similarity index 100% rename from rot_app/src/routes/sverdle/+page.svelte rename to svelte/src/routes/sverdle/+page.svelte diff --git a/rot_app/src/routes/sverdle/game.test.ts b/svelte/src/routes/sverdle/game.test.ts similarity index 100% rename from rot_app/src/routes/sverdle/game.test.ts rename to svelte/src/routes/sverdle/game.test.ts diff --git a/rot_app/src/routes/sverdle/game.ts b/svelte/src/routes/sverdle/game.ts similarity index 100% rename from rot_app/src/routes/sverdle/game.ts rename to svelte/src/routes/sverdle/game.ts diff --git a/rot_app/src/routes/sverdle/how-to-play/+page.svelte b/svelte/src/routes/sverdle/how-to-play/+page.svelte similarity index 100% rename from rot_app/src/routes/sverdle/how-to-play/+page.svelte rename to svelte/src/routes/sverdle/how-to-play/+page.svelte diff --git a/rot_app/src/routes/sverdle/how-to-play/+page.ts b/svelte/src/routes/sverdle/how-to-play/+page.ts similarity index 100% rename from rot_app/src/routes/sverdle/how-to-play/+page.ts rename to svelte/src/routes/sverdle/how-to-play/+page.ts diff --git a/rot_app/src/routes/sverdle/reduced-motion.ts b/svelte/src/routes/sverdle/reduced-motion.ts similarity index 100% rename from rot_app/src/routes/sverdle/reduced-motion.ts rename to svelte/src/routes/sverdle/reduced-motion.ts diff --git a/rot_app/src/routes/sverdle/words.server.ts b/svelte/src/routes/sverdle/words.server.ts similarity index 100% rename from rot_app/src/routes/sverdle/words.server.ts rename to svelte/src/routes/sverdle/words.server.ts diff --git a/rot_app/src/routes/test/+page.svelte b/svelte/src/routes/test/+page.svelte similarity index 100% rename from rot_app/src/routes/test/+page.svelte rename to svelte/src/routes/test/+page.svelte diff --git a/rot_app/src/routes/test/+page.ts b/svelte/src/routes/test/+page.ts similarity index 100% rename from rot_app/src/routes/test/+page.ts rename to svelte/src/routes/test/+page.ts diff --git a/rot_app/src/stores/User.js b/svelte/src/stores/User.js similarity index 100% rename from rot_app/src/stores/User.js rename to svelte/src/stores/User.js diff --git a/rot_app/static/favicon.ico b/svelte/static/favicon.ico similarity index 100% rename from rot_app/static/favicon.ico rename to svelte/static/favicon.ico diff --git a/rot_app/static/robots.txt b/svelte/static/robots.txt similarity index 100% rename from rot_app/static/robots.txt rename to svelte/static/robots.txt diff --git a/rot_app/svelte.config.js b/svelte/svelte.config.js similarity index 98% rename from rot_app/svelte.config.js rename to svelte/svelte.config.js index feabc04..5d59908 100644 --- a/rot_app/svelte.config.js +++ b/svelte/svelte.config.js @@ -13,8 +13,8 @@ const config = { // See https://kit.svelte.dev/docs/adapters for more information about adapters. adapter: adapter({ fallback: 'app.html', - }) - } + }), + }, }; export default config; diff --git a/rot_app/tailwind.config.js b/svelte/tailwind.config.js similarity index 100% rename from rot_app/tailwind.config.js rename to svelte/tailwind.config.js diff --git a/rot_app/tests/test.ts b/svelte/tests/test.ts similarity index 100% rename from rot_app/tests/test.ts rename to svelte/tests/test.ts diff --git a/rot_app/tsconfig.json b/svelte/tsconfig.json similarity index 100% rename from rot_app/tsconfig.json rename to svelte/tsconfig.json diff --git a/rot_app/vite.config.ts b/svelte/vite.config.ts similarity index 100% rename from rot_app/vite.config.ts rename to svelte/vite.config.ts diff --git a/update.sh b/update.sh index e5668b2..99b8d4b 100755 --- a/update.sh +++ b/update.sh @@ -6,7 +6,7 @@ cd frontend npm install npm run build cd .. -cd rot_app +cd svelte npm install npm run build sudo systemctl restart rot