diff options
| author | bnewbold <bnewbold@robocracy.org> | 2012-04-22 22:44:08 -0400 | 
|---|---|---|
| committer | bnewbold <bnewbold@robocracy.org> | 2012-04-22 22:44:08 -0400 | 
| commit | f9ef9d242c4d1de392269379598d2a05109d44ad (patch) | |
| tree | bdd1ae26da09594fe73baf71ea69df3a40a86982 /serve.go | |
| parent | b4f1701943d9a8628d9b30ecf34a7d4687b60b00 (diff) | |
| download | bommom-f9ef9d242c4d1de392269379598d2a05109d44ad.tar.gz bommom-f9ef9d242c4d1de392269379598d2a05109d44ad.zip  | |
http serving first steps
Diffstat (limited to 'serve.go')
| -rw-r--r-- | serve.go | 68 | 
1 files changed, 68 insertions, 0 deletions
diff --git a/serve.go b/serve.go new file mode 100644 index 0000000..dff2006 --- /dev/null +++ b/serve.go @@ -0,0 +1,68 @@ +package main + +import ( +	"fmt" +	"html/template" +	"log" +	"net/http" +	"regexp" +) + +var ( +	tmplHome, tmplView *template.Template +) + +func baseHandler(w http.ResponseWriter, r *http.Request) { +	var err error +	log.Printf("serving %s\n", r.URL.Path) + +	bomUrlPattern := regexp.MustCompile("^/([a-zA-Z][a-zA-Z0-9_]*)/([a-zA-Z][a-zA-Z0-9_]*)/(.*)$") +	userUrlPattern := regexp.MustCompile("^/([a-zA-Z][a-zA-Z0-9_]*)/$") + +	switch { +	case r.URL.Path == "/": +		err = tmplHome.Execute(w, nil) +	case bomUrlPattern.MatchString(r.URL.Path): +		match := bomUrlPattern.FindStringSubmatch(r.URL.Path) +		bomController(w, r, match[1], match[2], match[3]) +	case userUrlPattern.MatchString(r.URL.Path): +		match := userUrlPattern.FindStringSubmatch(r.URL.Path) +		fmt.Fprintf(w, "will show BOM list here for user %s", match[1]) +	default: +		// 404 +		log.Println("warning: 404") +		http.NotFound(w, r) +		return +	} +	if err != nil { +		// this could cause multiple responses? +		http.Error(w, "Internal error (check logs)", 500) +		log.Println("error, 500: " + err.Error()) +	} +} + +func bomController(w http.ResponseWriter, r *http.Request, user, name, extra string) { +	fmt.Fprintf(w, "will show BOM %s/%s here?", user, name) +} + +func serveCmd() { +	var err error + +	// load and parse templates +	tmplHome = template.Must(template.ParseFiles(*templatePath + "/home.html")) +	tmplView = template.Must(template.ParseFiles(*templatePath + "/view.html")) +	if err != nil { +		log.Fatal(err) +	} + +	// serve template static assets (images, CSS, JS) +	http.Handle("/static/", http.FileServer(http.Dir(*templatePath+"/"))) +	http.Handle("/favicon.ico", http.FileServer(http.Dir(*templatePath+"/static/"))) + +	// fall through to default handler +	http.HandleFunc("/", baseHandler) + +	listenString := fmt.Sprintf("%s:%d", *listenHost, *listenPort) +	http.ListenAndServe(listenString, nil) +	fmt.Println("Serving at " + listenString) +}  | 
