mirror of
https://github.com/m1k1o/neko.git
synced 2024-07-24 14:40:50 +12:00
use Chi Router instead of Chi Mux.
This commit is contained in:
parent
a18482b54e
commit
40b986c8be
@ -20,8 +20,6 @@ func New(
|
||||
}
|
||||
}
|
||||
|
||||
func (h *MemberHandler) Router() *chi.Mux {
|
||||
r := chi.NewRouter()
|
||||
|
||||
return r
|
||||
func (h *MemberHandler) Route(r chi.Router) {
|
||||
|
||||
}
|
||||
|
@ -26,9 +26,7 @@ func New(
|
||||
}
|
||||
}
|
||||
|
||||
func (h *RoomHandler) Router() *chi.Mux {
|
||||
r := chi.NewRouter()
|
||||
|
||||
func (h *RoomHandler) Route(r chi.Router) {
|
||||
// TODO: Authorizaton.
|
||||
r.Route("/screen", func(r chi.Router) {
|
||||
r.Get("/", h.ScreenConfiguration)
|
||||
@ -41,6 +39,4 @@ func (h *RoomHandler) Router() *chi.Mux {
|
||||
r.Get("/", h.ClipboardRead)
|
||||
r.Post("/", h.ClipboardWrite)
|
||||
})
|
||||
|
||||
return r
|
||||
}
|
||||
|
@ -37,14 +37,14 @@ func New(
|
||||
}
|
||||
}
|
||||
|
||||
func (api *ApiManagerCtx) Mount(r *chi.Mux) {
|
||||
func (api *ApiManagerCtx) Route(r chi.Router) {
|
||||
r.Use(api.Authenticate)
|
||||
|
||||
memberHandler := member.New(api.sessions)
|
||||
r.Mount("/member", memberHandler.Router())
|
||||
r.Route("/member", memberHandler.Route)
|
||||
|
||||
roomHandler := room.New(api.sessions, api.desktop, api.capture)
|
||||
r.Mount("/room", roomHandler.Router())
|
||||
r.Route("/room", roomHandler.Route)
|
||||
|
||||
r.Get("/test", func(w http.ResponseWriter, r *http.Request) {
|
||||
session, _ := r.Context().Value(keySessionCtx).(types.Session)
|
||||
|
@ -1,101 +0,0 @@
|
||||
package endpoint
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"runtime/debug"
|
||||
|
||||
"github.com/go-chi/chi/middleware"
|
||||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
|
||||
type (
|
||||
Endpoint func(http.ResponseWriter, *http.Request) error
|
||||
|
||||
ErrResponse struct {
|
||||
Status int `json:"status,omitempty"`
|
||||
Err string `json:"error,omitempty"`
|
||||
Message string `json:"message,omitempty"`
|
||||
Details string `json:"details,omitempty"`
|
||||
Code string `json:"code,omitempty"`
|
||||
RequestID string `json:"request,omitempty"`
|
||||
}
|
||||
)
|
||||
|
||||
func Handle(handler Endpoint) http.HandlerFunc {
|
||||
fn := func(w http.ResponseWriter, r *http.Request) {
|
||||
if err := handler(w, r); err != nil {
|
||||
WriteError(w, r, err)
|
||||
}
|
||||
}
|
||||
|
||||
return http.HandlerFunc(fn)
|
||||
}
|
||||
|
||||
var nonErrorsCodes = map[int]bool{
|
||||
404: true,
|
||||
}
|
||||
|
||||
func errResponse(input interface{}) *ErrResponse {
|
||||
var res *ErrResponse
|
||||
var err interface{}
|
||||
|
||||
//nolint
|
||||
switch input.(type) {
|
||||
case *HandlerError:
|
||||
e := input.(*HandlerError)
|
||||
res = &ErrResponse{
|
||||
Status: e.Status,
|
||||
Err: http.StatusText(e.Status),
|
||||
Message: e.Message,
|
||||
}
|
||||
err = e.Err
|
||||
default:
|
||||
res = &ErrResponse{
|
||||
Status: http.StatusInternalServerError,
|
||||
Err: http.StatusText(http.StatusInternalServerError),
|
||||
}
|
||||
err = input
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
switch err.(type) {
|
||||
case *error:
|
||||
e := err.(error)
|
||||
res.Details = e.Error()
|
||||
default:
|
||||
res.Details = fmt.Sprintf("%+v", err)
|
||||
}
|
||||
}
|
||||
|
||||
return res
|
||||
}
|
||||
|
||||
func WriteError(w http.ResponseWriter, r *http.Request, err interface{}) {
|
||||
hlog := log.With().
|
||||
Str("module", "http").
|
||||
Logger()
|
||||
|
||||
res := errResponse(err)
|
||||
|
||||
if reqID := middleware.GetReqID(r.Context()); reqID != "" {
|
||||
res.RequestID = reqID
|
||||
}
|
||||
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(res.Status)
|
||||
|
||||
if err := json.NewEncoder(w).Encode(res); err != nil {
|
||||
hlog.Warn().Err(err).Msg("Failed writing json error response")
|
||||
}
|
||||
|
||||
if !nonErrorsCodes[res.Status] {
|
||||
logEntry := middleware.GetLogEntry(r)
|
||||
if logEntry != nil {
|
||||
logEntry.Panic(err, debug.Stack())
|
||||
} else {
|
||||
hlog.Error().Str("stack", string(debug.Stack())).Msgf("%+v", err)
|
||||
}
|
||||
}
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
package endpoint
|
||||
|
||||
import "fmt"
|
||||
|
||||
type HandlerError struct {
|
||||
Status int
|
||||
Message string
|
||||
Err error
|
||||
}
|
||||
|
||||
func (e *HandlerError) Error() string {
|
||||
if e.Err != nil {
|
||||
return fmt.Sprintf("%s: %s", e.Message, e.Err.Error())
|
||||
}
|
||||
|
||||
return e.Message
|
||||
}
|
@ -2,7 +2,6 @@ package http
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"os"
|
||||
|
||||
@ -13,7 +12,7 @@ import (
|
||||
|
||||
"demodesk/neko/internal/types"
|
||||
"demodesk/neko/internal/config"
|
||||
"demodesk/neko/internal/http/endpoint"
|
||||
"demodesk/neko/internal/utils"
|
||||
)
|
||||
|
||||
type HttpManagerCtx struct {
|
||||
@ -31,13 +30,11 @@ func New(WebSocketManager types.WebSocketManager, ApiManager types.ApiManager, c
|
||||
router.Use(middleware.RequestID) // Create a request ID for each request
|
||||
router.Use(Logger) // Log API request calls using custom logger function
|
||||
|
||||
ApiManager.Mount(router)
|
||||
router.Route("/api", ApiManager.Route)
|
||||
|
||||
router.Get("/ws", func(w http.ResponseWriter, r *http.Request) {
|
||||
if WebSocketManager.Upgrade(w, r) != nil {
|
||||
//nolint
|
||||
w.Write([]byte("unable to upgrade your connection to a websocket"))
|
||||
}
|
||||
//nolint
|
||||
WebSocketManager.Upgrade(w, r)
|
||||
})
|
||||
|
||||
if conf.Static != "" {
|
||||
@ -51,11 +48,8 @@ func New(WebSocketManager types.WebSocketManager, ApiManager types.ApiManager, c
|
||||
})
|
||||
}
|
||||
|
||||
router.NotFound(endpoint.Handle(func(w http.ResponseWriter, r *http.Request) error {
|
||||
return &endpoint.HandlerError{
|
||||
Status: http.StatusNotFound,
|
||||
Message: fmt.Sprintf("Endpoint '%s' was not found.", r.RequestURI),
|
||||
}
|
||||
router.NotFound(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
utils.HttpNotFound(w)
|
||||
}))
|
||||
|
||||
http := &http.Server{
|
||||
|
@ -5,5 +5,5 @@ import (
|
||||
)
|
||||
|
||||
type ApiManager interface {
|
||||
Mount(r *chi.Mux)
|
||||
Route(r chi.Router)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user