aboutsummaryrefslogtreecommitdiffstats
path: root/serve.go
blob: f54ca0e10e81724480fb82a34392f0c0c28471e5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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
    baseTmplPath := *templatePath + "/base.html"
	tmplHome = template.Must(template.ParseFiles(*templatePath + "/home.html", baseTmplPath))
	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)
}