| // Copyright 2013 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| // Command blog is a web server for the Go blog that can run on App Engine or |
| // as a stand-alone HTTP server. |
| package main |
| |
| import ( |
| "net/http" |
| "strings" |
| "time" |
| |
| "golang.org/x/tools/blog" |
| "golang.org/x/website/content/static" |
| |
| _ "golang.org/x/tools/playground" |
| ) |
| |
| const hostname = "blog.golang.org" // default hostname for blog server |
| |
| var config = blog.Config{ |
| Hostname: hostname, |
| BaseURL: "https://" + hostname, |
| GodocURL: "https://golang.org", |
| HomeArticles: 5, // articles to display on the home page |
| FeedArticles: 10, // articles to include in Atom and JSON feeds |
| PlayEnabled: true, |
| FeedTitle: "The Go Programming Language Blog", |
| } |
| |
| func init() { |
| // Redirect "/blog/" to "/", because the menu bar link is to "/blog/" |
| // but we're serving from the root. |
| redirect := func(w http.ResponseWriter, r *http.Request) { |
| http.Redirect(w, r, "/", http.StatusFound) |
| } |
| http.HandleFunc("/blog", redirect) |
| http.HandleFunc("/blog/", redirect) |
| |
| // Keep these static file handlers in sync with app.yaml. |
| static := http.FileServer(http.Dir("static")) |
| http.Handle("/favicon.ico", static) |
| http.Handle("/fonts.css", static) |
| http.Handle("/fonts/", static) |
| |
| http.Handle("/lib/godoc/", http.StripPrefix("/lib/godoc/", http.HandlerFunc(staticHandler))) |
| } |
| |
| func staticHandler(w http.ResponseWriter, r *http.Request) { |
| name := r.URL.Path |
| b, ok := static.Files[name] |
| if !ok { |
| http.NotFound(w, r) |
| return |
| } |
| http.ServeContent(w, r, name, time.Time{}, strings.NewReader(b)) |
| } |