fix logging and server addr.

This commit is contained in:
Miroslav Šedivý 2024-07-24 23:41:32 +02:00
parent 679157ef6d
commit 45c90ce9c2
2 changed files with 48 additions and 24 deletions

View file

@ -3,7 +3,6 @@ package legacy
import ( import (
"errors" "errors"
"fmt" "fmt"
"log"
"net/http" "net/http"
oldEvent "github.com/demodesk/neko/internal/http/legacy/event" oldEvent "github.com/demodesk/neko/internal/http/legacy/event"
@ -14,6 +13,8 @@ import (
"github.com/demodesk/neko/pkg/types/message" "github.com/demodesk/neko/pkg/types/message"
"github.com/demodesk/neko/pkg/utils" "github.com/demodesk/neko/pkg/utils"
"github.com/gorilla/websocket" "github.com/gorilla/websocket"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
) )
var ( var (
@ -32,19 +33,22 @@ var (
) )
type LegacyHandler struct { type LegacyHandler struct {
logger zerolog.Logger
serverAddr string
} }
func New() *LegacyHandler { func New() *LegacyHandler {
// Init // Init
return &LegacyHandler{} return &LegacyHandler{
logger: log.With().Str("module", "legacy").Logger(),
serverAddr: "127.0.0.1:8080",
}
} }
func (h *LegacyHandler) Route(r types.Router) { func (h *LegacyHandler) Route(r types.Router) {
log.Println("legacy handler route")
r.Get("/ws", func(w http.ResponseWriter, r *http.Request) error { r.Get("/ws", func(w http.ResponseWriter, r *http.Request) error {
s := newSession("http://127.0.0.1:8080") s := newSession(h.logger, h.serverAddr)
// create a new websocket connection // create a new websocket connection
connClient, err := DefaultUpgrader.Upgrade(w, r, nil) connClient, err := DefaultUpgrader.Upgrade(w, r, nil)
@ -57,28 +61,35 @@ func (h *LegacyHandler) Route(r types.Router) {
s.connClient = connClient s.connClient = connClient
// create a new session // create a new session
username := r.URL.Query().Get("username")
password := r.URL.Query().Get("password") password := r.URL.Query().Get("password")
token, err := s.create(password) token, err := s.create(username, password)
if err != nil { if err != nil {
log.Printf("couldn't create a new session: %v", err) h.logger.Error().Err(err).Msg("couldn't create a new session")
s.toClient(&oldMessage.SystemMessage{ s.toClient(&oldMessage.SystemMessage{
Event: oldEvent.SYSTEM_DISCONNECT, Event: oldEvent.SYSTEM_DISCONNECT,
Title: "couldn't create a new session", Title: "couldn't create a new session",
Message: err.Error(), Message: err.Error(),
}) })
// we can't return HTTP error here because the connection is already upgraded
return nil return nil
} }
defer s.destroy() defer s.destroy()
// dial to the remote backend // dial to the remote backend
connBackend, _, err := DefaultDialer.Dial("ws://127.0.0.1:8080/api/ws?token="+token, nil) connBackend, _, err := DefaultDialer.Dial("ws://"+h.serverAddr+"/api/ws?token="+token, nil)
if err != nil { if err != nil {
log.Printf("couldn't dial to the remote backend: %v", err) h.logger.Error().Err(err).Msg("couldn't dial to the remote backend")
s.toClient(&oldMessage.SystemMessage{ s.toClient(&oldMessage.SystemMessage{
Event: oldEvent.SYSTEM_DISCONNECT, Event: oldEvent.SYSTEM_DISCONNECT,
Title: "couldn't dial to the remote backend", Title: "couldn't dial to the remote backend",
Message: err.Error(), Message: err.Error(),
}) })
// we can't return HTTP error here because the connection is already upgraded
return nil return nil
} }
defer connBackend.Close() defer connBackend.Close()
@ -86,12 +97,15 @@ func (h *LegacyHandler) Route(r types.Router) {
// request signal // request signal
if err = s.toBackend(event.SIGNAL_REQUEST, message.SignalRequest{}); err != nil { if err = s.toBackend(event.SIGNAL_REQUEST, message.SignalRequest{}); err != nil {
log.Printf("couldn't request signal: %v", err) h.logger.Error().Err(err).Msg("couldn't request signal")
s.toClient(&oldMessage.SystemMessage{ s.toClient(&oldMessage.SystemMessage{
Event: oldEvent.SYSTEM_DISCONNECT, Event: oldEvent.SYSTEM_DISCONNECT,
Title: "couldn't request signal", Title: "couldn't request signal",
Message: err.Error(), Message: err.Error(),
}) })
// we can't return HTTP error here because the connection is already upgraded
return nil return nil
} }
@ -120,6 +134,8 @@ func (h *LegacyHandler) Route(r types.Router) {
} }
if errors.Is(err, ErrBackendRespone) { if errors.Is(err, ErrBackendRespone) {
h.logger.Error().Err(err).Msg("backend response error")
s.toClient(&oldMessage.SystemMessage{ s.toClient(&oldMessage.SystemMessage{
Event: oldEvent.SYSTEM_ERROR, Event: oldEvent.SYSTEM_ERROR,
Title: "backend response error", Title: "backend response error",
@ -130,7 +146,7 @@ func (h *LegacyHandler) Route(r types.Router) {
errc <- err errc <- err
break break
} else { } else {
log.Printf("websocketproxy: %v", err) h.logger.Error().Err(err).Msg("couldn't rewrite text message")
} }
} }
} }
@ -151,7 +167,7 @@ func (h *LegacyHandler) Route(r types.Router) {
} }
if e, ok := err.(*websocket.CloseError); !ok || e.Code == websocket.CloseAbnormalClosure { if e, ok := err.(*websocket.CloseError); !ok || e.Code == websocket.CloseAbnormalClosure {
log.Printf(message, err) h.logger.Error().Err(err).Msg(message)
} }
return nil return nil

View file

@ -5,7 +5,6 @@ import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"io" "io"
"log"
"net/http" "net/http"
oldTypes "github.com/demodesk/neko/internal/http/legacy/types" oldTypes "github.com/demodesk/neko/internal/http/legacy/types"
@ -13,6 +12,7 @@ import (
"github.com/demodesk/neko/internal/api" "github.com/demodesk/neko/internal/api"
"github.com/demodesk/neko/pkg/types" "github.com/demodesk/neko/pkg/types"
"github.com/gorilla/websocket" "github.com/gorilla/websocket"
"github.com/rs/zerolog"
) )
var ( var (
@ -21,7 +21,9 @@ var (
) )
type session struct { type session struct {
url string logger zerolog.Logger
serverAddr string
id string id string
token string token string
profile types.MemberProfile profile types.MemberProfile
@ -37,9 +39,10 @@ type session struct {
connBackend *websocket.Conn connBackend *websocket.Conn
} }
func newSession(url string) *session { func newSession(logger zerolog.Logger, serverAddr string) *session {
return &session{ return &session{
url: url, logger: logger,
serverAddr: serverAddr,
client: http.DefaultClient, client: http.DefaultClient,
sessions: make(map[string]*oldTypes.Member), sessions: make(map[string]*oldTypes.Member),
} }
@ -51,7 +54,7 @@ func (s *session) apiReq(method, path string, request, response any) error {
return err return err
} }
req, err := http.NewRequest(method, s.url+path, bytes.NewReader(body)) req, err := http.NewRequest(method, "http://"+s.serverAddr+path, bytes.NewReader(body))
if err != nil { if err != nil {
return err return err
} }
@ -85,6 +88,11 @@ func (s *session) apiReq(method, path string, request, response any) error {
return nil return nil
} }
if response == nil {
io.Copy(io.Discard, res.Body)
return nil
}
return json.NewDecoder(res.Body).Decode(response) return json.NewDecoder(res.Body).Decode(response)
} }
@ -126,12 +134,11 @@ func (s *session) toBackend(event string, payload any) error {
return nil return nil
} }
func (s *session) create(password string) (string, error) { func (s *session) create(username, password string) (string, error) {
data := api.SessionDataPayload{} data := api.SessionDataPayload{}
// pefrom login with arbitrary username that will be changed later
err := s.apiReq(http.MethodPost, "/api/login", api.SessionLoginPayload{ err := s.apiReq(http.MethodPost, "/api/login", api.SessionLoginPayload{
Username: "admin", Username: username,
Password: password, Password: password,
}, &data) }, &data)
if err != nil { if err != nil {
@ -142,8 +149,9 @@ func (s *session) create(password string) (string, error) {
s.token = data.Token s.token = data.Token
s.profile = data.Profile s.profile = data.Profile
// if Cookie auth, the token will be empty
if s.token == "" { if s.token == "" {
return "", fmt.Errorf("token not found") return "", fmt.Errorf("token not found - make sure you are not using Cookie auth on the server")
} }
return data.Token, nil return data.Token, nil
@ -155,6 +163,6 @@ func (s *session) destroy() {
// logout session // logout session
err := s.apiReq(http.MethodPost, "/api/logout", nil, nil) err := s.apiReq(http.MethodPost, "/api/logout", nil, nil)
if err != nil { if err != nil {
log.Println("failed to logout session:", err) s.logger.Error().Err(err).Msg("failed to logout")
} }
} }