Skip to content

Commit ac5cacf

Browse files
committed
feat: add deny web page requests support
1 parent a761061 commit ac5cacf

File tree

2 files changed

+26
-12
lines changed

2 files changed

+26
-12
lines changed

README.md

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,14 @@ Usage:
1111
git-proxy [flags]
1212

1313
Flags:
14-
-l, --bandwidth-limit int set total bandwidth limit (MB/s), 0 as no limit (default 0)
15-
-b, --blacklist-path string set repository blacklist (default "blacklist.txt")
16-
--disable-color disable color output
17-
-d, --domain-list-path string set accept domain (default "domainlist.txt")
18-
-h, --help help for git-proxy
19-
-p, --running-port int disable color output (default 30000)
20-
14+
-l, --bandwidth-limit int set total bandwidth limit (MB/s), 0 as no limit
15+
-b, --blacklist-path string set repository blacklist (default "blacklist.txt")
16+
--deny-web-page deny web page requests
17+
--deny-web-page-list strings deny web page requests list (default [github.com,gist.github.com])
18+
--disable-color disable color output
19+
-d, --domain-list-path string set accept domain (default "domainlist.txt")
20+
-h, --help help for git-proxy
21+
-p, --running-port int disable color output (default 30000)
2122
```
2223

2324
### URL scheme

main.go

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,13 @@ var client = &http.Client{
4747
}
4848

4949
var (
50-
disableColor bool
51-
runningPort int
52-
domainListPath string
53-
blacklistPath string
54-
bandwidthLimit int
50+
disableColor bool
51+
runningPort int
52+
domainListPath string
53+
blacklistPath string
54+
bandwidthLimit int
55+
denyWebPage bool
56+
denyWebPageList []string
5557
)
5658

5759
var BandwidthLimiter *R.Bucket
@@ -81,6 +83,8 @@ func init() {
8183
command.PersistentFlags().StringVarP(&domainListPath, "domain-list-path", "d", "domainlist.txt", "set accept domain")
8284
command.PersistentFlags().StringVarP(&blacklistPath, "blacklist-path", "b", "blacklist.txt", "set repository blacklist")
8385
command.PersistentFlags().IntVarP(&bandwidthLimit, "bandwidth-limit", "l", 0, "set total bandwidth limit (MB/s), 0 as no limit")
86+
command.PersistentFlags().BoolVarP(&denyWebPage, "deny-web-page", "", false, "deny web page requests")
87+
command.PersistentFlags().StringSliceVarP(&denyWebPageList, "deny-web-page-list", "", []string{"github.com", "gist.github.com"}, "deny web page requests list")
8488
}
8589

8690
func main() {
@@ -110,6 +114,9 @@ func run(*cobra.Command, []string) {
110114
BandwidthLimiter = R.NewBucketWithRate(float64(bandwidthLimit*1024*1024), int64(bandwidthLimit*1024*1024))
111115
log.Info("Bandwidth limit is set as ", bandwidthLimit, "MB/s")
112116
}
117+
if denyWebPage && len(denyWebPageList) > 0 {
118+
log.Info("Denying web page requests, domain list: [", strings.Join(denyWebPageList, ", "), "]")
119+
}
113120
if watcher, err := loadDomainList(); err == nil {
114121
err = watcher.Start()
115122
if err == nil {
@@ -531,6 +538,12 @@ func sendRequestWithURL(URL *url.URL) http.Handler {
531538
return
532539
}
533540
defer response.Body.Close()
541+
if denyWebPage && len(denyWebPageList) > 0 && common.Any(denyWebPageList, func(it string) bool {
542+
return strings.ToLower(it) == strings.ToLower(URL.Host)
543+
}) && response.StatusCode == http.StatusOK && strings.Contains(strings.ToLower(response.Header.Get("Content-Type")), "text/html") {
544+
responseWithError(E.New("Refuse to serve web page")).ServeHTTP(w, r)
545+
return
546+
}
534547
isRedirectResponse := common.Any([]int{http.StatusMovedPermanently, http.StatusFound, http.StatusTemporaryRedirect, http.StatusPermanentRedirect}, func(it int) bool {
535548
return it == response.StatusCode
536549
})

0 commit comments

Comments
 (0)