aboutsummaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'cmd')
-rw-r--r--cmd/anubis/main.go40
1 files changed, 40 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)
+ })
+}