diff options
author | Julien Dessaux | 2021-04-21 17:23:07 +0200 |
---|---|---|
committer | Julien Dessaux | 2021-04-21 17:23:07 +0200 |
commit | 4a2fb7e82d5d617298cb28b66485fc6f30c55781 (patch) | |
tree | 4ae55d8208e3ebf603f3a17ac56f6efd0e011efc /internal/webui/utils.go | |
parent | Implemented the ResumeSession function (diff) | |
download | trains-4a2fb7e82d5d617298cb28b66485fc6f30c55781.tar.gz trains-4a2fb7e82d5d617298cb28b66485fc6f30c55781.tar.bz2 trains-4a2fb7e82d5d617298cb28b66485fc6f30c55781.zip |
Reworked the webui package, added authentication feature and tests
Diffstat (limited to '')
-rw-r--r-- | internal/webui/utils.go | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/internal/webui/utils.go b/internal/webui/utils.go new file mode 100644 index 0000000..7152401 --- /dev/null +++ b/internal/webui/utils.go @@ -0,0 +1,60 @@ +package webui + +import ( + "embed" + "log" + "net/http" + + "git.adyxax.org/adyxax/trains/pkg/config" + "git.adyxax.org/adyxax/trains/pkg/database" + "git.adyxax.org/adyxax/trains/pkg/navitia_api_client" +) + +//go:embed html/* +var templatesFS embed.FS + +//go:embed static/* +var staticFS embed.FS + +// the environment that will be passed to our handlers +type env struct { + conf *config.Config + dbEnv *database.DBEnv + navitia *navitia_api_client.Client +} + +type handlerError interface { + error + Status() int +} + +type statusError struct { + code int + err error +} + +func (e *statusError) Error() string { return e.err.Error() } +func (e *statusError) Status() int { return e.code } +func newStatusError(code int, err error) error { return &statusError{code: code, err: err} } + +type handler struct { + e *env + h func(e *env, w http.ResponseWriter, r *http.Request) error +} + +// ServeHTTP allows our handler type to satisfy http.Handler +func (h handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + path := r.URL.Path + err := h.h(h.e, w, r) + if err != nil { + switch e := err.(type) { + case handlerError: + log.Printf("HTTP %d - %s", e.Status(), e) + http.Error(w, e.Error(), e.Status()) + default: + // Any error types we don't specifically look out for default to serving a HTTP 500 + log.Printf("%s : handler returned an unexpected error : %+v", path, e) + http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) + } + } +} |