cmd/anubis: add --extract-resources flag to extract static assets to the filesystem (#216)

Signed-off-by: Xe Iaso <me@xeiaso.net>
This commit is contained in:
Xe Iaso 2025-04-03 18:24:10 -04:00 committed by GitHub
parent 0bcc0a2429
commit a230a58a1d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 41 additions and 0 deletions

View File

@ -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)
})
}

View File

@ -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