gitea源码

cors_test.go 3.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. // Copyright 2019 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package integration
  4. import (
  5. "net/http"
  6. "testing"
  7. "code.gitea.io/gitea/modules/setting"
  8. "code.gitea.io/gitea/modules/test"
  9. "code.gitea.io/gitea/routers"
  10. "code.gitea.io/gitea/tests"
  11. "github.com/stretchr/testify/assert"
  12. )
  13. func TestCORS(t *testing.T) {
  14. defer tests.PrepareTestEnv(t)()
  15. t.Run("CORS enabled", func(t *testing.T) {
  16. defer test.MockVariableValue(&setting.CORSConfig.Enabled, true)()
  17. defer test.MockVariableValue(&testWebRoutes, routers.NormalRoutes())()
  18. t.Run("API with CORS", func(t *testing.T) {
  19. // GET api with no CORS header
  20. req := NewRequest(t, "GET", "/api/v1/version")
  21. resp := MakeRequest(t, req, http.StatusOK)
  22. assert.Empty(t, resp.Header().Get("Access-Control-Allow-Origin"))
  23. assert.Contains(t, resp.Header().Values("Vary"), "Origin")
  24. // OPTIONS api for CORS
  25. req = NewRequest(t, "OPTIONS", "/api/v1/version").
  26. SetHeader("Origin", "https://example.com").
  27. SetHeader("Access-Control-Request-Method", "GET")
  28. resp = MakeRequest(t, req, http.StatusOK)
  29. assert.NotEmpty(t, resp.Header().Get("Access-Control-Allow-Origin"))
  30. assert.Contains(t, resp.Header().Values("Vary"), "Origin")
  31. })
  32. t.Run("Web with CORS", func(t *testing.T) {
  33. // GET userinfo with no CORS header
  34. req := NewRequest(t, "GET", "/login/oauth/userinfo")
  35. resp := MakeRequest(t, req, http.StatusUnauthorized)
  36. assert.Empty(t, resp.Header().Get("Access-Control-Allow-Origin"))
  37. assert.Contains(t, resp.Header().Values("Vary"), "Origin")
  38. // OPTIONS userinfo for CORS
  39. req = NewRequest(t, "OPTIONS", "/login/oauth/userinfo").
  40. SetHeader("Origin", "https://example.com").
  41. SetHeader("Access-Control-Request-Method", "GET")
  42. resp = MakeRequest(t, req, http.StatusOK)
  43. assert.NotEmpty(t, resp.Header().Get("Access-Control-Allow-Origin"))
  44. assert.Contains(t, resp.Header().Values("Vary"), "Origin")
  45. // OPTIONS userinfo for non-CORS
  46. req = NewRequest(t, "OPTIONS", "/login/oauth/userinfo")
  47. resp = MakeRequest(t, req, http.StatusMethodNotAllowed)
  48. assert.NotContains(t, resp.Header().Values("Vary"), "Origin")
  49. })
  50. })
  51. t.Run("CORS disabled", func(t *testing.T) {
  52. defer test.MockVariableValue(&setting.CORSConfig.Enabled, false)()
  53. defer test.MockVariableValue(&testWebRoutes, routers.NormalRoutes())()
  54. t.Run("API without CORS", func(t *testing.T) {
  55. req := NewRequest(t, "GET", "/api/v1/version")
  56. resp := MakeRequest(t, req, http.StatusOK)
  57. assert.Empty(t, resp.Header().Get("Access-Control-Allow-Origin"))
  58. assert.Empty(t, resp.Header().Values("Vary"))
  59. req = NewRequest(t, "OPTIONS", "/api/v1/version").
  60. SetHeader("Origin", "https://example.com").
  61. SetHeader("Access-Control-Request-Method", "GET")
  62. resp = MakeRequest(t, req, http.StatusMethodNotAllowed)
  63. assert.Empty(t, resp.Header().Get("Access-Control-Allow-Origin"))
  64. assert.Empty(t, resp.Header().Values("Vary"))
  65. })
  66. t.Run("Web without CORS", func(t *testing.T) {
  67. req := NewRequest(t, "GET", "/login/oauth/userinfo")
  68. resp := MakeRequest(t, req, http.StatusUnauthorized)
  69. assert.Empty(t, resp.Header().Get("Access-Control-Allow-Origin"))
  70. assert.NotContains(t, resp.Header().Values("Vary"), "Origin")
  71. req = NewRequest(t, "OPTIONS", "/login/oauth/userinfo").
  72. SetHeader("Origin", "https://example.com").
  73. SetHeader("Access-Control-Request-Method", "GET")
  74. resp = MakeRequest(t, req, http.StatusMethodNotAllowed)
  75. assert.Empty(t, resp.Header().Get("Access-Control-Allow-Origin"))
  76. assert.NotContains(t, resp.Header().Values("Vary"), "Origin")
  77. })
  78. })
  79. }