@@ -41,11 +41,13 @@ var log = L.NewDefaultFactory(
4141).Logger ()
4242
4343var (
44- disableColor bool
45- runningPort int
46- domainListPath string
47- blacklistPath string
48- bandwidthLimit int
44+ disableColor bool
45+ runningPort int
46+ domainListPath string
47+ blacklistPath string
48+ bandwidthLimit int
49+ denyWebPage bool
50+ denyWebPageList []string
4951)
5052
5153var BandwidthLimiter * R.Bucket
@@ -75,6 +77,8 @@ func init() {
7577 command .PersistentFlags ().StringVarP (& domainListPath , "domain-list-path" , "d" , "domainlist.txt" , "set accept domain" )
7678 command .PersistentFlags ().StringVarP (& blacklistPath , "blacklist-path" , "b" , "blacklist.txt" , "set repository blacklist" )
7779 command .PersistentFlags ().IntVarP (& bandwidthLimit , "bandwidth-limit" , "l" , 0 , "set total bandwidth limit (MB/s), 0 as no limit" )
80+ command .PersistentFlags ().BoolVarP (& denyWebPage , "deny-web-page" , "" , false , "deny web page requests" )
81+ command .PersistentFlags ().StringSliceVarP (& denyWebPageList , "deny-web-page-list" , "" , []string {"github.com" , "gist.github.com" }, "deny web page requests list" )
7882}
7983
8084func main () {
@@ -104,6 +108,9 @@ func run(*cobra.Command, []string) {
104108 BandwidthLimiter = R .NewBucketWithRate (float64 (bandwidthLimit * 1024 * 1024 ), int64 (bandwidthLimit * 1024 * 1024 ))
105109 log .Info ("Bandwidth limit is set as " , bandwidthLimit , "MB/s" )
106110 }
111+ if denyWebPage && len (denyWebPageList ) > 0 {
112+ log .Info ("Denying web page requests, domain list: [" , strings .Join (denyWebPageList , ", " ), "]" )
113+ }
107114 if watcher , err := loadDomainList (); err == nil {
108115 err = watcher .Start ()
109116 if err == nil {
@@ -525,6 +532,12 @@ func sendRequestWithURL(URL *url.URL) http.Handler {
525532 return
526533 }
527534 defer response .Body .Close ()
535+ if denyWebPage && len (denyWebPageList ) > 0 && common .Any (denyWebPageList , func (it string ) bool {
536+ return strings .ToLower (it ) == strings .ToLower (URL .Host )
537+ }) && response .StatusCode > 199 && response .StatusCode < 300 && strings .Contains (strings .ToLower (response .Header .Get ("Content-Type" )), "text/html" ) {
538+ responseWithError (E .New ("Refuse to serve web page" )).ServeHTTP (w , r )
539+ return
540+ }
528541 for key , values := range response .Header {
529542 delete (w .Header (), key )
530543 for _ , value := range values {
0 commit comments