diff options
-rw-r--r-- | handlers.go | 42 | ||||
-rw-r--r-- | main.go | 14 | ||||
-rw-r--r-- | types.go | 3 |
3 files changed, 51 insertions, 8 deletions
diff --git a/handlers.go b/handlers.go index 4b2ceef..ac52559 100644 --- a/handlers.go +++ b/handlers.go @@ -6,6 +6,8 @@ import ( "log" "net/http" "time" + + "github.com/gorilla/mux" ) func apiBaseHandler(w http.ResponseWriter, r *http.Request) { @@ -15,7 +17,7 @@ func apiBaseHandler(w http.ResponseWriter, r *http.Request) { } etag := fmt.Sprintf("%x", sha256.Sum256(timerfc3339)) w.Header().Set("ETag", etag) - w.Header().Set("Content-Type", textutf8) + w.Header().Set("Content-Type", txtutf8) pathdata := []byte("\n\n" + r.URL.Path) timerfc3339 = append(timerfc3339, pathdata...) n, err := w.Write(timerfc3339) @@ -25,17 +27,55 @@ func apiBaseHandler(w http.ResponseWriter, r *http.Request) { } func indexHandler(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", htmlutf8) + n, err := w.Write([]byte(getwtxt)) + if err != nil || n == 0 { + log.Printf("Error writing to HTTP stream: %v\n", err) + } } func apiFormatHandler(w http.ResponseWriter, r *http.Request) { + vars := mux.Vars(r) + format := vars["format"] + w.Header().Set("Content-Type", txtutf8) + n, err := w.Write([]byte(format + "\n")) + if err != nil || n == 0 { + log.Printf("Error writing to HTTP stream: %v\n", err) + } } func apiEndpointHandler(w http.ResponseWriter, r *http.Request) { + vars := mux.Vars(r) + format := vars["format"] + endpoint := vars["endpoint"] + + w.Header().Set("Content-Type", htmlutf8) + n, err := w.Write([]byte(format + "/" + endpoint)) + if err != nil || n == 0 { + log.Printf("Error writing to HTTP stream: %v\n", err) + } } func apiTagsBaseHandler(w http.ResponseWriter, r *http.Request) { + vars := mux.Vars(r) + format := vars["format"] + + w.Header().Set("Content-Type", htmlutf8) + n, err := w.Write([]byte("api/" + format + "/tags")) + if err != nil || n == 0 { + log.Printf("Error writing to HTTP stream: %v\n", err) + } } func apiTagsHandler(w http.ResponseWriter, r *http.Request) { + vars := mux.Vars(r) + format := vars["format"] + tags := vars["tags"] + + w.Header().Set("Content-Type", htmlutf8) + n, err := w.Write([]byte("api/" + format + "/" + tags)) + if err != nil || n == 0 { + log.Printf("Error writing to HTTP stream: %v\n", err) + } } diff --git a/main.go b/main.go index 06d124a..d8a0614 100644 --- a/main.go +++ b/main.go @@ -8,17 +8,19 @@ import ( "github.com/gorilla/mux" ) +const getwtxt = "0.1" + func main() { - log.Printf("getwtxt v0.1\n") + log.Printf("getwtxt " + getwtxt + "\n") serv := mux.NewRouter() serv.HandleFunc("/", indexHandler) - serv.HandleFunc("/api/", apiBaseHandler) - serv.HandleFunc("/api/{format:plain}", apiFormatHandler) - serv.HandleFunc("/api/{format:plain}/{endpoint:mentions|users|tweets}", apiEndpointHandler) - serv.HandleFunc("/api/{format:plain}/tags/{tags:[a-zA-Z0-9]+}", apiTagsHandler) - serv.HandleFunc("/api/{format:plain}/tags", apiTagsBaseHandler) + serv.HandleFunc("/{api:(?:api|api/)}", apiBaseHandler) + serv.HandleFunc("/api/{format:(?:plain|plain/)}", apiFormatHandler) + serv.HandleFunc("/api/{format:(?:plain)}/{endpoint:(?:mentions|mentions/|users|users/|tweets|tweets/)}", apiEndpointHandler) + serv.HandleFunc("/api/{format:(?:plain)}/tags/{tags:[a-zA-Z0-9]+}", apiTagsHandler) + serv.HandleFunc("/api/{format:(?:plain)}/{tagpathfixer:(?:tags|tags/)}", apiTagsBaseHandler) log.Fatalln(http.ListenAndServe(":8080", handlers.CompressHandler(serv))) } diff --git a/types.go b/types.go index fa9b8aa..7cfa7d6 100644 --- a/types.go +++ b/types.go @@ -2,7 +2,8 @@ package main import "regexp" -const textutf8 = "text/plain; charset=utf8" +const txtutf8 = "text/plain; charset=utf8" +const htmlutf8 = "text/html; charset=utf8" type configuration struct { port string |