aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXe Iaso <me@xeiaso.net>2025-04-03 18:24:10 -0400
committerGitHub <noreply@github.com>2025-04-03 18:24:10 -0400
commita230a58a1d6d11d50846c6f788d3c04a42f2c6ce (patch)
tree9aebad76fc9736379e77061c4974454273d9eb6b
parent0bcc0a24295015e121b8820affebda9a5e1b3f18 (diff)
downloadanubis-a230a58a1d6d11d50846c6f788d3c04a42f2c6ce.tar.xz
anubis-a230a58a1d6d11d50846c6f788d3c04a42f2c6ce.zip
cmd/anubis: add --extract-resources flag to extract static assets to the filesystem (#216)
Signed-off-by: Xe Iaso <me@xeiaso.net>
-rw-r--r--cmd/anubis/main.go40
-rw-r--r--docs/docs/CHANGELOG.md1
2 files changed, 41 insertions, 0 deletions
diff --git a/cmd/anubis/main.go b/cmd/anubis/main.go
index 560a261..59adc67 100644
--- a/cmd/anubis/main.go
+++ b/cmd/anubis/main.go
@@ -5,9 +5,11 @@ import (
"context"
"crypto/ed25519"
"crypto/rand"
+ "embed"
"encoding/hex"
"flag"
"fmt"
+ "io/fs"
"log"
"log/slog"
"net"
@@ -16,6 +18,7 @@ import (
"net/url"
"os"
"os/signal"
+ "path/filepath"
"regexp"
"strconv"
"strings"
@@ -28,6 +31,7 @@ import (
libanubis "github.com/TecharoHQ/anubis/lib"
botPolicy "github.com/TecharoHQ/anubis/lib/policy"
"github.com/TecharoHQ/anubis/lib/policy/config"
+ "github.com/TecharoHQ/anubis/web"
"github.com/facebookgo/flagenv"
"github.com/prometheus/client_golang/prometheus/promhttp"
)
@@ -50,6 +54,8 @@ var (
healthcheck = flag.Bool("healthcheck", false, "run a health check against Anubis")
useRemoteAddress = flag.Bool("use-remote-address", false, "read the client's IP address from the network request, useful for debugging and running Anubis on bare metal")
debugBenchmarkJS = flag.Bool("debug-benchmark-js", false, "respond to every request with a challenge for benchmarking hashrate")
+
+ extractResources = flag.String("extract-resources", "", "if set, extract the static resources to the specified folder")
)
func keyFromHex(value string) (ed25519.PrivateKey, error) {
@@ -172,6 +178,14 @@ func main() {
return
}
+ if *extractResources != "" {
+ if err := extractEmbedFS(web.Static, "static", *extractResources); err != nil {
+ log.Fatal(err)
+ }
+ fmt.Printf("Extracted embedded static files to %s\n", *extractResources)
+ return
+ }
+
rp, err := makeReverseProxy(*target)
if err != nil {
log.Fatalf("can't make reverse proxy: %v", err)
@@ -314,3 +328,29 @@ func metricsServer(ctx context.Context, done func()) {
log.Fatal(err)
}
}
+
+func extractEmbedFS(fsys embed.FS, root string, destDir string) error {
+ return fs.WalkDir(fsys, root, func(path string, d fs.DirEntry, err error) error {
+ if err != nil {
+ return err
+ }
+
+ relPath, err := filepath.Rel(root, path)
+ if err != nil {
+ return err
+ }
+
+ destPath := filepath.Join(destDir, relPath)
+
+ if d.IsDir() {
+ return os.MkdirAll(destPath, 0o700)
+ }
+
+ data, err := fs.ReadFile(fsys, path)
+ if err != nil {
+ return err
+ }
+
+ return os.WriteFile(destPath, data, 0o644)
+ })
+}
diff --git a/docs/docs/CHANGELOG.md b/docs/docs/CHANGELOG.md
index 2527946..b22894e 100644
--- a/docs/docs/CHANGELOG.md
+++ b/docs/docs/CHANGELOG.md
@@ -36,6 +36,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Added `zizmor` for GitHub Actions static analysis
- Fixed most `zizmor` findings
- Enabled Dependabot
+- Added an `--extract-resources` flag to extract static resources to a local folder.
## v1.15.1