Index: sky/tools/skygo/sky_server.go |
diff --git a/sky/tools/skygo/sky_server.go b/sky/tools/skygo/sky_server.go |
index 482e6694a2712bad90d58bb6a3a64d9794eeb40b..1327a19d3c6c8628ba2a5b7c18ec12d9aca33fc4 100644 |
--- a/sky/tools/skygo/sky_server.go |
+++ b/sky/tools/skygo/sky_server.go |
@@ -5,83 +5,87 @@ |
package main |
import ( |
- "flag" |
- "fmt" |
- "io/ioutil" |
- "net/http" |
- "os" |
- "path" |
- "path/filepath" |
- "strings" |
+ "flag" |
+ "fmt" |
+ "io/ioutil" |
+ "net/http" |
+ "os" |
+ "path" |
+ "path/filepath" |
+ "strings" |
) |
type skyHandlerRoot struct { |
- root string |
+ root string |
} |
func skyHandler(root string) http.Handler { |
- return &skyHandlerRoot{root} |
+ return &skyHandlerRoot{root} |
} |
func (handler *skyHandlerRoot) ServeHTTP(w http.ResponseWriter, r *http.Request) { |
- path := path.Join(handler.root, r.URL.Path) |
- if strings.HasSuffix(path, ".sky") { |
- w.Header().Set("Content-Type", "text/sky") |
- } |
- w.Header().Set("Cache-Control", "no-cache") |
- http.ServeFile(w, r, path) |
+ if strings.HasPrefix(r.URL.Path, "/.git") { |
+ w.WriteHeader(http.StatusNotFound) |
+ return |
+ } |
+ path := path.Join(handler.root, r.URL.Path) |
+ if strings.HasSuffix(path, ".sky") { |
+ w.Header().Set("Content-Type", "text/sky") |
+ } |
+ w.Header().Set("Cache-Control", "no-cache") |
+ http.ServeFile(w, r, path) |
} |
func usage() { |
- fmt.Fprintf(os.Stderr, "Usage: sky_server [flags] MOJO_SRC_ROOT PORT\n\n") |
- fmt.Fprintf(os.Stderr, "launches a basic http server with mappings into the\n") |
- fmt.Fprintf(os.Stderr, "mojo repository for framework/service paths.\n") |
- fmt.Fprintf(os.Stderr, "[flags] MUST be before arguments, because go:flag.\n\n") |
- flag.PrintDefaults() |
- os.Exit(2) |
+ fmt.Fprintf(os.Stderr, "Usage: sky_server [flags] MOJO_SRC_ROOT PORT\n\n") |
+ fmt.Fprintf(os.Stderr, "launches a basic http server with mappings into the\n") |
+ fmt.Fprintf(os.Stderr, "mojo repository for framework/service paths.\n") |
+ fmt.Fprintf(os.Stderr, "[flags] MUST be before arguments, because go:flag.\n\n") |
+ flag.PrintDefaults() |
+ os.Exit(2) |
} |
func addMapping(from_path string, to_path string) { |
- // Print to stderr to it's more obvious what this binary does. |
- fmt.Fprintf(os.Stderr, " %s -> %s\n", from_path, to_path) |
- http.Handle(from_path, http.StripPrefix(from_path, skyHandler(to_path))) |
+ // Print to stderr to it's more obvious what this binary does. |
+ fmt.Fprintf(os.Stderr, " %s -> %s\n", from_path, to_path) |
+ http.Handle(from_path, http.StripPrefix(from_path, skyHandler(to_path))) |
} |
func main() { |
- var configuration = flag.String("t", "Release", "The target configuration (i.e. Release or Debug)") |
- |
- flag.Parse() |
- flag.Usage = usage |
- // The built-in go:flag is awful. It only allows short-name arguments |
- // and they *must* be before any unnamed arguments. There are better ones: |
- // https://godoc.org/github.com/jessevdk/go-flags |
- // but for now we're using raw-go. |
- if flag.NArg() != 3 { |
- usage() |
- } |
- |
- root, _ := filepath.Abs(flag.Arg(0)) |
- port := flag.Arg(1) |
- packageRoot := flag.Arg(2) |
- |
- // genRoot should not be needed once we figure out how mojom generation |
- // for sdk users should work. |
- genRoot := path.Join(root, "out", *configuration, "gen") |
- |
- fmt.Fprintf(os.Stderr, "Mappings for localhost:%s:\n", port) |
- |
- fmt.Fprintf(os.Stderr, " / -> %s\n", root) |
- http.Handle("/", skyHandler(root)) |
- |
- fmt.Fprintf(os.Stderr, " /echo_post -> custom echo handler\n") |
- http.HandleFunc("/echo_post", func(w http.ResponseWriter, r *http.Request) { |
- defer r.Body.Close() |
- body, _ := ioutil.ReadAll(r.Body) |
- w.Write(body) |
- }) |
- |
- addMapping("/gen/", genRoot) |
- addMapping("/packages/", packageRoot) |
- |
- http.ListenAndServe(":" + port, nil) |
+ var configuration = flag.String("t", "Release", "The target configuration (i.e. Release or Debug)") |
+ |
+ flag.Parse() |
+ flag.Usage = usage |
+ // The built-in go:flag is awful. It only allows short-name arguments |
+ // and they *must* be before any unnamed arguments. There are better ones: |
+ // https://godoc.org/github.com/jessevdk/go-flags |
+ // but for now we're using raw-go. |
+ if flag.NArg() != 3 { |
+ usage() |
+ } |
+ |
+ root, _ := filepath.Abs(flag.Arg(0)) |
+ port := flag.Arg(1) |
+ packageRoot := flag.Arg(2) |
+ |
+ // genRoot should not be needed once we figure out how mojom generation |
+ // for sdk users should work. |
+ genRoot := path.Join(root, "out", *configuration, "gen") |
+ |
+ fmt.Fprintf(os.Stderr, "Mappings for localhost:%s:\n", port) |
+ |
+ fmt.Fprintf(os.Stderr, " / -> %s\n", root) |
+ http.Handle("/", skyHandler(root)) |
+ |
+ fmt.Fprintf(os.Stderr, " /echo_post -> custom echo handler\n") |
+ http.HandleFunc("/echo_post", func(w http.ResponseWriter, r *http.Request) { |
+ defer r.Body.Close() |
+ body, _ := ioutil.ReadAll(r.Body) |
+ w.Write(body) |
+ }) |
+ |
+ addMapping("/gen/", genRoot) |
+ addMapping("/packages/", packageRoot) |
+ |
+ http.ListenAndServe(":"+port, nil) |
} |