From 41d23c22df853b0bdf35e2d0988c8d4c4281d42f Mon Sep 17 00:00:00 2001 From: Grégoire Duchêne Date: Sun, 19 Jun 2022 13:31:49 +0100 Subject: Move redirection logic to a separate package MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also, add an optional ‘-c’ flag to pass the path to a configuration file that can be used to specify several matching patterns and replacements. --- main.go | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'main.go') diff --git a/main.go b/main.go index aa2ce53..dd7e262 100644 --- a/main.go +++ b/main.go @@ -7,20 +7,24 @@ package main import ( "context" + "encoding/json" "flag" "log" "net/http" "os" "os/signal" "regexp" + "strings" "syscall" "time" "go.awhk.org/core" + "go.awhk.org/go-import-redirect/pkg/redirector" ) var ( addr = flag.String("addr", "localhost:8080", "address to listen on") + cfg = flag.String("c", "", "path to a configuration file") from = flag.String("from", "", "package prefix to remove") to = flag.String("to", "", "repository prefix to add") vcs = flag.String("vcs", "git", "version control system to signal") @@ -32,7 +36,20 @@ func main() { done := make(chan os.Signal, 1) signal.Notify(done, os.Interrupt, syscall.SIGTERM) - srv := http.Server{Handler: &redirector{regexp.MustCompile(*from), *to, *vcs}} + h := &redirector.Redirector{Template: redirector.DefaultTemplate} + if *cfg != "" { + if err := json.NewDecoder(core.Must(os.Open(*cfg))).Decode(&h.Transformers); err != nil { + log.Fatalln(err) + } + } else { + h.Transformers = append(h.Transformers, redirector.Transformer{ + Pattern: &redirector.Pattern{regexp.MustCompile(strings.ReplaceAll(*from, `\\`, `\`))}, + Replacement: *to, + VCS: *vcs, + }) + } + + srv := http.Server{Handler: h} go func() { if err := srv.Serve(core.Must(core.Listen(*addr))); err != nil && err != http.ErrServerClosed { log.Fatalln("server.Serve:", err) -- cgit v1.2.3-70-g09d2