@@ -3,12 +3,13 @@ package router
33import (
44 "encoding/json"
55 "github.com/rs/zerolog/hlog"
6- "github.com/rs/zerolog/log"
76 "net/http"
87 "time"
98
109 "github.com/gorilla/handlers"
1110 "github.com/gorilla/mux"
11+ "github.com/prometheus/client_golang/prometheus/promhttp"
12+ "github.com/rs/zerolog/log"
1213 "github.com/screego/server/auth"
1314 "github.com/screego/server/config"
1415 "github.com/screego/server/ui"
@@ -42,6 +43,10 @@ func Router(conf config.Config, rooms *ws.Rooms, users *auth.Users, version stri
4243 Version : version ,
4344 })
4445 })
46+ if conf .Prometheus {
47+ log .Info ().Msg ("Prometheus enabled" )
48+ router .Methods ("GET" ).Path ("/metrics" ).Handler (basicAuth (promhttp .Handler (), users ))
49+ }
4550
4651 ui .Register (router )
4752
@@ -57,3 +62,19 @@ func accessLogger(r *http.Request, status, size int, dur time.Duration) {
5762 Str ("duration" , dur .String ()).
5863 Msg ("HTTP" )
5964}
65+
66+ func basicAuth (handler http.Handler , users * auth.Users ) http.HandlerFunc {
67+ return func (w http.ResponseWriter , r * http.Request ) {
68+
69+ user , pass , ok := r .BasicAuth ()
70+
71+ if ! ok || ! users .Validate (user , pass ) {
72+ w .Header ().Set ("WWW-Authenticate" , `Basic realm="screego"` )
73+ w .WriteHeader (401 )
74+ _ , _ = w .Write ([]byte ("Unauthorised.\n " ))
75+ return
76+ }
77+
78+ handler .ServeHTTP (w , r )
79+ }
80+ }
0 commit comments