src

sauce
got clone ssh://anon@src.dalliard.ch/src
log | files | refs

commit 30139a9977e6ba56e9a4086abe68c19cf241ba5f
parent 5d6d295a4898580d6b77f9a57cdcc703c27bca52
author: nathanael <nathanael@dalliard.ch>
date:   Fri, 17 Oct 2025 15:17:43 +0000

s0: remove lnaddr

diffstat:
Ds0/lnaddr/.gitignore | 1-
Ds0/lnaddr/go.mod | 3---
Ds0/lnaddr/main.go | 116-------------------------------------------------------------------------------
Ds0/lnaddr/makefile | 9---------
4 files changed, 0 insertions(+), 129 deletions(-)

diff --git a/s0/lnaddr/.gitignore b/s0/lnaddr/.gitignore @@ -1 +0,0 @@ -lnaddr diff --git a/s0/lnaddr/go.mod b/s0/lnaddr/go.mod @@ -1,3 +0,0 @@ -module lnaddr - -go 1.25.0 diff --git a/s0/lnaddr/main.go b/s0/lnaddr/main.go @@ -1,116 +0,0 @@ -package main - -import ( - "encoding/json" - "fmt" - "log" - "net/http" - "os" - "strings" - "time" -) - -type lnurlResponse struct { - AllowsNostr bool `json:"allowsNostr"` - MinSendable int64 `json:"minSendable"` - MaxSendable int64 `json:"maxSendable"` - Metadata string `json:"metadata"` - NostrPubkey string `json:"nostrPubkey"` - CommentAllowed int `json:"commentAllowed"` - Callback string `json:"callback"` - Tag string `json:"tag"` -} - -var ( - allowedUsers = strings.Split(getEnv("ALLOWED_USERS", "nathanael"), ",") - serverPort = getEnv("SERVER_PORT", "8080") - newHost = getEnv("NEW_HOST", "dalliard.ch") - oldHost = getEnv("OLD_HOST", "coinos.io") -) - -func getEnv(key, fallback string) string { - if value, exists := os.LookupEnv(key); exists { - return value - } - return fallback -} - -var httpClient = &http.Client{ - Timeout: 10 * time.Second, -} - -func fetchOriginal(url string) (*lnurlResponse, error) { - resp, err := httpClient.Get(url) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - var data lnurlResponse - if err := json.NewDecoder(resp.Body).Decode(&data); err != nil { - return nil, err - } - return &data, nil -} - -func rewrite(original *lnurlResponse, oldHost, newHost string) *lnurlResponse { - rewritten := *original - rewritten.Metadata = strings.ReplaceAll(rewritten.Metadata, oldHost, newHost) - return &rewritten -} - -func handler(w http.ResponseWriter, r *http.Request) { - username := strings.TrimPrefix(r.URL.Path, "/.well-known/lnurlp/") - - var allowed bool - for _, user := range allowedUsers { - if username == user { - allowed = true - break - } - } - - if !allowed { - http.Error(w, "username not allowed", http.StatusForbidden) - return - } - - upstreamURL := fmt.Sprintf("https://%s/.well-known/lnurlp/%s", oldHost, username) - - orig, err := fetchOriginal(upstreamURL) - if err != nil { - log.Printf("upstream lnurl fetch failed for %s: %v", username, err) - http.Error(w, "upstream lnurl fetch failed: "+err.Error(), http.StatusBadGateway) - return - } - - modified := rewrite(orig, oldHost, newHost) - w.Header().Set("Content-Type", "application/json") - - enc := json.NewEncoder(w) - enc.SetEscapeHTML(false) - if err := enc.Encode(modified); err != nil { - log.Printf("json encoding error: %v", err) - http.Error(w, "internal server error", http.StatusInternalServerError) - return - } - - log.Printf("successfully processed request for username: %s", username) -} - -func main() { - mux := http.NewServeMux() - mux.HandleFunc("/.well-known/lnurlp/", handler) - - server := &http.Server{ - Addr: ":" + serverPort, - Handler: mux, - ReadTimeout: 10 * time.Second, - WriteTimeout: 10 * time.Second, - } - - log.Printf("starting server on :%s", serverPort) - if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed { - log.Fatalf("server failed: %v", err) - } -} diff --git a/s0/lnaddr/makefile b/s0/lnaddr/makefile @@ -1,9 +0,0 @@ -deploy: build sync - -build: - @CGO_ENABLED=1 go build -ldflags="-linkmode external -extldflags '-static'" - -sync: - @ssh s1 doas rcctl stop lnaddr - @scp lnaddr s1:/usr/local/sbin/lnaddr - @ssh s1 doas rcctl start lnaddr