Merge pull request #90 from 18F/robots-txt
Provide a robots.txt that denies all crawlers
This commit is contained in:
		
						commit
						5c03fe3840
					
				|  | @ -149,6 +149,7 @@ The command line to run `google_auth_proxy` would look like this: | ||||||
| 
 | 
 | ||||||
| Google Auth Proxy responds directly to the following endpoints. All other endpoints will be proxied upstream when authenticated. | Google Auth Proxy responds directly to the following endpoints. All other endpoints will be proxied upstream when authenticated. | ||||||
| 
 | 
 | ||||||
|  | * /robots.txt - returns a 200 OK response that disallows all User-agents from all paths; see [robotstxt.org](http://www.robotstxt.org/) for more info | ||||||
| * /ping - returns an 200 OK response | * /ping - returns an 200 OK response | ||||||
| * /oauth2/sign_in - the login page, which also doubles as a sign out page (it clears cookies) | * /oauth2/sign_in - the login page, which also doubles as a sign out page (it clears cookies) | ||||||
| * /oauth2/start - a URL that will redirect to start the OAuth cycle | * /oauth2/start - a URL that will redirect to start the OAuth cycle | ||||||
|  |  | ||||||
|  | @ -21,6 +21,7 @@ import ( | ||||||
| 	"github.com/bitly/google_auth_proxy/providers" | 	"github.com/bitly/google_auth_proxy/providers" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | const robotsPath = "/robots.txt" | ||||||
| const pingPath = "/ping" | const pingPath = "/ping" | ||||||
| const signInPath = "/oauth2/sign_in" | const signInPath = "/oauth2/sign_in" | ||||||
| const oauthStartPath = "/oauth2/start" | const oauthStartPath = "/oauth2/start" | ||||||
|  | @ -270,6 +271,11 @@ func (p *OauthProxy) SetCookie(rw http.ResponseWriter, req *http.Request, val st | ||||||
| 	http.SetCookie(rw, cookie) | 	http.SetCookie(rw, cookie) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (p *OauthProxy) RobotsTxt(rw http.ResponseWriter) { | ||||||
|  | 	rw.WriteHeader(http.StatusOK) | ||||||
|  | 	fmt.Fprintf(rw, "User-agent: *\nDisallow: /") | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (p *OauthProxy) PingPage(rw http.ResponseWriter) { | func (p *OauthProxy) PingPage(rw http.ResponseWriter) { | ||||||
| 	rw.WriteHeader(http.StatusOK) | 	rw.WriteHeader(http.StatusOK) | ||||||
| 	fmt.Fprintf(rw, "OK") | 	fmt.Fprintf(rw, "OK") | ||||||
|  | @ -358,6 +364,11 @@ func (p *OauthProxy) ServeHTTP(rw http.ResponseWriter, req *http.Request) { | ||||||
| 	var email string | 	var email string | ||||||
| 	var access_token string | 	var access_token string | ||||||
| 
 | 
 | ||||||
|  | 	if req.URL.Path == robotsPath { | ||||||
|  | 		p.RobotsTxt(rw) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	if req.URL.Path == pingPath { | 	if req.URL.Path == pingPath { | ||||||
| 		p.PingPage(rw) | 		p.PingPage(rw) | ||||||
| 		return | 		return | ||||||
|  |  | ||||||
|  | @ -67,6 +67,22 @@ func TestEncodedSlashes(t *testing.T) { | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func TestRobotsTxt(t *testing.T) { | ||||||
|  | 	opts := NewOptions() | ||||||
|  | 	opts.Upstreams = append(opts.Upstreams, "unused") | ||||||
|  | 	opts.ClientID = "bazquux" | ||||||
|  | 	opts.ClientSecret = "foobar" | ||||||
|  | 	opts.CookieSecret = "xyzzyplugh" | ||||||
|  | 	opts.Validate() | ||||||
|  | 
 | ||||||
|  | 	proxy := NewOauthProxy(opts, func(string) bool { return true }) | ||||||
|  | 	rw := httptest.NewRecorder() | ||||||
|  | 	req, _ := http.NewRequest("GET", "/robots.txt", nil) | ||||||
|  | 	proxy.ServeHTTP(rw, req) | ||||||
|  | 	assert.Equal(t, 200, rw.Code) | ||||||
|  | 	assert.Equal(t, "User-agent: *\nDisallow: /", rw.Body.String()) | ||||||
|  | } | ||||||
|  | 
 | ||||||
| type TestProvider struct { | type TestProvider struct { | ||||||
| 	*providers.ProviderData | 	*providers.ProviderData | ||||||
| 	EmailAddress string | 	EmailAddress string | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue