From edb2c73150c786126c63c96cee7dae5e1c10b6df Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Sat, 4 Jan 2020 06:39:30 +0000 Subject: Refator using le utils --- web/controllers/acme.go | 4 +- web/controllers/ddns.go | 4 +- web/controllers/reflect_ip.go | 4 +- web/utils.go | 117 ------------------------------------------ 4 files changed, 6 insertions(+), 123 deletions(-) delete mode 100644 web/utils.go (limited to 'web') diff --git a/web/controllers/acme.go b/web/controllers/acme.go index f40b2ec..5090b70 100644 --- a/web/controllers/acme.go +++ b/web/controllers/acme.go @@ -10,7 +10,7 @@ import ( "github.com/gin-gonic/gin" "code.crute.me/mcrute/go_ddns_manager/dns" - "code.crute.me/mcrute/go_ddns_manager/web" + "code.crute.me/mcrute/go_ddns_manager/util" "code.crute.me/mcrute/go_ddns_manager/web/middleware" ) @@ -103,7 +103,7 @@ func CreateAcmeChallenge(c *gin.Context) { return } - url := web.MakeURL(c.Request, "/acme/%s", AcmeChallengeID{ + url := util.MakeURL(c.Request, "/acme/%s", AcmeChallengeID{ Zone: zone.Name, Prefix: prefix, Challenge: ch.Challenge, diff --git a/web/controllers/ddns.go b/web/controllers/ddns.go index 7300989..692b59f 100644 --- a/web/controllers/ddns.go +++ b/web/controllers/ddns.go @@ -7,7 +7,7 @@ import ( "github.com/gin-gonic/gin" "code.crute.me/mcrute/go_ddns_manager/dns" - "code.crute.me/mcrute/go_ddns_manager/web" + "code.crute.me/mcrute/go_ddns_manager/util" "code.crute.me/mcrute/go_ddns_manager/web/middleware" ) @@ -28,7 +28,7 @@ func UpdateDynamicDNS(c *gin.Context) { return } - inip := web.GetRequestIP(c) + inip := util.GetRequestIP(c) if inip == nil { log.Println("ddns: Unable to parse IP") c.AbortWithStatus(http.StatusInternalServerError) diff --git a/web/controllers/reflect_ip.go b/web/controllers/reflect_ip.go index d04b98c..199d736 100644 --- a/web/controllers/reflect_ip.go +++ b/web/controllers/reflect_ip.go @@ -5,11 +5,11 @@ import ( "github.com/gin-gonic/gin" - "code.crute.me/mcrute/go_ddns_manager/web" + "code.crute.me/mcrute/go_ddns_manager/util" ) func ReflectIP(c *gin.Context) { - ip := web.GetRequestIP(c) + ip := util.GetRequestIP(c) if ip == nil { c.String(http.StatusInternalServerError, "") return diff --git a/web/utils.go b/web/utils.go deleted file mode 100644 index 5467132..0000000 --- a/web/utils.go +++ /dev/null @@ -1,117 +0,0 @@ -package web - -import ( - "context" - "fmt" - "log" - "net" - "net/http" - "net/url" - "os" - "os/signal" - "regexp" - - "github.com/gin-gonic/gin" -) - -// Parses an IPv4 or IPv6 address with an optional port on the end. Returns -// match groups for the addresses. The first match is the IPv6 address and the -// second the IPv4 address. -var ipRegexp = regexp.MustCompile(`(?:\[([0-9a-f:]+)\]|(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}))(?::\d+)?`) - -// TODO: use from a common package -func ParseIP(s string) net.IP { - ips := ipRegexp.FindStringSubmatch(s) - if ips == nil { - return nil - } - - if v6, v4 := ips[1], ips[2]; v6 != "" { - return net.ParseIP(v6) - } else { - return net.ParseIP(v4) - } -} - -// TODO: use from a common package -func GetRequestIP(c *gin.Context) net.IP { - if xff := c.Request.Header.Get("X-Forwarded-For"); xff != "" { - return ParseIP(xff) - } - return ParseIP(c.Request.RemoteAddr) -} - -// TODO: use from a common package -func MakeURL(r *http.Request, path string, subs ...interface{}) *url.URL { - scheme := "https" - if r.TLS == nil { - scheme = "http" - } - - // Always defer to whatever the proxy told us it was doing because this - // could be a mullet-VIP in either direction. - if fwProto := r.Header.Get("X-Forwarded-Proto"); fwProto != "" { - scheme = fwProto - } - - return &url.URL{ - Scheme: scheme, - Host: r.Host, - Path: fmt.Sprintf(path, subs...), - } -} - -// TODO: use from a common package -// Copied from: https://github.com/gin-gonic/gin/blob/59ab588bf597f9f41faee4f217b5659893c2e925/utils.go#L137 -func resolveAddress(addr []string) string { - switch len(addr) { - case 0: - if port := os.Getenv("PORT"); port != "" { - log.Printf("Environment variable PORT=\"%s\"", port) - return ":" + port - } - log.Printf("Environment variable PORT is undefined. Using port :8080 by default") - return ":8080" - case 1: - return addr[0] - default: - panic("too many parameters") - } -} - -// TODO: use from a common package -// Runs a gin.Engine instance in a way that can be canceled by an SIGINT -func GinRun(e *gin.Engine, debug bool, a ...string) { - if debug { - gin.SetMode(gin.DebugMode) - } else { - gin.SetMode(gin.ReleaseMode) - } - - srv := &http.Server{ - Addr: resolveAddress(a), - Handler: e, - } - - idleConnsClosed := make(chan struct{}) - - go func() { - sigint := make(chan os.Signal, 1) - signal.Notify(sigint, os.Interrupt) - <-sigint - - log.Println("Caught SIGINT, shutting down") - if err := srv.Shutdown(context.Background()); err != nil { - log.Printf("HTTP server Shutdown: %v", err) - } - - close(idleConnsClosed) - }() - - log.Printf("Listening and serving HTTP on %s\n", srv.Addr) - if err := srv.ListenAndServe(); err != http.ErrServerClosed { - log.Fatalf("HTTP server ListenAndServe: %v", err) - } - - <-idleConnsClosed -} -- cgit v1.2.3