Skip to content

Commit

Permalink
godoc: add GoogleCN property to pages
Browse files Browse the repository at this point in the history
Use that property to determine whether to show share functionality
or link to sites that are blocked in mainland China.

This change requires https://go-review.googlesource.com/c/52872

Change-Id: I47327f9dbd2624206564fa99eb1cc6a10b4f46db
Reviewed-on: https://go-review.googlesource.com/52873
Reviewed-by: Chris Broadfoot <[email protected]>
  • Loading branch information
andybons committed Aug 2, 2017
1 parent fcc44a6 commit 4e70a1b
Show file tree
Hide file tree
Showing 8 changed files with 40 additions and 26 deletions.
2 changes: 1 addition & 1 deletion godoc/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ binary. It can be tedious to recompile assets every time, but you can pass a
flag to load CSS/JS/templates from disk every time a page loads:

```
godoc --templates=$GOPATH/src/golang.org/x/tools/godoc/static --http=:6060
godoc -templates=$GOPATH/src/golang.org/x/tools/godoc/static -http=:6060
```

## Recompiling static assets
Expand Down
10 changes: 5 additions & 5 deletions godoc/godoc.go
Original file line number Diff line number Diff line change
Expand Up @@ -421,9 +421,9 @@ func sanitizeFunc(src string) string {
}

type PageInfo struct {
Dirname string // directory containing the package
Err error // error or nil
Share bool // show share button on examples
Dirname string // directory containing the package
Err error // error or nil
GoogleCN bool // page is being served from golang.google.cn

Mode PageInfoMode // display metadata from query string

Expand Down Expand Up @@ -683,8 +683,8 @@ func (p *Presentation) example_htmlFunc(info *PageInfo, funcName string) string

err := p.ExampleHTML.Execute(&buf, struct {
Name, Doc, Code, Play, Output string
Share bool
}{eg.Name, eg.Doc, code, play, out, info.Share})
GoogleCN bool
}{eg.Name, eg.Doc, code, play, out, info.GoogleCN})
if err != nil {
log.Print(err)
}
Expand Down
19 changes: 13 additions & 6 deletions godoc/page.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"os"
"path/filepath"
"runtime"
"strings"
)

// Page describes the contents of the top-level godoc webpage.
Expand All @@ -19,7 +20,7 @@ type Page struct {
SrcPath string
Query string
Body []byte
Share bool
GoogleCN bool // page is being served from golang.google.cn

// filled in by servePage
SearchBox bool
Expand Down Expand Up @@ -51,19 +52,25 @@ func (p *Presentation) ServeError(w http.ResponseWriter, r *http.Request, relpat
Title: "File " + relpath,
Subtitle: relpath,
Body: applyTemplate(p.ErrorHTML, "errorHTML", err),
Share: allowShare(r),
GoogleCN: googleCN(r),
})
}

var onAppengine = false // overriden in appengine.go when on app engine
var onAppengine = false // overridden in appengine.go when on app engine

func allowShare(r *http.Request) bool {
func googleCN(r *http.Request) bool {
if r.FormValue("googlecn") != "" {
return true
}
if !onAppengine {
return false
}
if strings.HasSuffix(r.Host, ".cn") {
return true
}
switch r.Header.Get("X-AppEngine-Country") {
case "", "ZZ", "CN":
return false
return true
}
return true
return false
}
17 changes: 12 additions & 5 deletions godoc/proxy/proxy.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import (
"net/http"
"net/http/httputil"
"net/url"
"strings"
"time"

"golang.org/x/net/context"
Expand Down Expand Up @@ -147,8 +148,8 @@ func cacheKey(body string) string {
}

func share(w http.ResponseWriter, r *http.Request) {
if !allowShare(r) {
http.Error(w, "Forbidden", http.StatusForbidden)
if googleCN(r) {
http.Error(w, http.StatusText(http.StatusForbidden), http.StatusForbidden)
return
}
target, _ := url.Parse(playgroundURL)
Expand All @@ -157,13 +158,19 @@ func share(w http.ResponseWriter, r *http.Request) {
p.ServeHTTP(w, r)
}

func allowShare(r *http.Request) bool {
func googleCN(r *http.Request) bool {
if r.FormValue("googlecn") != "" {
return true
}
if appengine.IsDevAppServer() {
return false
}
if strings.HasSuffix(r.Host, ".cn") {
return true
}
switch r.Header.Get("X-AppEngine-Country") {
case "", "ZZ", "CN":
return false
return true
}
return true
return false
}
2 changes: 1 addition & 1 deletion godoc/search.go
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ func (p *Presentation) HandleSearch(w http.ResponseWriter, r *http.Request) {
Tabtitle: query,
Query: query,
Body: body.Bytes(),
Share: allowShare(r),
GoogleCN: googleCN(r),
})
}

Expand Down
10 changes: 5 additions & 5 deletions godoc/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -312,13 +312,13 @@ func (h *handlerServer) ServeHTTP(w http.ResponseWriter, r *http.Request) {
info.TypeInfoIndex[ti.Name] = i
}

info.Share = allowShare(r)
info.GoogleCN = googleCN(r)
h.p.ServePage(w, Page{
Title: title,
Tabtitle: tabtitle,
Subtitle: subtitle,
Body: applyTemplate(h.p.PackageHTML, "packageHTML", info),
Share: info.Share,
GoogleCN: info.GoogleCN,
})
}

Expand Down Expand Up @@ -583,7 +583,7 @@ func (p *Presentation) serveTextFile(w http.ResponseWriter, r *http.Request, abs
SrcPath: relpath,
Tabtitle: relpath,
Body: buf.Bytes(),
Share: allowShare(r),
GoogleCN: googleCN(r),
})
}

Expand Down Expand Up @@ -654,7 +654,7 @@ func (p *Presentation) serveDirectory(w http.ResponseWriter, r *http.Request, ab
SrcPath: relpath,
Tabtitle: relpath,
Body: applyTemplate(p.DirlistHTML, "dirlistHTML", list),
Share: allowShare(r),
GoogleCN: googleCN(r),
})
}

Expand Down Expand Up @@ -683,7 +683,7 @@ func (p *Presentation) ServeHTMLDoc(w http.ResponseWriter, r *http.Request, absp
page := Page{
Title: meta.Title,
Subtitle: meta.Subtitle,
Share: allowShare(r),
GoogleCN: googleCN(r),
}

// evaluate as template if indicated
Expand Down
2 changes: 1 addition & 1 deletion godoc/static/example.html
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
<div class="buttons">
<a class="run" title="Run this code [shift-enter]">Run</a>
<a class="fmt" title="Format this code">Format</a>
{{if $.Share}}
{{if not $.GoogleCN}}
<a class="share" title="Share this code">Share</a>
{{end}}
</div>
Expand Down
4 changes: 2 additions & 2 deletions godoc/static/godoc.html
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@
<div class="buttons">
<a class="run" title="Run this code [shift-enter]">Run</a>
<a class="fmt" title="Format this code">Format</a>
{{if $.Share}}
{{if not $.GoogleCN}}
<a class="share" title="Share this code">Share</a>
{{end}}
</div>
Expand Down Expand Up @@ -95,7 +95,7 @@ <h2>
the content of this page is licensed under the
Creative Commons Attribution 3.0 License,
and code is licensed under a <a href="/LICENSE">BSD license</a>.<br>
<a href="/doc/tos.html">Terms of Service</a> |
<a href="/doc/tos.html">Terms of Service</a> |
<a href="http://www.google.com/intl/en/policies/privacy/">Privacy Policy</a>
</div>

Expand Down

0 comments on commit 4e70a1b

Please sign in to comment.