55 lines
1.6 KiB
Go
55 lines
1.6 KiB
Go
|
package server
|
||
|
|
||
|
import (
|
||
|
"hacklab.nilfm.cc/quartzgun/renderer"
|
||
|
"hacklab.nilfm.cc/quartzgun/router"
|
||
|
"html/template"
|
||
|
"net/http"
|
||
|
)
|
||
|
|
||
|
func apiConfigureAdapters(next http.Handler) http.Handler {
|
||
|
return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
|
||
|
w.WriteHeader(201)
|
||
|
next.ServeHTTP(w, req)
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func apiGetAdapters(next http.Handler) http.Handler {
|
||
|
return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
|
||
|
w.WriteHeader(201)
|
||
|
next.ServeHTTP(w, req)
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func apiAdapterSubscribe(next http.Handler) http.Handler {
|
||
|
return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
|
||
|
w.WriteHeader(201)
|
||
|
next.ServeHTTP(w, req)
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func ProtectWithSubscriberKey(next http.Handler) http.Handler {
|
||
|
return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
|
||
|
w.WriteHeader(201)
|
||
|
next.ServeHTTP(w, req)
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func apiMux() http.Handler {
|
||
|
errTemplate, err := template.New("err").Parse("{{ $params := (.Context).Value \"params\" }}<html><body><h1>ERROR {{ $params.ErrorCode }}</h1><p class='error'>{{ $params.ErrorMessage }}</p></body></html>")
|
||
|
if err != nil {
|
||
|
panic("error template was malformed")
|
||
|
}
|
||
|
rtr := &router.Router{
|
||
|
Fallback: *errTemplate,
|
||
|
}
|
||
|
|
||
|
// adapters (POST & GET)
|
||
|
rtr.Post("/adapters", ProtectWithSubscriberKey(apiConfigureAdapters(renderer.JSON("data"))))
|
||
|
rtr.Get("/adapters", ProtectWithSubscriberKey(apiGetAdapters(renderer.JSON("data"))))
|
||
|
// adapters/:name/subscribe
|
||
|
rtr.Post(`/adapters/(?P<id>\S+)/subscribe`, ProtectWithSubscriberKey(apiAdapterSubscribe(renderer.JSON("data"))))
|
||
|
|
||
|
return http.HandlerFunc(rtr.ServeHTTP)
|
||
|
}
|