From 1abb7649b930d35d1f5a76fd72856659b1ee8275 Mon Sep 17 00:00:00 2001 From: Anders Betts Date: Wed, 23 Sep 2026 11:36:11 +0200 Subject: web: bokftui in the browser (ttyd + bokfweb login gate); per-user login limit New image bokf-web (Dockerfile target "web", compose service "web" on 127.0.0.1:8790): Caddy routing with forward_auth, the bokfweb login gate (C, authenticates with bokfd's session.open, per-address limit, cookie + terminal handle, one login handed to the TUI via /redeem) and ttyd running bokftui in web mode in an isolated throwaway HOME. TLS stays with the host's reverse proxy. BOKF_WEB=1 blocks every local file and viewer path in the TUI. bokfd's login limiter is now per user name instead of one global counter (5 wrong guesses from anyone locked out everybody), and a full counter table no longer disables it. The cross build and deploy.sh build and ship both images. Co-Authored-By: Claude Opus 5.5 --- clients/ui.h | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'clients/ui.h') diff --git a/clients/ui.h b/clients/ui.h index 0fb533b..c221118 100644 --- a/clients/ui.h +++ b/clients/ui.h @@ -72,6 +72,12 @@ void kr_whole(int64_t ore, char *buf, size_t n); int parse_x_double(const char *s, double *out); void replace_x_into(const char *src, double x, char *dst, size_t cap); void app_refresh_context(struct app *a); +/* Web mode (BOKF_WEB=1, set by the browser-terminal wrapper): the TUI runs + on the web frontend, not on the user's machine, so nothing may read or + write files there or start programs. ui_web_block() shows why and + returns 1 in web mode; callers return early. */ +int ui_web_mode(void); +int ui_web_block(const char *title); int select_org(struct app *a); char *rpc_dry(struct app *a, const char *cmd, const char *args); char *read_file_b64(const char *path); -- cgit v1.3