aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShav Kinderlehrer <[email protected]>2024-04-07 13:35:59 -0400
committerShav Kinderlehrer <[email protected]>2024-04-07 13:35:59 -0400
commit0820a05293b9d09335e13054121028c9764285de (patch)
treeeba29ecb978005b5730865dabb27073cf52135c7
parent407dbdb386315efb2c1af4825659a5429924d0ce (diff)
downloadchela-0820a05293b9d09335e13054121028c9764285de.tar.gz
chela-0820a05293b9d09335e13054121028c9764285de.zip
Add main page redirect
-rw-r--r--Cargo.lock2
-rw-r--r--Cargo.toml2
-rw-r--r--README.md10
-rw-r--r--src/get.rs19
-rw-r--r--src/main.rs13
5 files changed, 31 insertions, 15 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 1beafb7..0a4af45 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -194,7 +194,7 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "chela"
-version = "0.1.0"
+version = "0.2.0"
dependencies = [
"axum",
"color-eyre",
diff --git a/Cargo.toml b/Cargo.toml
index 3358738..7853f0f 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "chela"
-version = "0.1.0"
+version = "0.2.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
diff --git a/README.md b/README.md
index acaf051..ca96920 100644
--- a/README.md
+++ b/README.md
@@ -11,7 +11,7 @@ You can create a redirect by navigating to the `/create` page and filling out th
docker run -d \
-p 3000:3000 \
-e DATABASE_URL=postgres://chela:password@dbhost/postgres?sslmode=disable \
- -e CHELA_HOST=example.com \
+ -e CHELA_HOST=a.com \
secondsmiles/chela
```
@@ -32,7 +32,8 @@ services:
- 3000:3000
environment:
- DATABASE_URL=postgres://chela:password@chela-postgres/postgres?sslmode=disable
- - CHELA_HOST=example.com
+ - CHELA_HOST=a.com
+ - CHELA_MAIN_PAGE_REDIRECT='https://example.com'
depends_on:
- chela-postgres
restart: unless-stopped
@@ -52,6 +53,9 @@ The hostname that Chela should refer to itself as. Defaults to `localhost`.
##### `CHELA_LISTEN_ADDRESS`
The address that Chela should listen on. Defaults to `0.0.0.0`.
+##### `CHELA_MAIN_PAGE_REDIRECT`
+A page that Chela will redirect to when `/` is requested instead of replying with the default homepage.
+
### Manually
#### Build
```bash
@@ -63,7 +67,7 @@ $ cargo build -r
#### Run
```bash
$ export DATABASE_URL=postgres://chela:password@dbhost/postgres?sslmode=disable
-$ export CHELA_HOST=example.com
+$ export CHELA_HOST=a.com
$ export CHELA_LISTEN_ADDRESS=127.0.0.1
$ ./target/release/chela
```
diff --git a/src/get.rs b/src/get.rs
index e5268ff..d96e05f 100644
--- a/src/get.rs
+++ b/src/get.rs
@@ -3,7 +3,7 @@ use std::net::SocketAddr;
use axum::extract::{ConnectInfo, Path};
use axum::http::HeaderMap;
use axum::http::StatusCode;
-use axum::response::{Html, IntoResponse};
+use axum::response::{Html, IntoResponse, Redirect};
use axum::Extension;
use info_utils::prelude::*;
@@ -11,7 +11,11 @@ use info_utils::prelude::*;
use crate::ServerState;
use crate::UrlRow;
-pub async fn index(Extension(state): Extension<ServerState>) -> Html<String> {
+pub async fn index(Extension(state): Extension<ServerState>) -> impl IntoResponse {
+ if let Some(redirect) = state.main_page_redirect {
+ return Redirect::temporary(redirect.as_str()).into_response();
+ }
+
Html(format!(
r#"
<!DOCTYPE html>
@@ -27,6 +31,7 @@ pub async fn index(Extension(state): Extension<ServerState>) -> Html<String> {
"#,
state.host, state.host
))
+ .into_response()
}
/// # Panics
@@ -47,7 +52,7 @@ pub async fn id(
let item: Result<UrlRow, sqlx::Error> =
sqlx::query_as("SELECT * FROM chela.urls WHERE id = $1")
- .bind(use_id)
+ .bind(use_id.clone())
.fetch_one(&state.db_pool)
.await;
if let Ok(it) = item {
@@ -74,11 +79,11 @@ pub async fn id(
)
.into_response();
}
- } else if let Err(err) = item {
- warn!("{}", err);
+ } else {
+ warn!("'{}' not found.", use_id);
return (
- StatusCode::INTERNAL_SERVER_ERROR,
- Html(format!("<pre>Internal error: {err}.</pre>")),
+ StatusCode::NOT_FOUND,
+ Html("<pre>Not found.</pre>".to_string()),
)
.into_response();
}
diff --git a/src/main.rs b/src/main.rs
index 22750a6..ac16eb4 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,5 +1,7 @@
use std::net::SocketAddr;
+use url::Url;
+
use axum::routing::{get, post};
use axum::Router;
@@ -20,6 +22,7 @@ pub struct ServerState {
pub db_pool: Pool<Postgres>,
pub host: String,
pub sqids: Sqids,
+ pub main_page_redirect: Option<Url>,
}
#[derive(Debug, Clone, sqlx::FromRow, PartialEq, Eq)]
@@ -40,9 +43,7 @@ async fn main() -> eyre::Result<()> {
color_eyre::install()?;
let db_pool = init_db().await?;
-
let host = std::env::var("CHELA_HOST").unwrap_or("localhost".to_string());
-
let sqids = Sqids::builder()
.alphabet(
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
@@ -51,10 +52,12 @@ async fn main() -> eyre::Result<()> {
)
.blocklist(["create".to_string()].into())
.build()?;
+ let main_page_redirect = std::env::var("CHELA_MAIN_PAGE_REDIRECT").unwrap_or_default();
let server_state = ServerState {
db_pool,
host,
sqids,
+ main_page_redirect: Url::parse(&main_page_redirect).ok(),
};
let address = std::env::var("CHELA_LISTEN_ADDRESS").unwrap_or("0.0.0.0".to_string());
@@ -74,7 +77,11 @@ async fn main() -> eyre::Result<()> {
async fn init_db() -> eyre::Result<Pool<Postgres>> {
let db_pool = PgPoolOptions::new()
.max_connections(15)
- .connect(std::env::var("DATABASE_URL")?.as_str())
+ .connect(
+ std::env::var("DATABASE_URL")
+ .expect("DATABASE_URL must be set")
+ .as_str(),
+ )
.await?;
log!("Successfully connected to database");