diff --git a/build-compress.sh b/build-compress.sh index c1d32fa..ac7ee1a 100755 --- a/build-compress.sh +++ b/build-compress.sh @@ -11,5 +11,5 @@ do_compress () { #find "$1" \( -type f -name "*.wasm" -o -name "*.css" -o -name "*.js" -o -name "*.mjs" \) -exec zstd -v -f -19 -o {}.zst {} \; } -do_compress challenge/ -do_compress assets/ \ No newline at end of file +do_compress embed/challenge/ +do_compress embed/assets/ \ No newline at end of file diff --git a/build-poison.sh b/build-poison.sh index c1173ad..7de3ee4 100755 --- a/build-poison.sh +++ b/build-poison.sh @@ -6,4 +6,4 @@ set -o pipefail cd "$(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)" -go run ./poison -path ./poison/ \ No newline at end of file +go run ./generate-poison -path ./poison/ \ No newline at end of file diff --git a/challenge/js-pow-sha256/runtime/runtime.wasm b/challenge/js-pow-sha256/runtime/runtime.wasm deleted file mode 100644 index a627793..0000000 Binary files a/challenge/js-pow-sha256/runtime/runtime.wasm and /dev/null differ diff --git a/poison/generator.go b/cmd/generate-poison/main.go similarity index 100% rename from poison/generator.go rename to cmd/generate-poison/main.go diff --git a/cmd/away.go b/cmd/go-away/main.go similarity index 94% rename from cmd/away.go rename to cmd/go-away/main.go index f74dfd2..0dc4a75 100644 --- a/cmd/away.go +++ b/cmd/go-away/main.go @@ -61,6 +61,8 @@ func main() { challengeTemplate := flag.String("challenge-template", "anubis", "name or path of the challenge template to use (anubis, forgejo)") challengeTemplateTheme := flag.String("challenge-template-theme", "", "name of the challenge template theme to use (forgejo => [forgejo-dark, forgejo-light, gitea...])") + packageName := flag.String("package-path", "git.gammaspectra.live/git/go-away/cmd/go-away", "package name to expose in .well-known url path") + flag.Parse() { @@ -93,7 +95,7 @@ func main() { state, err := lib.NewState(p, lib.StateSettings{ Debug: *debug, - PackagePath: "git.gammaspectra.live/git/go-away/cmd", + PackageName: *packageName, ChallengeTemplate: *challengeTemplate, ChallengeTemplateTheme: *challengeTemplateTheme, }) diff --git a/assets/static/anubis/geist.woff2 b/embed/assets/static/anubis/geist.woff2 similarity index 100% rename from assets/static/anubis/geist.woff2 rename to embed/assets/static/anubis/geist.woff2 diff --git a/assets/static/anubis/iosevka-curly.woff2 b/embed/assets/static/anubis/iosevka-curly.woff2 similarity index 100% rename from assets/static/anubis/iosevka-curly.woff2 rename to embed/assets/static/anubis/iosevka-curly.woff2 diff --git a/assets/static/anubis/podkova.woff2 b/embed/assets/static/anubis/podkova.woff2 similarity index 100% rename from assets/static/anubis/podkova.woff2 rename to embed/assets/static/anubis/podkova.woff2 diff --git a/assets/static/anubis/style.css b/embed/assets/static/anubis/style.css similarity index 100% rename from assets/static/anubis/style.css rename to embed/assets/static/anubis/style.css diff --git a/assets/static/logo.png b/embed/assets/static/logo.png similarity index 100% rename from assets/static/logo.png rename to embed/assets/static/logo.png diff --git a/challenge/js-pow-sha256/runtime/runtime.go b/embed/challenge/js-pow-sha256/runtime/runtime.go similarity index 96% rename from challenge/js-pow-sha256/runtime/runtime.go rename to embed/challenge/js-pow-sha256/runtime/runtime.go index 63e0412..2f4ef5a 100644 --- a/challenge/js-pow-sha256/runtime/runtime.go +++ b/embed/challenge/js-pow-sha256/runtime/runtime.go @@ -4,8 +4,8 @@ import ( "crypto/sha256" "crypto/subtle" "encoding/binary" - "git.gammaspectra.live/git/go-away/challenge" - "git.gammaspectra.live/git/go-away/challenge/inline" + "git.gammaspectra.live/git/go-away/lib/challenge" + "git.gammaspectra.live/git/go-away/lib/challenge/inline" "math/bits" "strconv" ) diff --git a/embed/challenge/js-pow-sha256/runtime/runtime.wasm b/embed/challenge/js-pow-sha256/runtime/runtime.wasm new file mode 100644 index 0000000..c30bd4b Binary files /dev/null and b/embed/challenge/js-pow-sha256/runtime/runtime.wasm differ diff --git a/challenge/js-pow-sha256/static/load.mjs b/embed/challenge/js-pow-sha256/static/load.mjs similarity index 100% rename from challenge/js-pow-sha256/static/load.mjs rename to embed/challenge/js-pow-sha256/static/load.mjs diff --git a/embed.go b/embed/embed.go similarity index 92% rename from embed.go rename to embed/embed.go index 959e2d7..4bf457c 100644 --- a/embed.go +++ b/embed/embed.go @@ -1,4 +1,4 @@ -package go_away +package embed import "embed" diff --git a/poison/text_html.br.poison b/embed/poison/text_html.br.poison similarity index 100% rename from poison/text_html.br.poison rename to embed/poison/text_html.br.poison diff --git a/poison/text_html.gzip.poison b/embed/poison/text_html.gzip.poison similarity index 100% rename from poison/text_html.gzip.poison rename to embed/poison/text_html.gzip.poison diff --git a/poison/text_html.zstd.poison b/embed/poison/text_html.zstd.poison similarity index 100% rename from poison/text_html.zstd.poison rename to embed/poison/text_html.zstd.poison diff --git a/templates/challenge-anubis.gohtml b/embed/templates/challenge-anubis.gohtml similarity index 96% rename from templates/challenge-anubis.gohtml rename to embed/templates/challenge-anubis.gohtml index d42d1f4..8bf61d4 100644 --- a/templates/challenge-anubis.gohtml +++ b/embed/templates/challenge-anubis.gohtml @@ -2,7 +2,7 @@
Loading challenge {{ .Challenge }}...
diff --git a/templates/challenge-forgejo.gohtml b/embed/templates/challenge-forgejo.gohtml similarity index 100% rename from templates/challenge-forgejo.gohtml rename to embed/templates/challenge-forgejo.gohtml diff --git a/templates/challenge.mjs b/embed/templates/challenge.mjs similarity index 100% rename from templates/challenge.mjs rename to embed/templates/challenge.mjs diff --git a/challenge/generic.go b/lib/challenge/generic.go similarity index 100% rename from challenge/generic.go rename to lib/challenge/generic.go diff --git a/challenge/inline/hex.go b/lib/challenge/inline/hex.go similarity index 100% rename from challenge/inline/hex.go rename to lib/challenge/inline/hex.go diff --git a/challenge/inline/mime.go b/lib/challenge/inline/mime.go similarity index 100% rename from challenge/inline/mime.go rename to lib/challenge/inline/mime.go diff --git a/challenge/interface.go b/lib/challenge/interface.go similarity index 97% rename from challenge/interface.go rename to lib/challenge/interface.go index f9b0c3d..57bc163 100644 --- a/challenge/interface.go +++ b/lib/challenge/interface.go @@ -2,7 +2,7 @@ package challenge import ( "encoding/json" - "git.gammaspectra.live/git/go-away/challenge/inline" + "git.gammaspectra.live/git/go-away/lib/challenge/inline" ) type MakeChallenge func(in Allocation) (out Allocation) diff --git a/challenge/tinygo.go b/lib/challenge/tinygo.go similarity index 100% rename from challenge/tinygo.go rename to lib/challenge/tinygo.go diff --git a/lib/http.go b/lib/http.go index cfd1de9..188bbf6 100644 --- a/lib/http.go +++ b/lib/http.go @@ -9,7 +9,7 @@ import ( "encoding/hex" "errors" "fmt" - go_away "git.gammaspectra.live/git/go-away" + "git.gammaspectra.live/git/go-away/embed" "git.gammaspectra.live/git/go-away/lib/network" "git.gammaspectra.live/git/go-away/lib/policy" "github.com/google/cel-go/common/types" @@ -43,7 +43,7 @@ func init() { templates = make(map[string]*template.Template) - dir, err := go_away.TemplatesFs.ReadDir("templates") + dir, err := embed.TemplatesFs.ReadDir("templates") if err != nil { panic(err) } @@ -51,7 +51,7 @@ func init() { if e.IsDir() { continue } - data, err := go_away.TemplatesFs.ReadFile(filepath.Join("templates", e.Name())) + data, err := embed.TemplatesFs.ReadFile(filepath.Join("templates", e.Name())) if err != nil { panic(err) } @@ -373,7 +373,7 @@ func (state *State) setupRoutes() error { state.Mux.HandleFunc("/", state.handleRequest) - state.Mux.Handle("GET "+state.UrlPath+"/assets/", http.StripPrefix(state.UrlPath, gzipped.FileServer(gzipped.FS(go_away.AssetsFs)))) + state.Mux.Handle("GET "+state.UrlPath+"/assets/", http.StripPrefix(state.UrlPath, gzipped.FileServer(gzipped.FS(embed.AssetsFs)))) for challengeName, c := range state.Challenges { if c.Static != nil { diff --git a/lib/poison.go b/lib/poison.go index aeedb00..f57be01 100644 --- a/lib/poison.go +++ b/lib/poison.go @@ -1,7 +1,7 @@ package lib import ( - go_away "git.gammaspectra.live/git/go-away" + "git.gammaspectra.live/git/go-away/embed" "io" "path" "slices" @@ -17,7 +17,7 @@ func (state *State) getPoison(mime string, encodings []string) (r io.ReadCloser, } p := path.Join("poison", strings.ReplaceAll(mime, "/", "_")+"."+encoding+".poison") - f, err := go_away.PoisonFs.Open(p) + f, err := embed.PoisonFs.Open(p) if err == nil { return f, encoding } diff --git a/lib/state.go b/lib/state.go index 2902305..a30bfbd 100644 --- a/lib/state.go +++ b/lib/state.go @@ -11,9 +11,9 @@ import ( "encoding/json" "errors" "fmt" - go_away "git.gammaspectra.live/git/go-away" - "git.gammaspectra.live/git/go-away/challenge" - "git.gammaspectra.live/git/go-away/challenge/inline" + "git.gammaspectra.live/git/go-away/embed" + challenge2 "git.gammaspectra.live/git/go-away/lib/challenge" + "git.gammaspectra.live/git/go-away/lib/challenge/inline" "git.gammaspectra.live/git/go-away/lib/condition" "git.gammaspectra.live/git/go-away/lib/policy" "github.com/google/cel-go/cel" @@ -101,7 +101,7 @@ type ChallengeState struct { type StateSettings struct { Debug bool - PackagePath string + PackageName string ChallengeTemplate string ChallengeTemplateTheme string } @@ -114,7 +114,7 @@ func NewState(p policy.Policy, settings StateSettings) (state *State, err error) return http.ErrUseLastResponse }, } - state.UrlPath = "/.well-known/." + state.Settings.PackagePath + state.UrlPath = "/.well-known/." + state.Settings.PackageName state.Backends = make(map[string]http.Handler) @@ -198,7 +198,7 @@ func NewState(p policy.Policy, settings StateSettings) (state *State, err error) } assetPath := c.Path + "/static/" - subFs, err := fs.Sub(go_away.ChallengeFs, fmt.Sprintf("challenge/%s/static", challengeName)) + subFs, err := fs.Sub(embed.ChallengeFs, fmt.Sprintf("challenge/%s/static", challengeName)) if err == nil { c.Static = http.StripPrefix( assetPath, @@ -458,7 +458,7 @@ func NewState(p policy.Policy, settings StateSettings) (state *State, err error) }) case "wasm": - wasmData, err := go_away.ChallengeFs.ReadFile(fmt.Sprintf("challenge/%s/runtime/%s", challengeName, p.Runtime.Asset)) + wasmData, err := embed.ChallengeFs.ReadFile(fmt.Sprintf("challenge/%s/runtime/%s", challengeName, p.Runtime.Asset)) if err != nil { return nil, fmt.Errorf("c %s: could not load runtime: %w", challengeName, err) } @@ -470,7 +470,7 @@ func NewState(p policy.Policy, settings StateSettings) (state *State, err error) c.MakeChallenge = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { err := state.ChallengeMod(challengeName, func(ctx context.Context, mod api.Module) (err error) { - in := challenge.MakeChallengeInput{ + in := challenge2.MakeChallengeInput{ Key: state.GetChallengeKeyForRequest(challengeName, time.Now().UTC().Add(DefaultValidity).Round(DefaultValidity), r), Parameters: p.Parameters, Headers: inline.MIMEHeader(r.Header), @@ -480,7 +480,7 @@ func NewState(p policy.Policy, settings StateSettings) (state *State, err error) return err } - out, err := challenge.MakeChallengeCall(state.WasmContext, mod, in) + out, err := challenge2.MakeChallengeCall(state.WasmContext, mod, in) if err != nil { return err } @@ -502,21 +502,21 @@ func NewState(p policy.Policy, settings StateSettings) (state *State, err error) c.Verify = func(key []byte, result string) (ok bool, err error) { err = state.ChallengeMod(challengeName, func(ctx context.Context, mod api.Module) (err error) { - in := challenge.VerifyChallengeInput{ + in := challenge2.VerifyChallengeInput{ Key: key, Parameters: p.Parameters, Result: []byte(result), } - out, err := challenge.VerifyChallengeCall(state.WasmContext, mod, in) + out, err := challenge2.VerifyChallengeCall(state.WasmContext, mod, in) if err != nil { return err } - if out == challenge.VerifyChallengeOutputError { + if out == challenge2.VerifyChallengeOutputError { return errors.New("error checking challenge") } - ok = out == challenge.VerifyChallengeOutputOK + ok = out == challenge2.VerifyChallengeOutputOK return nil }) if err != nil {