vw_small

Hardened fork of Vaultwarden (https://github.com/dani-garcia/vaultwarden) with fewer features.
git clone https://git.philomathiclife.com/repos/vw_small
Log | Files | Refs | README

commit bb79396f0e76c9efd5e0d23242c9bddf8d10da2b
parent 5da96d36e6fc8243d394dabca103624c03ea79e1
Author: Daniel GarcĂ­a <dani-garcia@users.noreply.github.com>
Date:   Sun, 25 Sep 2022 19:05:12 +0200

Merge branch 'stefan0xC-catch-404-errors'

Diffstat:
Msrc/api/core/mod.rs | 16++++++++++++++++
Msrc/api/mod.rs | 2++
Msrc/api/web.rs | 15++++++++++++++-
Msrc/main.rs | 2++
4 files changed, 34 insertions(+), 1 deletion(-)

diff --git a/src/api/core/mod.rs b/src/api/core/mod.rs @@ -38,6 +38,7 @@ pub fn routes() -> Vec<Route> { // Move this somewhere else // use rocket::serde::json::Json; +use rocket::Catcher; use rocket::Route; use serde_json::Value; @@ -221,3 +222,18 @@ fn config() -> Json<Value> { }, })) } + +pub fn catchers() -> Vec<Catcher> { + catchers![api_not_found] +} + +#[catch(404)] +fn api_not_found() -> Json<Value> { + Json(json!({ + "error": { + "code": 404, + "reason": "Not Found", + "description": "The requested resource could not be found." + } + })) +} diff --git a/src/api/mod.rs b/src/api/mod.rs @@ -10,6 +10,7 @@ use serde_json::Value; pub use crate::api::{ admin::routes as admin_routes, + core::catchers as core_catchers, core::purge_sends, core::purge_trashed_ciphers, core::routes as core_routes, @@ -19,6 +20,7 @@ pub use crate::api::{ identity::routes as identity_routes, notifications::routes as notifications_routes, notifications::{start_notification_server, Notify, UpdateType}, + web::catchers as web_catchers, web::routes as web_routes, }; use crate::util; diff --git a/src/api/web.rs b/src/api/web.rs @@ -1,7 +1,7 @@ use std::path::{Path, PathBuf}; use rocket::serde::json::Json; -use rocket::{fs::NamedFile, http::ContentType, Route}; +use rocket::{fs::NamedFile, http::ContentType, Catcher, Route}; use serde_json::Value; use crate::{ @@ -21,6 +21,19 @@ pub fn routes() -> Vec<Route> { } } +pub fn catchers() -> Vec<Catcher> { + if CONFIG.web_vault_enabled() { + catchers![not_found] + } else { + catchers![] + } +} + +#[catch(404)] +async fn not_found() -> Cached<Option<NamedFile>> { + Cached::short(NamedFile::open(Path::new(&CONFIG.web_vault_folder()).join("404.html")).await.ok(), false) +} + #[get("/")] async fn web_index() -> Cached<Option<NamedFile>> { Cached::short(NamedFile::open(Path::new(&CONFIG.web_vault_folder()).join("index.html")).await.ok(), false) diff --git a/src/main.rs b/src/main.rs @@ -425,6 +425,8 @@ async fn launch_rocket(pool: db::DbPool, extra_debug: bool) -> Result<(), Error> .mount([basepath, "/identity"].concat(), api::identity_routes()) .mount([basepath, "/icons"].concat(), api::icons_routes()) .mount([basepath, "/notifications"].concat(), api::notifications_routes()) + .register([basepath, "/"].concat(), api::web_catchers()) + .register([basepath, "/api"].concat(), api::core_catchers()) .manage(pool) .manage(api::start_notification_server()) .attach(util::AppHeaders())