@@ -28,11 +28,13 @@ type ServerConfig struct {
28
28
RecoverPanic bool
29
29
Profiler bool
30
30
ColorOutput bool
31
+ FilterParams []string
31
32
}
32
33
33
34
var defaultConfig = ServerConfig {
34
35
RecoverPanic : true ,
35
36
ColorOutput : true ,
37
+ FilterParams : []string {"^password$" , "^password_confirm.*$" },
36
38
}
37
39
38
40
// Server represents a web.go server.
@@ -42,9 +44,10 @@ type Server struct {
42
44
Logger * log.Logger
43
45
Env map [string ]interface {}
44
46
//save the listener so it can be closed
45
- l net.Listener
46
- encKey []byte
47
- signKey []byte
47
+ l net.Listener
48
+ encKey []byte
49
+ signKey []byte
50
+ filterParams []* regexp.Regexp
48
51
}
49
52
50
53
func NewServer () * Server {
@@ -70,6 +73,11 @@ func (s *Server) initServer() {
70
73
s .encKey = genKey (s .Config .CookieSecret , "encryption key salt" )
71
74
s .signKey = genKey (s .Config .CookieSecret , "signature key salt" )
72
75
}
76
+
77
+ s .filterParams = make ([]* regexp.Regexp , len (s .Config .FilterParams ))
78
+ for i , f := range s .Config .FilterParams {
79
+ s .filterParams [i ] = regexp .MustCompile (f )
80
+ }
73
81
}
74
82
75
83
type route struct {
@@ -300,27 +308,53 @@ func (s *Server) logRequest(ctx Context, sTime time.Time) {
300
308
301
309
var logEntry bytes.Buffer
302
310
logEntry .WriteString (client )
303
- logEntry .WriteString (" - " + s .ttyGreen (req .Method + " " + requestPath ))
311
+ logEntry .WriteString (" - " + s .ttyGreen () + req .Method + " " + requestPath + s . ttyReset ( ))
304
312
logEntry .WriteString (" - " + duration .String ())
305
313
if len (ctx .Params ) > 0 {
306
- logEntry . WriteString ( " - " + s . ttyWhite ( fmt . Sprintf ( "Params: %v \n " , ctx .Params )) )
314
+ s . logParams ( & logEntry , ctx .Params )
307
315
}
308
316
ctx .Server .Logger .Print (logEntry .String ())
309
317
}
310
318
311
- func (s * Server ) ttyGreen (msg string ) string {
312
- return s .ttyColor (msg , ttyCodes .green )
319
+ func (s * Server ) logParams (logEntry * bytes.Buffer , params map [string ]string ) {
320
+ logEntry .WriteString (" - " )
321
+ logEntry .WriteString (s .ttyWhite ())
322
+ logEntry .WriteString ("Params: {" )
323
+ i := 0
324
+ for k , v := range params {
325
+ out := v
326
+ for _ , r := range s .filterParams {
327
+ if r .MatchString (k ) {
328
+ out = "[filtered]"
329
+ }
330
+ }
331
+ fmt .Fprintf (logEntry , "%q: %q" , k , out )
332
+ i += 1
333
+ if i < len (params ) {
334
+ logEntry .WriteString (", " )
335
+ }
336
+ }
337
+ logEntry .WriteString ("}" )
338
+ logEntry .WriteString (s .ttyReset ())
339
+ }
340
+
341
+ func (s * Server ) ttyGreen () string {
342
+ return s .ttyColor (ttyCodes .green )
343
+ }
344
+
345
+ func (s * Server ) ttyWhite () string {
346
+ return s .ttyColor (ttyCodes .white )
313
347
}
314
348
315
- func (s * Server ) ttyWhite ( msg string ) string {
316
- return s .ttyColor (msg , ttyCodes .white )
349
+ func (s * Server ) ttyReset ( ) string {
350
+ return s .ttyColor (ttyCodes .reset )
317
351
}
318
352
319
- func (s * Server ) ttyColor (msg string , colorCode string ) string {
353
+ func (s * Server ) ttyColor (code string ) string {
320
354
if s .Config .ColorOutput {
321
- return colorCode + msg + ttyCodes . reset
355
+ return code
322
356
} else {
323
- return msg
357
+ return ""
324
358
}
325
359
}
326
360
0 commit comments