Add support for prepending a path to all routes for the server (#484)

* Add support for prepending a path to all routes

* Don't nest if there is no path provided

Co-authored-by: Conrad Ludgate <oon@conradludgate.com>

* Change the default for the path variable

* run cargo-fmt

Co-authored-by: Conrad Ludgate <oon@conradludgate.com>
This commit is contained in:
morguldir 2022-07-26 09:05:34 +02:00 committed by GitHub
parent f946644ceb
commit 0c5e250800
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 24 additions and 9 deletions

View file

@ -57,7 +57,7 @@ async fn teapot() -> impl IntoResponse {
(http::StatusCode::IM_A_TEAPOT, "")
}
pub fn router(postgres: Postgres, settings: Settings) -> Router {
Router::new()
let routes = Router::new()
.route("/", get(handlers::index))
.route("/sync/count", get(handlers::history::count))
.route("/sync/history", get(handlers::history::list))
@ -65,12 +65,19 @@ pub fn router(postgres: Postgres, settings: Settings) -> Router {
.route("/history", post(handlers::history::add))
.route("/user/:username", get(handlers::user::get))
.route("/register", post(handlers::user::register))
.route("/login", post(handlers::user::login))
.fallback(teapot.into_service())
.layer(
ServiceBuilder::new()
.layer(TraceLayer::new_for_http())
.layer(Extension(postgres))
.layer(Extension(settings)),
)
.route("/login", post(handlers::user::login));
let path = settings.path.as_str();
if path.is_empty() {
routes
} else {
Router::new().nest(path, routes)
}
.fallback(teapot.into_service())
.layer(
ServiceBuilder::new()
.layer(TraceLayer::new_for_http())
.layer(Extension(postgres))
.layer(Extension(settings)),
)
}

View file

@ -11,6 +11,7 @@ pub const HISTORY_PAGE_SIZE: i64 = 100;
pub struct Settings {
pub host: String,
pub port: u16,
pub path: String,
pub db_uri: String,
pub open_registration: bool,
pub max_history_length: usize,
@ -35,6 +36,7 @@ impl Settings {
.set_default("port", 8888)?
.set_default("open_registration", false)?
.set_default("max_history_length", 8192)?
.set_default("path", "")?
.add_source(
Environment::with_prefix("atuin")
.prefix_separator("_")

View file

@ -67,6 +67,12 @@ Defaults to `false`.
A valid postgres URI, where the user and history data will be saved to.
### path
A path to prepend to all the routes of the server. Any empty string means that nothing will be prepended.
Defaults to `""`
## Container deployment instructions
You can deploy you own atuin server in a container: