feat(clean): cleaning a bit
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
d880059980
commit
becfc84505
@ -1,2 +0,0 @@
|
|||||||
# Resp Common
|
|
||||||
Resp for Response is a extended error management system
|
|
@ -1,2 +0,0 @@
|
|||||||
# Vault Common
|
|
||||||
Contain code that allow to interact with an Hashicorp Vault
|
|
36
webserver/request.go
Normal file
36
webserver/request.go
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
package webserver
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net"
|
||||||
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ipHeaders contain a list of common header used by different app to forward the real client IP.
|
||||||
|
var ipHeaders = []string{"CF-Connecting-IP", "True-Client-IP", "X-Client-IP", "X-Real-IP"}
|
||||||
|
|
||||||
|
// GetClientIP will check a http.Request and retrieve the real client IP.
|
||||||
|
func GetClientIP(r *http.Request) string {
|
||||||
|
for _, ipHeader := range ipHeaders {
|
||||||
|
if ip := r.Header.Get(ipHeader); ip != "" {
|
||||||
|
return ipHeader
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ips := r.Header.Get("X-Forwarded-For"); ips != "" {
|
||||||
|
i := strings.Index(ips, ",")
|
||||||
|
if i == -1 {
|
||||||
|
i = len(ips)
|
||||||
|
}
|
||||||
|
ip := ips[:i]
|
||||||
|
|
||||||
|
return strings.TrimSpace(ip)
|
||||||
|
}
|
||||||
|
|
||||||
|
host, _, err := net.SplitHostPort(r.RemoteAddr)
|
||||||
|
if err != nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
return host
|
||||||
|
}
|
@ -4,13 +4,12 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"git.dev.m-and-m.ovh/mderasse/gocommon/commonctx"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const defaultTimeout = 90 * time.Second
|
const defaultTimeout = 90 * time.Second
|
||||||
@ -28,8 +27,6 @@ type ExecuteServerParams struct {
|
|||||||
// and call the cleanup function.
|
// and call the cleanup function.
|
||||||
func ExecuteServer(ctx context.Context, srv *http.Server, params *ExecuteServerParams) error {
|
func ExecuteServer(ctx context.Context, srv *http.Server, params *ExecuteServerParams) error {
|
||||||
|
|
||||||
log := commonctx.GetLogger(ctx)
|
|
||||||
|
|
||||||
if srv == nil {
|
if srv == nil {
|
||||||
return fmt.Errorf("missing http.server params")
|
return fmt.Errorf("missing http.server params")
|
||||||
}
|
}
|
||||||
@ -42,13 +39,13 @@ func ExecuteServer(ctx context.Context, srv *http.Server, params *ExecuteServerP
|
|||||||
srv.WriteTimeout = defaultTimeout
|
srv.WriteTimeout = defaultTimeout
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Infof("launching webserver on %s", srv.Addr)
|
log.Printf("launching webserver on %s", srv.Addr)
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
if err := srv.ListenAndServe(); !errors.Is(err, http.ErrServerClosed) {
|
if err := srv.ListenAndServe(); !errors.Is(err, http.ErrServerClosed) {
|
||||||
log.WithError(err).Fatalf("HTTP server error: %v", err)
|
log.Panicf("HTTP server error: %v", err)
|
||||||
}
|
}
|
||||||
log.Info("Stopped serving new connections.")
|
log.Printf("Stopped serving new connections.")
|
||||||
}()
|
}()
|
||||||
|
|
||||||
sigChan := make(chan os.Signal, 1)
|
sigChan := make(chan os.Signal, 1)
|
||||||
@ -59,17 +56,17 @@ func ExecuteServer(ctx context.Context, srv *http.Server, params *ExecuteServerP
|
|||||||
defer shutdownRelease()
|
defer shutdownRelease()
|
||||||
|
|
||||||
if err := srv.Shutdown(shutdownCtx); err != nil {
|
if err := srv.Shutdown(shutdownCtx); err != nil {
|
||||||
log.WithError(err).Warnf("HTTP shutdown error: %v", err)
|
log.Panicf("HTTP shutdown error: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if params.Cleanup != nil {
|
if params != nil && params.Cleanup != nil {
|
||||||
if err := params.Cleanup(); err != nil {
|
if err := params.Cleanup(); err != nil {
|
||||||
log.WithError(err).Warnf("Impossible to cleanup correctly after shutdown. error : %v", err)
|
log.Printf("Impossible to cleanup correctly after shutdown. error : %v", err)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Info("Graceful shutdown complete.")
|
log.Print("Graceful shutdown complete.")
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user