gitea源码

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. // Copyright 2023 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package setting
  4. import (
  5. "testing"
  6. "code.gitea.io/gitea/modules/glob"
  7. "code.gitea.io/gitea/modules/structs"
  8. "code.gitea.io/gitea/modules/test"
  9. "github.com/stretchr/testify/assert"
  10. )
  11. func TestLoadServices(t *testing.T) {
  12. defer test.MockVariableValue(&Service)()
  13. cfg, err := NewConfigProviderFromData(`
  14. [service]
  15. EMAIL_DOMAIN_WHITELIST = d1, *.w
  16. EMAIL_DOMAIN_ALLOWLIST = d2, *.a
  17. EMAIL_DOMAIN_BLOCKLIST = d3, *.b
  18. `)
  19. assert.NoError(t, err)
  20. loadServiceFrom(cfg)
  21. match := func(globs []glob.Glob, s string) bool {
  22. for _, g := range globs {
  23. if g.Match(s) {
  24. return true
  25. }
  26. }
  27. return false
  28. }
  29. assert.True(t, match(Service.EmailDomainAllowList, "d1"))
  30. assert.True(t, match(Service.EmailDomainAllowList, "foo.w"))
  31. assert.True(t, match(Service.EmailDomainAllowList, "d2"))
  32. assert.True(t, match(Service.EmailDomainAllowList, "foo.a"))
  33. assert.False(t, match(Service.EmailDomainAllowList, "d3"))
  34. assert.True(t, match(Service.EmailDomainBlockList, "d3"))
  35. assert.True(t, match(Service.EmailDomainBlockList, "foo.b"))
  36. assert.False(t, match(Service.EmailDomainBlockList, "d1"))
  37. }
  38. func TestLoadServiceVisibilityModes(t *testing.T) {
  39. defer test.MockVariableValue(&Service)()
  40. kases := map[string]func(){
  41. `
  42. [service]
  43. DEFAULT_USER_VISIBILITY = public
  44. ALLOWED_USER_VISIBILITY_MODES = public,limited,private
  45. `: func() {
  46. assert.Equal(t, "public", Service.DefaultUserVisibility)
  47. assert.Equal(t, structs.VisibleTypePublic, Service.DefaultUserVisibilityMode)
  48. assert.Equal(t, []string{"public", "limited", "private"}, Service.AllowedUserVisibilityModes)
  49. },
  50. `
  51. [service]
  52. DEFAULT_USER_VISIBILITY = public
  53. `: func() {
  54. assert.Equal(t, "public", Service.DefaultUserVisibility)
  55. assert.Equal(t, structs.VisibleTypePublic, Service.DefaultUserVisibilityMode)
  56. assert.Equal(t, []string{"public", "limited", "private"}, Service.AllowedUserVisibilityModes)
  57. },
  58. `
  59. [service]
  60. DEFAULT_USER_VISIBILITY = limited
  61. `: func() {
  62. assert.Equal(t, "limited", Service.DefaultUserVisibility)
  63. assert.Equal(t, structs.VisibleTypeLimited, Service.DefaultUserVisibilityMode)
  64. assert.Equal(t, []string{"public", "limited", "private"}, Service.AllowedUserVisibilityModes)
  65. },
  66. `
  67. [service]
  68. ALLOWED_USER_VISIBILITY_MODES = public,limited,private
  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 = public
  77. ALLOWED_USER_VISIBILITY_MODES = limited,private
  78. `: func() {
  79. assert.Equal(t, "limited", Service.DefaultUserVisibility)
  80. assert.Equal(t, structs.VisibleTypeLimited, Service.DefaultUserVisibilityMode)
  81. assert.Equal(t, []string{"limited", "private"}, Service.AllowedUserVisibilityModes)
  82. },
  83. `
  84. [service]
  85. DEFAULT_USER_VISIBILITY = my_type
  86. ALLOWED_USER_VISIBILITY_MODES = limited,private
  87. `: func() {
  88. assert.Equal(t, "limited", Service.DefaultUserVisibility)
  89. assert.Equal(t, structs.VisibleTypeLimited, Service.DefaultUserVisibilityMode)
  90. assert.Equal(t, []string{"limited", "private"}, Service.AllowedUserVisibilityModes)
  91. },
  92. `
  93. [service]
  94. DEFAULT_USER_VISIBILITY = public
  95. ALLOWED_USER_VISIBILITY_MODES = public, limit, privated
  96. `: func() {
  97. assert.Equal(t, "public", Service.DefaultUserVisibility)
  98. assert.Equal(t, structs.VisibleTypePublic, Service.DefaultUserVisibilityMode)
  99. assert.Equal(t, []string{"public"}, Service.AllowedUserVisibilityModes)
  100. },
  101. }
  102. for kase, fun := range kases {
  103. t.Run(kase, func(t *testing.T) {
  104. cfg, err := NewConfigProviderFromData(kase)
  105. assert.NoError(t, err)
  106. loadServiceFrom(cfg)
  107. fun()
  108. // reset
  109. Service.AllowedUserVisibilityModesSlice = []bool{true, true, true}
  110. Service.AllowedUserVisibilityModes = []string{}
  111. Service.DefaultUserVisibility = ""
  112. Service.DefaultUserVisibilityMode = structs.VisibleTypePublic
  113. })
  114. }
  115. }
  116. func TestLoadServiceRequireSignInView(t *testing.T) {
  117. defer test.MockVariableValue(&Service)()
  118. cfg, err := NewConfigProviderFromData(`
  119. [service]
  120. `)
  121. assert.NoError(t, err)
  122. loadServiceFrom(cfg)
  123. assert.False(t, Service.RequireSignInViewStrict)
  124. assert.False(t, Service.BlockAnonymousAccessExpensive)
  125. cfg, err = NewConfigProviderFromData(`
  126. [service]
  127. REQUIRE_SIGNIN_VIEW = true
  128. `)
  129. assert.NoError(t, err)
  130. loadServiceFrom(cfg)
  131. assert.True(t, Service.RequireSignInViewStrict)
  132. assert.False(t, Service.BlockAnonymousAccessExpensive)
  133. cfg, err = NewConfigProviderFromData(`
  134. [service]
  135. REQUIRE_SIGNIN_VIEW = expensive
  136. `)
  137. assert.NoError(t, err)
  138. loadServiceFrom(cfg)
  139. assert.False(t, Service.RequireSignInViewStrict)
  140. assert.True(t, Service.BlockAnonymousAccessExpensive)
  141. }