summaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
Diffstat (limited to 'util')
-rw-r--r--util/file.go19
-rw-r--r--util/gin.go72
-rw-r--r--util/http.go26
-rw-r--r--util/ip.go32
-rw-r--r--util/viper.go36
5 files changed, 0 insertions, 185 deletions
diff --git a/util/file.go b/util/file.go
deleted file mode 100644
index b6fc86f..0000000
--- a/util/file.go
+++ /dev/null
@@ -1,19 +0,0 @@
1package util
2
3import (
4 "io"
5 "io/ioutil"
6)
7
8func WriteReaderToFile(filename string, data io.Reader) error {
9 d, err := ioutil.ReadAll(data)
10 if err != nil {
11 return err
12 }
13
14 if err = ioutil.WriteFile(filename, d, 0644); err != nil {
15 return err
16 }
17
18 return nil
19}
diff --git a/util/gin.go b/util/gin.go
deleted file mode 100644
index 9bba6ee..0000000
--- a/util/gin.go
+++ /dev/null
@@ -1,72 +0,0 @@
1package util
2
3import (
4 "context"
5 "log"
6 "net"
7 "net/http"
8 "os"
9 "os/signal"
10
11 "github.com/gin-gonic/gin"
12)
13
14// Copied from: https://github.com/gin-gonic/gin/blob/59ab588bf597f9f41faee4f217b5659893c2e925/utils.go#L137
15func resolveAddress(addr []string) string {
16 switch len(addr) {
17 case 0:
18 if port := os.Getenv("PORT"); port != "" {
19 log.Printf("Environment variable PORT=\"%s\"", port)
20 return ":" + port
21 }
22 log.Printf("Environment variable PORT is undefined. Using port :8080 by default")
23 return ":8080"
24 case 1:
25 return addr[0]
26 default:
27 panic("too many parameters")
28 }
29}
30
31// Runs a gin.Engine instance in a way that can be canceled by an SIGINT
32func GinRun(e *gin.Engine, debug bool, a ...string) {
33 if debug {
34 gin.SetMode(gin.DebugMode)
35 } else {
36 gin.SetMode(gin.ReleaseMode)
37 }
38
39 srv := &http.Server{
40 Addr: resolveAddress(a),
41 Handler: e,
42 }
43
44 idleConnsClosed := make(chan struct{})
45
46 go func() {
47 sigint := make(chan os.Signal, 1)
48 signal.Notify(sigint, os.Interrupt)
49 <-sigint
50
51 log.Println("Caught SIGINT, shutting down")
52 if err := srv.Shutdown(context.Background()); err != nil {
53 log.Printf("HTTP server Shutdown: %v", err)
54 }
55
56 close(idleConnsClosed)
57 }()
58
59 log.Printf("Listening and serving HTTP on %s\n", srv.Addr)
60 if err := srv.ListenAndServe(); err != http.ErrServerClosed {
61 log.Fatalf("HTTP server ListenAndServe: %v", err)
62 }
63
64 <-idleConnsClosed
65}
66
67func GetRequestIP(c *gin.Context) net.IP {
68 if xff := c.Request.Header.Get("X-Forwarded-For"); xff != "" {
69 return ParseIP(xff)
70 }
71 return ParseIP(c.Request.RemoteAddr)
72}
diff --git a/util/http.go b/util/http.go
deleted file mode 100644
index 31cd94d..0000000
--- a/util/http.go
+++ /dev/null
@@ -1,26 +0,0 @@
1package util
2
3import (
4 "fmt"
5 "net/http"
6 "net/url"
7)
8
9func MakeURL(r *http.Request, path string, subs ...interface{}) *url.URL {
10 scheme := "https"
11 if r.TLS == nil {
12 scheme = "http"
13 }
14
15 // Always defer to whatever the proxy told us it was doing because this
16 // could be a mullet-VIP in either direction.
17 if fwProto := r.Header.Get("X-Forwarded-Proto"); fwProto != "" {
18 scheme = fwProto
19 }
20
21 return &url.URL{
22 Scheme: scheme,
23 Host: r.Host,
24 Path: fmt.Sprintf(path, subs...),
25 }
26}
diff --git a/util/ip.go b/util/ip.go
deleted file mode 100644
index 239973a..0000000
--- a/util/ip.go
+++ /dev/null
@@ -1,32 +0,0 @@
1package util
2
3import (
4 "net"
5 "regexp"
6)
7
8// Matches:
9// - IPv4: 192.168.1.1
10// - IPv4 + Port: 192.168.1.1:2020
11// - IPv6 + Port: [fe80::551f:5aff:49cf:13e4]:2020
12// - IPv6: fe80::551f:5aff:49cf:13e4
13//
14// Return Order: []string{matched, IPv4, IPv6 (port notation), IPv6 (raw notation), Port
15var ipRegexp = regexp.MustCompile(`(?:((?:\d+\.){3}\d+)|\[([^\]]+)\]|([0-9a-f:]+))(?::(\d+))?`)
16
17func ParseIP(s string) net.IP {
18 ips := ipRegexp.FindStringSubmatch(s)
19 if ips == nil {
20 return nil
21 }
22
23 if ips[1] != "" {
24 return net.ParseIP(ips[1])
25 } else if ips[2] != "" {
26 return net.ParseIP(ips[2])
27 } else if ips[3] != "" {
28 return net.ParseIP(ips[3])
29 } else {
30 return nil
31 }
32}
diff --git a/util/viper.go b/util/viper.go
deleted file mode 100644
index 0f08a6c..0000000
--- a/util/viper.go
+++ /dev/null
@@ -1,36 +0,0 @@
1package util
2
3import (
4 "strings"
5
6 "github.com/spf13/cobra"
7 "github.com/spf13/viper"
8)
9
10type ViperWrap struct {
11 cmd *cobra.Command
12}
13
14func WrapViper(cmd *cobra.Command, prefix string) *ViperWrap {
15 viper.SetEnvPrefix(prefix)
16 viper.AutomaticEnv()
17 return &ViperWrap{cmd}
18}
19
20func (v *ViperWrap) bindViper(name, short string, defaultv interface{}, help string) {
21 vname := strings.ReplaceAll(name, "-", "_")
22 viper.BindPFlag(vname, v.cmd.Flags().Lookup(name))
23 viper.SetDefault(vname, defaultv)
24}
25
26func (v *ViperWrap) BindString(name, short, defaultv, help string) *ViperWrap {
27 v.cmd.Flags().StringP(name, short, defaultv, help)
28 v.bindViper(name, short, defaultv, help)
29 return v
30}
31
32func (v *ViperWrap) BindBool(name, short string, defaultv bool, help string) *ViperWrap {
33 v.cmd.Flags().BoolP(name, short, defaultv, help)
34 v.bindViper(name, short, defaultv, help)
35 return v
36}