mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-12-22 12:54:53 -05:00
Can disable GIT interactions by HTTP protocol
This commit is contained in:
parent
7e15ff9486
commit
9d66497abc
7 changed files with 40 additions and 13 deletions
|
@ -24,6 +24,8 @@ PULL_REQUEST_QUEUE_LENGTH = 1000
|
||||||
; Preferred Licenses to place at the top of the List
|
; Preferred Licenses to place at the top of the List
|
||||||
; Name must match file name in conf/license or custom/conf/license
|
; Name must match file name in conf/license or custom/conf/license
|
||||||
PREFERRED_LICENSES = Apache License 2.0,MIT License
|
PREFERRED_LICENSES = Apache License 2.0,MIT License
|
||||||
|
; Disable ability to interact with repositories by HTTP protocol
|
||||||
|
DISABLE_HTTP_GIT= false
|
||||||
|
|
||||||
[repository.editor]
|
[repository.editor]
|
||||||
; List of file extensions that should have line wraps in the CodeMirror editor
|
; List of file extensions that should have line wraps in the CodeMirror editor
|
||||||
|
|
|
@ -256,6 +256,7 @@ func RepoAssignment(args ...bool) macaron.Handler {
|
||||||
ctx.Data["IsRepositoryWriter"] = ctx.Repo.IsWriter()
|
ctx.Data["IsRepositoryWriter"] = ctx.Repo.IsWriter()
|
||||||
|
|
||||||
ctx.Data["DisableSSH"] = setting.SSH.Disabled
|
ctx.Data["DisableSSH"] = setting.SSH.Disabled
|
||||||
|
ctx.Data["DisableHTTP"] = setting.Repository.DisableHttpGit
|
||||||
ctx.Data["CloneLink"] = repo.CloneLink()
|
ctx.Data["CloneLink"] = repo.CloneLink()
|
||||||
ctx.Data["WikiCloneLink"] = repo.WikiCloneLink()
|
ctx.Data["WikiCloneLink"] = repo.WikiCloneLink()
|
||||||
|
|
||||||
|
|
|
@ -116,6 +116,7 @@ var (
|
||||||
MirrorQueueLength int
|
MirrorQueueLength int
|
||||||
PullRequestQueueLength int
|
PullRequestQueueLength int
|
||||||
PreferredLicenses []string
|
PreferredLicenses []string
|
||||||
|
DisableHttpGit bool
|
||||||
|
|
||||||
// Repository editor settings
|
// Repository editor settings
|
||||||
Editor struct {
|
Editor struct {
|
||||||
|
|
|
@ -479,6 +479,11 @@ func HTTPBackend(ctx *context.Context, cfg *serviceConfig) http.HandlerFunc {
|
||||||
for _, route := range routes {
|
for _, route := range routes {
|
||||||
r.URL.Path = strings.ToLower(r.URL.Path) // blue: In case some repo name has upper case name
|
r.URL.Path = strings.ToLower(r.URL.Path) // blue: In case some repo name has upper case name
|
||||||
if m := route.reg.FindStringSubmatch(r.URL.Path); m != nil {
|
if m := route.reg.FindStringSubmatch(r.URL.Path); m != nil {
|
||||||
|
if setting.Repository.DisableHttpGit {
|
||||||
|
w.WriteHeader(http.StatusForbidden)
|
||||||
|
w.Write([]byte("Interacting with repositories by HTTP protocol is not allowed"))
|
||||||
|
return
|
||||||
|
}
|
||||||
if route.method != r.Method {
|
if route.method != r.Method {
|
||||||
if r.Proto == "HTTP/1.1" {
|
if r.Proto == "HTTP/1.1" {
|
||||||
w.WriteHeader(http.StatusMethodNotAllowed)
|
w.WriteHeader(http.StatusMethodNotAllowed)
|
||||||
|
|
|
@ -16,15 +16,21 @@
|
||||||
<div class="item">
|
<div class="item">
|
||||||
<h3>{{.i18n.Tr "repo.clone_this_repo"}} <small>{{.i18n.Tr "repo.clone_helper" "http://git-scm.com/book/en/Git-Basics-Getting-a-Git-Repository" | Str2html}}</small></h3>
|
<h3>{{.i18n.Tr "repo.clone_this_repo"}} <small>{{.i18n.Tr "repo.clone_helper" "http://git-scm.com/book/en/Git-Basics-Getting-a-Git-Repository" | Str2html}}</small></h3>
|
||||||
<div class="ui action small input">
|
<div class="ui action small input">
|
||||||
<button class="ui basic clone button" id="repo-clone-https" data-link="{{.CloneLink.HTTPS}}">
|
{{if not $.DisableHTTP}}
|
||||||
{{if UseHTTPS}}HTTPS{{else}}HTTP{{end}}
|
<button class="ui basic clone button" id="repo-clone-https" data-link="{{.CloneLink.HTTPS}}">
|
||||||
</button>
|
{{if UseHTTPS}}HTTPS{{else}}HTTP{{end}}
|
||||||
|
</button>
|
||||||
|
{{end}}
|
||||||
{{if not $.DisableSSH}}
|
{{if not $.DisableSSH}}
|
||||||
<button class="ui basic clone button" id="repo-clone-ssh" data-link="{{.CloneLink.SSH}}">
|
<button class="ui basic clone button" id="repo-clone-ssh" data-link="{{.CloneLink.SSH}}">
|
||||||
SSH
|
SSH
|
||||||
</button>
|
</button>
|
||||||
{{end}}
|
{{end}}
|
||||||
<input id="repo-clone-url" value="{{$.CloneLink.HTTPS}}" readonly>
|
{{if not $.DisableHTTP}}
|
||||||
|
<input id="repo-clone-url" value="{{$.CloneLink.HTTPS}}" readonly>
|
||||||
|
{{else}}
|
||||||
|
<input id="repo-clone-url" value="{{$.CloneLink.SSH}}" readonly>
|
||||||
|
{{end}}
|
||||||
<button class="ui basic button poping up clipboard" id="clipboard-btn" data-original="{{.i18n.Tr "repo.copy_link"}}" data-success="{{.i18n.Tr "repo.copy_link_success"}}" data-error="{{.i18n.Tr "repo.copy_link_error"}}" data-content="{{.i18n.Tr "repo.copy_link"}}" data-variation="inverted tiny" data-clipboard-target="#repo-clone-url">
|
<button class="ui basic button poping up clipboard" id="clipboard-btn" data-original="{{.i18n.Tr "repo.copy_link"}}" data-success="{{.i18n.Tr "repo.copy_link_success"}}" data-error="{{.i18n.Tr "repo.copy_link_error"}}" data-content="{{.i18n.Tr "repo.copy_link"}}" data-variation="inverted tiny" data-clipboard-target="#repo-clone-url">
|
||||||
<i class="octicon octicon-clippy"></i>
|
<i class="octicon octicon-clippy"></i>
|
||||||
</button>
|
</button>
|
||||||
|
|
|
@ -51,15 +51,21 @@
|
||||||
<!-- Only show colne panel in repository home page -->
|
<!-- Only show colne panel in repository home page -->
|
||||||
{{if eq $n 0}}
|
{{if eq $n 0}}
|
||||||
<div class="ui action small input" id="clone-panel">
|
<div class="ui action small input" id="clone-panel">
|
||||||
<button class="ui basic clone button" id="repo-clone-https" data-link="{{.CloneLink.HTTPS}}">
|
{{if not $.DisableHTTP}}
|
||||||
{{if UseHTTPS}}HTTPS{{else}}HTTP{{end}}
|
<button class="ui basic clone button" id="repo-clone-https" data-link="{{.CloneLink.HTTPS}}">
|
||||||
</button>
|
{{if UseHTTPS}}HTTPS{{else}}HTTP{{end}}
|
||||||
|
</button>
|
||||||
|
{{end}}
|
||||||
{{if not $.DisableSSH}}
|
{{if not $.DisableSSH}}
|
||||||
<button class="ui basic clone button" id="repo-clone-ssh" data-link="{{.CloneLink.SSH}}">
|
<button class="ui basic clone button" id="repo-clone-ssh" data-link="{{.CloneLink.SSH}}">
|
||||||
SSH
|
SSH
|
||||||
</button>
|
</button>
|
||||||
{{end}}
|
{{end}}
|
||||||
<input id="repo-clone-url" value="{{$.CloneLink.HTTPS}}" readonly>
|
{{if not $.DisableHTTP}}
|
||||||
|
<input id="repo-clone-url" value="{{$.CloneLink.HTTPS}}" readonly>
|
||||||
|
{{else}}
|
||||||
|
<input id="repo-clone-url" value="{{$.CloneLink.SSH}}" readonly>
|
||||||
|
{{end}}
|
||||||
<button class="ui basic icon button poping up clipboard" id="clipboard-btn" data-original="{{.i18n.Tr "repo.copy_link"}}" data-success="{{.i18n.Tr "repo.copy_link_success"}}" data-error="{{.i18n.Tr "repo.copy_link_error"}}" data-content="{{.i18n.Tr "repo.copy_link"}}" data-variation="inverted tiny" data-clipboard-target="#repo-clone-url">
|
<button class="ui basic icon button poping up clipboard" id="clipboard-btn" data-original="{{.i18n.Tr "repo.copy_link"}}" data-success="{{.i18n.Tr "repo.copy_link_success"}}" data-error="{{.i18n.Tr "repo.copy_link_error"}}" data-content="{{.i18n.Tr "repo.copy_link"}}" data-variation="inverted tiny" data-clipboard-target="#repo-clone-url">
|
||||||
<i class="octicon octicon-clippy"></i>
|
<i class="octicon octicon-clippy"></i>
|
||||||
</button>
|
</button>
|
||||||
|
|
|
@ -29,15 +29,21 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="ui six wide column">
|
<div class="ui six wide column">
|
||||||
<div class="ui action small input" id="clone-panel">
|
<div class="ui action small input" id="clone-panel">
|
||||||
<button class="ui basic clone button" id="repo-clone-https" data-link="{{.WikiCloneLink.HTTPS}}">
|
{{if not $.DisableHTTP}}
|
||||||
{{if UseHTTPS}}HTTPS{{else}}HTTP{{end}}
|
<button class="ui basic clone button" id="repo-clone-https" data-link="{{.CloneLink.HTTPS}}">
|
||||||
</button>
|
{{if UseHTTPS}}HTTPS{{else}}HTTP{{end}}
|
||||||
|
</button>
|
||||||
|
{{end}}
|
||||||
{{if not $.DisableSSH}}
|
{{if not $.DisableSSH}}
|
||||||
<button class="ui basic clone button" id="repo-clone-ssh" data-link="{{.WikiCloneLink.SSH}}">
|
<button class="ui basic clone button" id="repo-clone-ssh" data-link="{{.CloneLink.SSH}}">
|
||||||
SSH
|
SSH
|
||||||
</button>
|
</button>
|
||||||
{{end}}
|
{{end}}
|
||||||
<input id="repo-clone-url" value="{{$.WikiCloneLink.HTTPS}}" readonly>
|
{{if not $.DisableHTTP}}
|
||||||
|
<input id="repo-clone-url" value="{{$.CloneLink.HTTPS}}" readonly>
|
||||||
|
{{else}}
|
||||||
|
<input id="repo-clone-url" value="{{$.CloneLink.SSH}}" readonly>
|
||||||
|
{{end}}
|
||||||
<button class="ui basic icon button poping up clipboard" id="clipboard-btn" data-original="{{.i18n.Tr "repo.copy_link"}}" data-success="{{.i18n.Tr "repo.copy_link_success"}}" data-error="{{.i18n.Tr "repo.copy_link_error"}}" data-content="{{.i18n.Tr "repo.copy_link"}}" data-variation="inverted tiny" data-clipboard-target="#repo-clone-url">
|
<button class="ui basic icon button poping up clipboard" id="clipboard-btn" data-original="{{.i18n.Tr "repo.copy_link"}}" data-success="{{.i18n.Tr "repo.copy_link_success"}}" data-error="{{.i18n.Tr "repo.copy_link_error"}}" data-content="{{.i18n.Tr "repo.copy_link"}}" data-variation="inverted tiny" data-clipboard-target="#repo-clone-url">
|
||||||
<i class="octicon octicon-clippy"></i>
|
<i class="octicon octicon-clippy"></i>
|
||||||
</button>
|
</button>
|
||||||
|
|
Loading…
Reference in a new issue