Skip to content

Commit 499c559

Browse files
GiteaBotlunny
andauthored
Fix allowed user types setting problem (#26200) (#26206)
Backport #26200 by @lunny Fix #25951 Co-authored-by: Lunny Xiao <[email protected]>
1 parent ecfbcce commit 499c559

File tree

2 files changed

+110
-6
lines changed

2 files changed

+110
-6
lines changed

modules/setting/service.go

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -188,15 +188,33 @@ func loadServiceFrom(rootCfg ConfigProvider) {
188188
Service.EnableUserHeatmap = sec.Key("ENABLE_USER_HEATMAP").MustBool(true)
189189
Service.AutoWatchNewRepos = sec.Key("AUTO_WATCH_NEW_REPOS").MustBool(true)
190190
Service.AutoWatchOnChanges = sec.Key("AUTO_WATCH_ON_CHANGES").MustBool(false)
191-
Service.DefaultUserVisibility = sec.Key("DEFAULT_USER_VISIBILITY").In("public", structs.ExtractKeysFromMapString(structs.VisibilityModes))
192-
Service.DefaultUserVisibilityMode = structs.VisibilityModes[Service.DefaultUserVisibility]
193-
Service.AllowedUserVisibilityModes = sec.Key("ALLOWED_USER_VISIBILITY_MODES").Strings(",")
194-
if len(Service.AllowedUserVisibilityModes) != 0 {
191+
modes := sec.Key("ALLOWED_USER_VISIBILITY_MODES").Strings(",")
192+
if len(modes) != 0 {
193+
Service.AllowedUserVisibilityModes = []string{}
195194
Service.AllowedUserVisibilityModesSlice = []bool{false, false, false}
196-
for _, sMode := range Service.AllowedUserVisibilityModes {
197-
Service.AllowedUserVisibilityModesSlice[structs.VisibilityModes[sMode]] = true
195+
for _, sMode := range modes {
196+
if tp, ok := structs.VisibilityModes[sMode]; ok { // remove unsupported modes
197+
Service.AllowedUserVisibilityModes = append(Service.AllowedUserVisibilityModes, sMode)
198+
Service.AllowedUserVisibilityModesSlice[tp] = true
199+
} else {
200+
log.Warn("ALLOWED_USER_VISIBILITY_MODES %s is unsupported", sMode)
201+
}
198202
}
199203
}
204+
205+
if len(Service.AllowedUserVisibilityModes) == 0 {
206+
Service.AllowedUserVisibilityModes = []string{"public", "limited", "private"}
207+
Service.AllowedUserVisibilityModesSlice = []bool{true, true, true}
208+
}
209+
210+
Service.DefaultUserVisibility = sec.Key("DEFAULT_USER_VISIBILITY").String()
211+
if Service.DefaultUserVisibility == "" {
212+
Service.DefaultUserVisibility = Service.AllowedUserVisibilityModes[0]
213+
} else if !Service.AllowedUserVisibilityModesSlice[structs.VisibilityModes[Service.DefaultUserVisibility]] {
214+
log.Warn("DEFAULT_USER_VISIBILITY %s is wrong or not in ALLOWED_USER_VISIBILITY_MODES, using first allowed", Service.DefaultUserVisibility)
215+
Service.DefaultUserVisibility = Service.AllowedUserVisibilityModes[0]
216+
}
217+
Service.DefaultUserVisibilityMode = structs.VisibilityModes[Service.DefaultUserVisibility]
200218
Service.DefaultOrgVisibility = sec.Key("DEFAULT_ORG_VISIBILITY").In("public", structs.ExtractKeysFromMapString(structs.VisibilityModes))
201219
Service.DefaultOrgVisibilityMode = structs.VisibilityModes[Service.DefaultOrgVisibility]
202220
Service.DefaultOrgMemberVisible = sec.Key("DEFAULT_ORG_MEMBER_VISIBLE").MustBool()

modules/setting/service_test.go

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ package setting
66
import (
77
"testing"
88

9+
"code.gitea.io/gitea/modules/structs"
10+
911
"github.com/gobwas/glob"
1012
"github.com/stretchr/testify/assert"
1113
)
@@ -44,3 +46,87 @@ EMAIL_DOMAIN_BLOCKLIST = d3, *.b
4446
assert.True(t, match(Service.EmailDomainBlockList, "foo.b"))
4547
assert.False(t, match(Service.EmailDomainBlockList, "d1"))
4648
}
49+
50+
func TestLoadServiceVisibilityModes(t *testing.T) {
51+
oldService := Service
52+
defer func() {
53+
Service = oldService
54+
}()
55+
56+
kases := map[string]func(){
57+
`
58+
[service]
59+
DEFAULT_USER_VISIBILITY = public
60+
ALLOWED_USER_VISIBILITY_MODES = public,limited,private
61+
`: func() {
62+
assert.Equal(t, "public", Service.DefaultUserVisibility)
63+
assert.Equal(t, structs.VisibleTypePublic, Service.DefaultUserVisibilityMode)
64+
assert.Equal(t, []string{"public", "limited", "private"}, Service.AllowedUserVisibilityModes)
65+
},
66+
`
67+
[service]
68+
DEFAULT_USER_VISIBILITY = public
69+
`: func() {
70+
assert.Equal(t, "public", Service.DefaultUserVisibility)
71+
assert.Equal(t, structs.VisibleTypePublic, Service.DefaultUserVisibilityMode)
72+
assert.Equal(t, []string{"public", "limited", "private"}, Service.AllowedUserVisibilityModes)
73+
},
74+
`
75+
[service]
76+
DEFAULT_USER_VISIBILITY = limited
77+
`: func() {
78+
assert.Equal(t, "limited", Service.DefaultUserVisibility)
79+
assert.Equal(t, structs.VisibleTypeLimited, Service.DefaultUserVisibilityMode)
80+
assert.Equal(t, []string{"public", "limited", "private"}, Service.AllowedUserVisibilityModes)
81+
},
82+
`
83+
[service]
84+
ALLOWED_USER_VISIBILITY_MODES = public,limited,private
85+
`: func() {
86+
assert.Equal(t, "public", Service.DefaultUserVisibility)
87+
assert.Equal(t, structs.VisibleTypePublic, Service.DefaultUserVisibilityMode)
88+
assert.Equal(t, []string{"public", "limited", "private"}, Service.AllowedUserVisibilityModes)
89+
},
90+
`
91+
[service]
92+
DEFAULT_USER_VISIBILITY = public
93+
ALLOWED_USER_VISIBILITY_MODES = limited,private
94+
`: func() {
95+
assert.Equal(t, "limited", Service.DefaultUserVisibility)
96+
assert.Equal(t, structs.VisibleTypeLimited, Service.DefaultUserVisibilityMode)
97+
assert.Equal(t, []string{"limited", "private"}, Service.AllowedUserVisibilityModes)
98+
},
99+
`
100+
[service]
101+
DEFAULT_USER_VISIBILITY = my_type
102+
ALLOWED_USER_VISIBILITY_MODES = limited,private
103+
`: func() {
104+
assert.Equal(t, "limited", Service.DefaultUserVisibility)
105+
assert.Equal(t, structs.VisibleTypeLimited, Service.DefaultUserVisibilityMode)
106+
assert.Equal(t, []string{"limited", "private"}, Service.AllowedUserVisibilityModes)
107+
},
108+
`
109+
[service]
110+
DEFAULT_USER_VISIBILITY = public
111+
ALLOWED_USER_VISIBILITY_MODES = public, limit, privated
112+
`: func() {
113+
assert.Equal(t, "public", Service.DefaultUserVisibility)
114+
assert.Equal(t, structs.VisibleTypePublic, Service.DefaultUserVisibilityMode)
115+
assert.Equal(t, []string{"public"}, Service.AllowedUserVisibilityModes)
116+
},
117+
}
118+
119+
for kase, fun := range kases {
120+
t.Run(kase, func(t *testing.T) {
121+
cfg, err := NewConfigProviderFromData(kase)
122+
assert.NoError(t, err)
123+
loadServiceFrom(cfg)
124+
fun()
125+
// reset
126+
Service.AllowedUserVisibilityModesSlice = []bool{true, true, true}
127+
Service.AllowedUserVisibilityModes = []string{}
128+
Service.DefaultUserVisibility = ""
129+
Service.DefaultUserVisibilityMode = structs.VisibleTypePublic
130+
})
131+
}
132+
}

0 commit comments

Comments
 (0)