about summary refs log tree commit diff
path: root/ops/modules/www/self-redirect.nix
diff options
context:
space:
mode:
authorVincent Ambo <mail@tazj.in>2022-02-18T11·32+0300
committertazjin <tazjin@tvl.su>2022-02-18T11·39+0000
commitac6717fe3c5cf5ab6b495092e8dd4565a4242eac (patch)
treec1821ac105febfe6c144420aae2817fa6f21be83 /ops/modules/www/self-redirect.nix
parent5b701ad713072d9910b69396338a816039a810b3 (diff)
fix(ops/modules/www): Make self-redirect to config a generic module r/3849
As suggested by sterni, this makes the self-redirect of a machine to
its configuration a generic module working by convention.

In the process of moving this two small fixes have been applied:

* redirect is only applied if the URI is `/`, this is required for
  ACME to work
* addSSL = true is added, otherwise we have a certificate but no TLS
  listener

Change-Id: Icaef041ff681253a61e36926417bdb2844e3f93d
Reviewed-on: https://cl.tvl.fyi/c/depot/+/5313
Autosubmit: tazjin <tazjin@tvl.su>
Reviewed-by: sterni <sternenseemann@systemli.org>
Tested-by: BuildkiteCI
Diffstat (limited to 'ops/modules/www/self-redirect.nix')
-rw-r--r--ops/modules/www/self-redirect.nix27
1 files changed, 27 insertions, 0 deletions
diff --git a/ops/modules/www/self-redirect.nix b/ops/modules/www/self-redirect.nix
new file mode 100644
index 0000000000..5bf1627be9
--- /dev/null
+++ b/ops/modules/www/self-redirect.nix
@@ -0,0 +1,27 @@
+# Redirect the hostname of a machine to its configuration in a web
+# browser.
+#
+# Works by convention, assuming that the machine has its configuration
+# at //ops/machines/${hostname}.
+{ config, ... }:
+
+let
+  host = "${config.networking.hostName}.${config.networking.domain}";
+in
+{
+  imports = [
+    ./base.nix
+  ];
+
+  config.services.nginx.virtualHosts."${host}" = {
+    serverName = host;
+    addSSL = true; # SSL is not forced on these redirects
+    enableACME = true;
+
+    extraConfig = ''
+      location = / {
+        return 302 https://at.tvl.fyi/?q=%2F%2Fops%2Fmachines%2F${config.networking.hostName};
+      }
+    '';
+  };
+}