mirror of
https://github.com/m1k1o/neko.git
synced 2024-07-24 14:40:50 +12:00
more tweeks
This commit is contained in:
@ -1,14 +0,0 @@
|
||||
package http
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"n.eko.moe/neko/internal/http/handler"
|
||||
)
|
||||
|
||||
func New(bind, password, static string) *http.Server {
|
||||
return &http.Server{
|
||||
Addr: bind,
|
||||
Handler: handler.New(password, static),
|
||||
}
|
||||
}
|
@ -1,55 +0,0 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"os"
|
||||
|
||||
"n.eko.moe/neko/internal/http/middleware"
|
||||
"n.eko.moe/neko/internal/http/endpoint"
|
||||
"n.eko.moe/neko/internal/webrtc"
|
||||
|
||||
"github.com/go-chi/chi"
|
||||
)
|
||||
|
||||
type Handler struct {
|
||||
router *chi.Mux
|
||||
manager *webrtc.WebRTCManager
|
||||
}
|
||||
|
||||
func New(password, static string) *chi.Mux {
|
||||
router := chi.NewRouter()
|
||||
manager, err := webrtc.NewManager(password)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
handler := &Handler{
|
||||
router: router,
|
||||
manager: manager,
|
||||
}
|
||||
|
||||
router.Use(middleware.Recoverer) // Recover from panics without crashing server
|
||||
// router.Use(middleware.Logger) // Log API request calls
|
||||
|
||||
router.Get("/ping", endpoint.Handle(handler.Ping))
|
||||
router.Get("/ws", endpoint.Handle(handler.WebSocket))
|
||||
|
||||
fs := http.FileServer(http.Dir(static))
|
||||
router.Get("/*", func(w http.ResponseWriter, r *http.Request) {
|
||||
if _, err := os.Stat(static + r.RequestURI); os.IsNotExist(err) {
|
||||
http.StripPrefix(r.RequestURI, fs).ServeHTTP(w, r)
|
||||
} else {
|
||||
fs.ServeHTTP(w, r)
|
||||
}
|
||||
})
|
||||
|
||||
router.NotFound(endpoint.Handle(func(w http.ResponseWriter, r *http.Request) error {
|
||||
return &endpoint.HandlerError{
|
||||
Status: http.StatusNotFound,
|
||||
Message: fmt.Sprintf("Endpoint '%s' is not avalible", r.RequestURI),
|
||||
}
|
||||
}))
|
||||
|
||||
return router
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
package handler
|
||||
|
||||
import "net/http"
|
||||
|
||||
func (h *Handler) Ping(w http.ResponseWriter, r *http.Request) error {
|
||||
w.Header().Set("Content-Type", "text/plain")
|
||||
w.WriteHeader(http.StatusOK)
|
||||
w.Write([]byte("."))
|
||||
return nil
|
||||
}
|
@ -1,9 +0,0 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
)
|
||||
|
||||
func (h *Handler) WebSocket(w http.ResponseWriter, r *http.Request) error {
|
||||
return h.manager.Upgrade(w, r)
|
||||
}
|
@ -8,7 +8,7 @@ import (
|
||||
)
|
||||
|
||||
func Config(name string) {
|
||||
config := viper.GetString("neko.config")
|
||||
config := viper.GetString("config")
|
||||
|
||||
if config != "" {
|
||||
viper.SetConfigFile(config) // Use config file from the flag.
|
||||
@ -35,8 +35,8 @@ func Config(name string) {
|
||||
|
||||
file := viper.ConfigFileUsed()
|
||||
logger := log.With().
|
||||
Bool("debug", viper.GetBool("neko.debug")).
|
||||
Str("logging", viper.GetString("neko.logs")).
|
||||
Bool("debug", viper.GetBool("debug")).
|
||||
Str("logging", viper.GetString("logs")).
|
||||
Str("config", file).
|
||||
Logger()
|
||||
|
||||
|
@ -18,13 +18,13 @@ func Logs(name string) {
|
||||
zerolog.TimeFieldFormat = ""
|
||||
zerolog.SetGlobalLevel(zerolog.InfoLevel)
|
||||
|
||||
if viper.GetBool("neko.debug") {
|
||||
if viper.GetBool("debug") {
|
||||
zerolog.SetGlobalLevel(zerolog.DebugLevel)
|
||||
}
|
||||
|
||||
console := zerolog.ConsoleWriter{Out: os.Stdout}
|
||||
|
||||
if !viper.GetBool("neko.logs") {
|
||||
if !viper.GetBool("logs") {
|
||||
log.Logger = log.Output(console)
|
||||
} else {
|
||||
|
||||
|
@ -18,10 +18,14 @@ const (
|
||||
)
|
||||
|
||||
func (manager *WebRTCManager) Upgrade(w http.ResponseWriter, r *http.Request) error {
|
||||
manager.logger.
|
||||
Info().
|
||||
Msg("Attempting to upgrade ws")
|
||||
|
||||
socket, err := manager.upgrader.Upgrade(w, r, nil)
|
||||
if err != nil {
|
||||
manager.logger.Error().Err(err).Msg("Failed to upgrade websocket!")
|
||||
return nil
|
||||
return err
|
||||
}
|
||||
|
||||
sessionID, ok := manager.authenticate(r)
|
||||
|
@ -9,9 +9,12 @@ import (
|
||||
"runtime"
|
||||
|
||||
"n.eko.moe/neko/internal/config"
|
||||
"n.eko.moe/neko/internal/http/endpoint"
|
||||
"n.eko.moe/neko/internal/http/middleware"
|
||||
"n.eko.moe/neko/internal/structs"
|
||||
api "n.eko.moe/neko/internal/http"
|
||||
"n.eko.moe/neko/internal/webrtc"
|
||||
|
||||
"github.com/go-chi/chi"
|
||||
"github.com/rs/zerolog"
|
||||
"github.com/rs/zerolog/log"
|
||||
"github.com/spf13/cobra"
|
||||
@ -68,7 +71,49 @@ func (neko *Neko) Preflight() {
|
||||
}
|
||||
|
||||
func (neko *Neko) Start() {
|
||||
server := api.New(neko.Serve.Bind, neko.Serve.Password, neko.Serve.Static)
|
||||
router := chi.NewRouter()
|
||||
|
||||
manager, err := webrtc.NewManager(neko.Serve.Password)
|
||||
if err != nil {
|
||||
neko.Logger.Panic().Err(err).Msg("Can not start webrtc manager")
|
||||
}
|
||||
|
||||
router.Use(middleware.Recoverer) // Recover from panics without crashing server
|
||||
router.Use(middleware.RequestID) // Create a request ID for each request
|
||||
router.Use(middleware.Logger) // Log API request calls
|
||||
|
||||
router.Get("/ping", func(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Set("Content-Type", "text/plain")
|
||||
w.WriteHeader(http.StatusOK)
|
||||
w.Write([]byte("."))
|
||||
})
|
||||
|
||||
router.Get("/ws", func(w http.ResponseWriter, r *http.Request) {
|
||||
if err := manager.Upgrade(w, r); err != nil {
|
||||
neko.Logger.Error().Err(err).Msg("session.destroy has failed")
|
||||
}
|
||||
})
|
||||
|
||||
fs := http.FileServer(http.Dir(neko.Serve.Static))
|
||||
router.Get("/*", func(w http.ResponseWriter, r *http.Request) {
|
||||
if _, err := os.Stat(neko.Serve.Static + r.RequestURI); os.IsNotExist(err) {
|
||||
http.StripPrefix(r.RequestURI, fs).ServeHTTP(w, r)
|
||||
} else {
|
||||
fs.ServeHTTP(w, r)
|
||||
}
|
||||
})
|
||||
|
||||
router.NotFound(endpoint.Handle(func(w http.ResponseWriter, r *http.Request) error {
|
||||
return &endpoint.HandlerError{
|
||||
Status: http.StatusNotFound,
|
||||
Message: fmt.Sprintf("Endpoint '%s' is not avalible", r.RequestURI),
|
||||
}
|
||||
}))
|
||||
|
||||
server := &http.Server{
|
||||
Addr: neko.Serve.Bind,
|
||||
Handler: router,
|
||||
}
|
||||
|
||||
if neko.Serve.Cert != "" && neko.Serve.Key != "" {
|
||||
go func() {
|
||||
|
Reference in New Issue
Block a user