Browse Source

Support CORS headers to git smart http protocol (#5719)

tags/v1.9.0-dev
Lunny Xiao techknowlogick 6 years ago
parent
commit
5f079ea84e
3 changed files with 35 additions and 18 deletions
  1. +3
    -0
      docs/content/doc/advanced/config-cheat-sheet.en-us.md
  2. +20
    -18
      modules/setting/setting.go
  3. +12
    -0
      routers/repo/http.go

+ 3
- 0
docs/content/doc/advanced/config-cheat-sheet.en-us.md View File

@@ -62,6 +62,9 @@ Values containing `#` or `;` must be quoted using `` ` `` or `"""`.
HTTP protocol. HTTP protocol.
- `USE_COMPAT_SSH_URI`: **false**: Force ssh:// clone url instead of scp-style uri when - `USE_COMPAT_SSH_URI`: **false**: Force ssh:// clone url instead of scp-style uri when
default SSH port is used. default SSH port is used.
- `ACCESS_CONTROL_ALLOW_ORIGIN`: **\<empty\>**: Value for Access-Control-Allow-Origin header,
default is not to present. **WARNING**: This maybe harmful to you website if you do not
give it a right value.


### Repository - Pull Request (`repository.pull-request`) ### Repository - Pull Request (`repository.pull-request`)
- `WORK_IN_PROGRESS_PREFIXES`: **WIP:,\[WIP\]**: List of prefixes used in Pull Request - `WORK_IN_PROGRESS_PREFIXES`: **WIP:,\[WIP\]**: List of prefixes used in Pull Request


+ 20
- 18
modules/setting/setting.go View File

@@ -201,15 +201,16 @@ var (


// Repository settings // Repository settings
Repository = struct { Repository = struct {
AnsiCharset string
ForcePrivate bool
DefaultPrivate string
MaxCreationLimit int
MirrorQueueLength int
PullRequestQueueLength int
PreferredLicenses []string
DisableHTTPGit bool
UseCompatSSHURI bool
AnsiCharset string
ForcePrivate bool
DefaultPrivate string
MaxCreationLimit int
MirrorQueueLength int
PullRequestQueueLength int
PreferredLicenses []string
DisableHTTPGit bool
AccessControlAllowOrigin string
UseCompatSSHURI bool


// Repository editor settings // Repository editor settings
Editor struct { Editor struct {
@@ -237,15 +238,16 @@ var (
WorkInProgressPrefixes []string WorkInProgressPrefixes []string
} `ini:"repository.pull-request"` } `ini:"repository.pull-request"`
}{ }{
AnsiCharset: "",
ForcePrivate: false,
DefaultPrivate: RepoCreatingLastUserVisibility,
MaxCreationLimit: -1,
MirrorQueueLength: 1000,
PullRequestQueueLength: 1000,
PreferredLicenses: []string{"Apache License 2.0,MIT License"},
DisableHTTPGit: false,
UseCompatSSHURI: false,
AnsiCharset: "",
ForcePrivate: false,
DefaultPrivate: RepoCreatingLastUserVisibility,
MaxCreationLimit: -1,
MirrorQueueLength: 1000,
PullRequestQueueLength: 1000,
PreferredLicenses: []string{"Apache License 2.0,MIT License"},
DisableHTTPGit: false,
AccessControlAllowOrigin: "",
UseCompatSSHURI: false,


// Repository editor settings // Repository editor settings
Editor: struct { Editor: struct {


+ 12
- 0
routers/repo/http.go View File

@@ -27,6 +27,18 @@ import (


// HTTP implmentation git smart HTTP protocol // HTTP implmentation git smart HTTP protocol
func HTTP(ctx *context.Context) { func HTTP(ctx *context.Context) {
if len(setting.Repository.AccessControlAllowOrigin) > 0 {
// Set CORS headers for browser-based git clients
ctx.Resp.Header().Set("Access-Control-Allow-Origin", setting.Repository.AccessControlAllowOrigin)
ctx.Resp.Header().Set("Access-Control-Allow-Headers", "Content-Type, Authorization, User-Agent")

// Handle preflight OPTIONS request
if ctx.Req.Method == "OPTIONS" {
ctx.Status(http.StatusOK)
return
}
}

username := ctx.Params(":username") username := ctx.Params(":username")
reponame := strings.TrimSuffix(ctx.Params(":reponame"), ".git") reponame := strings.TrimSuffix(ctx.Params(":reponame"), ".git")




Loading…
Cancel
Save