summaryrefslogtreecommitdiff
path: root/util/gin.go
diff options
context:
space:
mode:
Diffstat (limited to 'util/gin.go')
-rw-r--r--util/gin.go72
1 files changed, 0 insertions, 72 deletions
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}