From ea0d3220db995018335c48eb06b9794235ff436b Mon Sep 17 00:00:00 2001
From: MetroWind <chris.corsair@gmail.com>
Date: Sun, 7 Sep 2025 09:42:33 -0700
Subject: Initial commit, mostly just copied from shrt.

---
 README.adoc | 103 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 103 insertions(+)
 create mode 100644 README.adoc

(limited to 'README.adoc')

diff --git a/README.adoc b/README.adoc
new file mode 100644
index 0000000..00ac6ac
--- /dev/null
+++ b/README.adoc
@@ -0,0 +1,103 @@
+= Shrt
+
+A naively simple URL shortener
+
+image::screenshot-0.webp[Screenshot]
+
+image::screenshot-1.webp[Screenshot]
+
+== Installation
+
+Only *NIX systems are supported.
+
+Runtime dependencies:
+
+- cURL
+- OpenSSL
+- SQLite
+
+Build dependencies:
+
+- CMake
+- A C++23 compiler
+
+=== Building from source
+
+1. Clone the repo
+2. Go into the repo directory, and run `cmake -B build`.
+3. Run `cmake --build build -j`.
+4. Pick a data directory where the database will be created.
+5. Copy the `templates` and `statics` directories into the data
+directory.
+6. Copy `build/shrt` into any directory that is in your `$PATH`.
+
+=== Using pre-build binary
+
+1. Download the binary from one of the releases.
+2. Extract the downloaded tarball.
+3. Continue to step 4 in “Building from source”.
+
+=== Arch Linux package
+
+A PKGBUILD is provided in `packages/arch` in this repository.
+
+== Configuartion
+
+By default, shrt looks for a configuration file at `/etc/shrt.yaml`.
+This path can be changed with the `-c` command line option. An example
+configuration file is printed below with comments.
+
+[source,yaml]
+----
+# Specify the data directory you have picked.
+data-dir: "/var/lib/shrt"
+# The listening address. Example: localhost, 0.0.0.0, 127.0.0.1.
+listen-address: localhost
+# The port to listen to. If this is 0, the value of “listen-address”
+# is treated as a path of a UNIX domain socket file.
+listen-port: 8080
+# The client ID of your shrt service. This is given by the OpenID
+# Connect provider.
+client-id: shrt
+# The client secrete of your shrt service. This is given by the OpenID
+# Connect provider.
+client-secret: "abced12345"
+# The initial URL of the OpenID Connect service.
+openid-url-prefix: "https://auth.example.com/"
+# The base URL of your shrt service. This is usually just “https://”
+# followed by your domain name.
+base-url: https://go.mws.rocks
+----
+
+=== Authentication
+
+Shrt relies on an external OpenID Connect service provider for
+authentication. Usually you register your instance of shrt to the
+OpenID Connect provider. The provider will give you an client ID and a
+client secret (in this case your shrt server is the “client” of the
+OpenID Connect service). An OpenID Connect service has a number of
+endpoints, such as user info, tokens, etc. The URLs of those endpoints
+are discover by visiting a URL that is constructed from the URL in the
+configuration option `openid-url-prefix`, followed by
+`.well-known/openid-configuration`. For example, if you set
+`openid-url-prefix` to be `https://auth.example.com/`, the resulting
+URL would be
+
+----
+https://auth.example.com/.well-known/openid-configuration
+----
+
+This method works on KeyCloak, but I have never tested this on other
+OpenID Connect providers.
+
+=== Base URL and shortcuts
+
+For the configuration option `base-url`, usually this is just
+`https://` followed by a domain that you own. Supposed you create a
+shortcut called “search” which points to `https://google.com`, you
+would be able to visit `https://your.domain/search` and be redirected
+to `https://google.com`. However you do not have to use a root URL
+under your domain. If you set `base-url` to
+`https://your.domain/some/path`, your shortcut would be at
+`https://your.domain/some/path/search`. I do not know why anybody
+would want this, but the capability is there.
-- 
cgit v1.2.3-70-g09d2

