Skip to content

Commit d49cb24

Browse files
Add tls and middlewares parameter
- add tls flags to serve over https - add middlewares parameter to support authentication and other middlewares Signed-off-by: Mohamed Abokammer <[email protected]>
1 parent cd42c60 commit d49cb24

File tree

2 files changed

+37
-7
lines changed

2 files changed

+37
-7
lines changed

cmds/admin_server/main.go

+17-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package main
22

33
import (
4+
"crypto/tls"
45
"flag"
56
"fmt"
67
"os"
@@ -20,13 +21,17 @@ var (
2021
flagSet *flag.FlagSet
2122
flagPort *int
2223
flagDBURI *string
24+
flagTLSCert *string
25+
flagTLSKey *string
2326
flagLogLevel *string
2427
)
2528

2629
func initFlags(cmd string) {
2730
flagSet = flag.NewFlagSet(cmd, flag.ContinueOnError)
2831
flagPort = flagSet.Int("port", 8000, "Port to init the admin server on")
2932
flagDBURI = flagSet.String("dbURI", "mongodb://localhost:27017", "Database URI")
33+
flagTLSCert = flagSet.String("tlsCert", "", "Path to the tls cert file")
34+
flagTLSKey = flagSet.String("tlsKey", "", "Path to the tls key file")
3035
flagLogLevel = flagSet.String("logLevel", "debug", "A log level, possible values: debug, info, warning, error, panic, fatal")
3136

3237
}
@@ -72,7 +77,18 @@ func main() {
7277
cancel()
7378
}()
7479

75-
if err := server.Serve(ctx, *flagPort, storage); err != nil {
80+
var tlsConfig *tls.Config
81+
if *flagTLSCert != "" && *flagTLSKey != "" {
82+
cert, err := tls.LoadX509KeyPair(*flagTLSCert, *flagTLSKey)
83+
if err != nil {
84+
exitWithError(err, 1)
85+
}
86+
tlsConfig = &tls.Config{
87+
Certificates: []tls.Certificate{cert},
88+
}
89+
}
90+
91+
if err := server.Serve(ctx, *flagPort, storage, nil, tlsConfig); err != nil {
7692
exitWithError(fmt.Errorf("server err: %w", err), 1)
7793
}
7894
}

cmds/admin_server/server/server.go

+20-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package server
22

33
import (
4+
"crypto/tls"
45
"errors"
56
"fmt"
67
"net/http"
@@ -156,11 +157,16 @@ func (r *RouteHandler) getLogs(c *gin.Context) {
156157
c.JSON(http.StatusOK, toServerResult(result))
157158
}
158159

159-
func initRouter(ctx xcontext.Context, rh RouteHandler) *gin.Engine {
160+
func initRouter(ctx xcontext.Context, rh RouteHandler, middlewares []gin.HandlerFunc) *gin.Engine {
160161

161162
r := gin.New()
162163
r.Use(gin.Logger())
163164

165+
// add the middlewares
166+
for _, hf := range middlewares {
167+
r.Use(hf)
168+
}
169+
164170
r.GET("/status", rh.status)
165171
r.POST("/log", rh.addLog)
166172
r.GET("/log", rh.getLogs)
@@ -171,15 +177,16 @@ func initRouter(ctx xcontext.Context, rh RouteHandler) *gin.Engine {
171177
return r
172178
}
173179

174-
func Serve(ctx xcontext.Context, port int, storage storage.Storage) error {
180+
func Serve(ctx xcontext.Context, port int, storage storage.Storage, middlewares []gin.HandlerFunc, tlsConfig *tls.Config) error {
175181
routeHandler := RouteHandler{
176182
storage: storage,
177183
log: ctx.Logger(),
178184
}
179-
router := initRouter(ctx, routeHandler)
185+
router := initRouter(ctx, routeHandler, middlewares)
180186
server := &http.Server{
181-
Addr: fmt.Sprintf(":%d", port),
182-
Handler: router,
187+
Addr: fmt.Sprintf(":%d", port),
188+
Handler: router,
189+
TLSConfig: tlsConfig,
183190
}
184191

185192
go func() {
@@ -191,7 +198,14 @@ func Serve(ctx xcontext.Context, port int, storage storage.Storage) error {
191198
}
192199
}()
193200

194-
if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
201+
var err error
202+
if tlsConfig != nil {
203+
err = server.ListenAndServeTLS("", "")
204+
} else {
205+
err = server.ListenAndServe()
206+
}
207+
208+
if err != nil && err != http.ErrServerClosed {
195209
return err
196210
}
197211

0 commit comments

Comments
 (0)