@@ -47,11 +47,13 @@ var client = &http.Client{
4747}
4848
4949var (
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
5759var 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
8690func 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 > 199 && response .StatusCode < 300 && 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