diff --git a/README.md b/README.md index af529524b..6db40868d 100644 --- a/README.md +++ b/README.md @@ -58,6 +58,7 @@ log: access_level: "debug" error_log: "stderr" # stderr: output to console, or define log path like "log/error_log" error_level: "error" + hide_token: true stat: engine: "memory" # support memory, redis or boltdb diff --git a/config/config.go b/config/config.go index d28e61627..c3f768fea 100644 --- a/config/config.go +++ b/config/config.go @@ -57,6 +57,7 @@ type SectionLog struct { AccessLevel string `yaml:"access_level"` ErrorLog string `yaml:"error_log"` ErrorLevel string `yaml:"error_level"` + HideToken bool `yaml:"hide_token"` } // SectionStat is sub seciont of config. @@ -115,6 +116,7 @@ func BuildDefaultPushConf() ConfYaml { conf.Log.AccessLevel = "debug" conf.Log.ErrorLog = "stderr" conf.Log.ErrorLevel = "error" + conf.Log.HideToken = true conf.Stat.Engine = "memory" conf.Stat.Redis.Addr = "localhost:6379" diff --git a/config/config.yml b/config/config.yml index 5fb855850..0d4fe6a01 100644 --- a/config/config.yml +++ b/config/config.yml @@ -30,6 +30,7 @@ log: access_level: "debug" error_log: "stderr" error_level: "error" + hide_token: true stat: engine: "memory" diff --git a/gorush/log.go b/gorush/log.go index 42486f941..6f6601a6f 100644 --- a/gorush/log.go +++ b/gorush/log.go @@ -7,7 +7,7 @@ import ( "github.com/Sirupsen/logrus" "github.com/gin-gonic/gin" "os" - // "time" + "strings" ) var ( @@ -181,6 +181,24 @@ func typeForPlatForm(platform int) string { } } +func hideToken(token string, markLen int) string { + if len(token) == 0 { + return "" + } + + if len(token) < markLen*2 { + return strings.Repeat("*", len(token)) + } + + start := token[len(token)-markLen:] + end := token[0:markLen] + + result := strings.Replace(token, start, strings.Repeat("*", markLen), -1) + result = strings.Replace(result, end, strings.Repeat("*", markLen), -1) + + return result +} + // LogPush record user push request and server response. func LogPush(status, token string, req PushNotification, errPush error) { var plat, platColor, output string @@ -193,6 +211,10 @@ func LogPush(status, token string, req PushNotification, errPush error) { errMsg = errPush.Error() } + if PushConf.Log.HideToken == true { + token = hideToken(token, 10) + } + log := &LogPushEntry{ Type: status, Platform: plat, diff --git a/gorush/log_test.go b/gorush/log_test.go index abbb6989b..e63723117 100644 --- a/gorush/log_test.go +++ b/gorush/log_test.go @@ -88,3 +88,9 @@ func TestPlatFormColor(t *testing.T) { assert.Equal(t, yellow, colorForPlatForm(PlatFormAndroid)) assert.Equal(t, reset, colorForPlatForm(1000000)) } + +func TestHideToken(t *testing.T) { + assert.Equal(t, "", hideToken("", 2)) + assert.Equal(t, "**345678**", hideToken("1234567890", 2)) + assert.Equal(t, "*****", hideToken("12345", 10)) +}