11// Copyright 2014 The Gogs Authors. All rights reserved.
2+ // Copyright 2019 The Gitea Authors. All rights reserved.
23// Use of this source code is governed by a MIT-style
34// license that can be found in the LICENSE file.
45
56package admin
67
78import (
89 "fmt"
10+ "net/url"
911 "os"
1012 "runtime"
1113 "strings"
@@ -19,6 +21,7 @@ import (
1921 "code.gitea.io/gitea/modules/context"
2022 "code.gitea.io/gitea/modules/cron"
2123 "code.gitea.io/gitea/modules/git"
24+ "code.gitea.io/gitea/modules/log"
2225 "code.gitea.io/gitea/modules/process"
2326 "code.gitea.io/gitea/modules/setting"
2427)
@@ -202,6 +205,63 @@ func SendTestMail(ctx *context.Context) {
202205 ctx .Redirect (setting .AppSubURL + "/admin/config" )
203206}
204207
208+ func shadownPasswordKV (cfgItem , splitter string ) string {
209+ fields := strings .Split (cfgItem , splitter )
210+ for i := 0 ; i < len (fields ); i ++ {
211+ if strings .HasPrefix (fields [i ], "password=" ) {
212+ fields [i ] = "password=******"
213+ break
214+ }
215+ }
216+ return strings .Join (fields , splitter )
217+ }
218+
219+ func shadownURL (provider , cfgItem string ) string {
220+ u , err := url .Parse (cfgItem )
221+ if err != nil {
222+ log .Error ("shodowPassword %v failed: %v" , provider , err )
223+ return cfgItem
224+ }
225+ if u .User != nil {
226+ atIdx := strings .Index (cfgItem , "@" )
227+ if atIdx > 0 {
228+ colonIdx := strings .LastIndex (cfgItem [:atIdx ], ":" )
229+ if colonIdx > 0 {
230+ return cfgItem [:colonIdx + 1 ] + "******" + cfgItem [atIdx :]
231+ }
232+ }
233+ }
234+ return cfgItem
235+ }
236+
237+ func shadowPassword (provider , cfgItem string ) string {
238+ switch provider {
239+ case "redis" :
240+ return shadownPasswordKV (cfgItem , "," )
241+ case "mysql" :
242+ //root:@tcp(localhost:3306)/macaron?charset=utf8
243+ atIdx := strings .Index (cfgItem , "@" )
244+ if atIdx > 0 {
245+ colonIdx := strings .Index (cfgItem [:atIdx ], ":" )
246+ if colonIdx > 0 {
247+ return cfgItem [:colonIdx + 1 ] + "******" + cfgItem [atIdx :]
248+ }
249+ }
250+ return cfgItem
251+ case "postgres" :
252+ // user=jiahuachen dbname=macaron port=5432 sslmode=disable
253+ if ! strings .HasPrefix (cfgItem , "postgres://" ) {
254+ return shadownPasswordKV (cfgItem , " " )
255+ }
256+
257+ // postgres://pqgotest:password@localhost/pqgotest?sslmode=verify-full
258+ // Notice: use shadwonURL
259+ }
260+
261+ // "couchbase"
262+ return shadownURL (provider , cfgItem )
263+ }
264+
205265// Config show admin config page
206266func Config (ctx * context.Context ) {
207267 ctx .Data ["Title" ] = ctx .Tr ("admin.config" )
@@ -239,10 +299,14 @@ func Config(ctx *context.Context) {
239299
240300 ctx .Data ["CacheAdapter" ] = setting .CacheService .Adapter
241301 ctx .Data ["CacheInterval" ] = setting .CacheService .Interval
242- ctx .Data ["CacheConn" ] = setting .CacheService .Conn
302+
303+ ctx .Data ["CacheConn" ] = shadowPassword (setting .CacheService .Adapter , setting .CacheService .Conn )
243304 ctx .Data ["CacheItemTTL" ] = setting .CacheService .TTL
244305
245- ctx .Data ["SessionConfig" ] = setting .SessionConfig
306+ sessionCfg := setting .SessionConfig
307+ sessionCfg .ProviderConfig = shadowPassword (sessionCfg .Provider , sessionCfg .ProviderConfig )
308+
309+ ctx .Data ["SessionConfig" ] = sessionCfg
246310
247311 ctx .Data ["DisableGravatar" ] = setting .DisableGravatar
248312 ctx .Data ["EnableFederatedAvatar" ] = setting .EnableFederatedAvatar
0 commit comments