From 71e1a744c5521e54da333c78802cf5c57f4598db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emysl=20Eric=20Janouch?=
Date: Wed, 9 Jul 2025 21:53:19 +0200 Subject: [PATCH] xP: embed web resources, tame browser caching --- NEWS | 4 +++ README.adoc | 10 ++++---- xP/go.mod | 2 +- xP/xP.go | 74 +++++++++++++++++++++++++++++++++++++++++++++-------- 4 files changed, 73 insertions(+), 17 deletions(-) diff --git a/NEWS b/NEWS index d9699ca..5affcd7 100644 --- a/NEWS +++ b/NEWS @@ -7,6 +7,10 @@ Unreleased * xP: added a network lag indicator to the user interface + * xP: started embedding the necessary web resources, + and making sure that the files have unique paths after change, + so that stale copies are not cached by browsers indefinitely + * Bumped relay protocol version diff --git a/README.adoc b/README.adoc index 495158f..9ff6785 100644 --- a/README.adoc +++ b/README.adoc @@ -136,12 +136,12 @@ The precondition for running 'xC' frontends is enabling its relay interface: /set general.relay_bind = "127.0.0.1:9000" -To build the web server, you'll need to install the Go compiler, and run `make` -from the _xP_ directory. Then start it from the _public_ subdirectory, -and navigate to the adress you gave it as its first argument--in the following -example, that would be http://localhost:8080[]: +To build the web server, install the Go compiler, and run `make` +from the _xP_ directory. Then start the resulting binary, and navigate to +the adress you give it as its first argument--in the following example, +that would be http://localhost:8080[]: - $ ../xP 127.0.0.1:8080 127.0.0.1:9000 + $ ./xP 127.0.0.1:8080 127.0.0.1:9000 For remote use, it's recommended to put 'xP' behind a reverse proxy, with TLS, and some form of HTTP authentication. Pass the external URL of the WebSocket diff --git a/xP/go.mod b/xP/go.mod index dca4d10..b79feff 100644 --- a/xP/go.mod +++ b/xP/go.mod @@ -1,6 +1,6 @@ module janouch.name/xK/xP -go 1.21 +go 1.22 toolchain go1.23.2 diff --git a/xP/xP.go b/xP/xP.go index 188fd5d..7e0c386 100644 --- a/xP/xP.go +++ b/xP/xP.go @@ -1,4 +1,4 @@ -// Copyright (c) 2022, Přemysl Eric Janouch
+// Copyright (c) 2022 - 2025, Přemysl Eric Janouch
// SPDX-License-Identifier: 0BSD package main @@ -6,12 +6,16 @@ package main import ( "bufio" "context" + "crypto/sha1" + "embed" "encoding/binary" + "encoding/hex" "encoding/json" "flag" "fmt" "html/template" "io" + "io/fs" "log" "net" "net/http" @@ -23,7 +27,12 @@ import ( ) var ( - debug = flag.Bool("debug", false, "enable debug output") + debug = flag.Bool("debug", false, "enable debug output") + webRoot = flag.String("webroot", "", "override bundled web resources") + + //go:embed public/* + webResources embed.FS + webResourcesHash string addressBind string addressConnect string @@ -240,21 +249,20 @@ func handleWS(w http.ResponseWriter, r *http.Request) { // ----------------------------------------------------------------------------- -var staticHandler = http.FileServer(http.Dir(".")) - var page = template.Must(template.New("/").Parse(`