move locks and bans to state.

This commit is contained in:
Miroslav Šedivý
2022-09-13 20:04:43 +02:00
parent 06e25df962
commit e045bd8a1e
6 changed files with 88 additions and 33 deletions

View File

@ -14,8 +14,7 @@ func (h *MessageHandler) adminLock(id string, session types.Session, payload *me
return nil
}
_, ok := h.Locked[payload.Resource]
if ok {
if h.state.IsLocked(payload.Resource) {
h.logger.Debug().Str("resource", payload.Resource).Msg("resource already locked...")
return nil
}
@ -30,7 +29,7 @@ func (h *MessageHandler) adminLock(id string, session types.Session, payload *me
h.sessions.SetControlLocked(true)
}
h.Locked[payload.Resource] = id
h.state.Lock(payload.Resource, id)
if err := h.sessions.Broadcast(
message.AdminLock{
@ -51,8 +50,7 @@ func (h *MessageHandler) adminUnlock(id string, session types.Session, payload *
return nil
}
_, ok := h.Locked[payload.Resource]
if !ok {
if !h.state.IsLocked(payload.Resource) {
h.logger.Debug().Str("resource", payload.Resource).Msg("resource not locked...")
return nil
}
@ -62,7 +60,7 @@ func (h *MessageHandler) adminUnlock(id string, session types.Session, payload *
h.sessions.SetControlLocked(false)
}
delete(h.Locked, payload.Resource)
h.state.Unlock(payload.Resource)
if err := h.sessions.Broadcast(
message.AdminLock{
@ -302,7 +300,7 @@ func (h *MessageHandler) adminBan(id string, session types.Session, payload *mes
}
h.logger.Debug().Str("address", remote).Msg("adding address to banned")
h.Banned[address[0]] = id
h.state.Ban(address[0], id)
if err := target.Kick("banned"); err != nil {
return err

View File

@ -34,8 +34,7 @@ func (h *MessageHandler) controlRequest(id string, session types.Session) error
// check for host
if !h.sessions.HasHost() {
// check if control is locked or user is admin
_, ok := h.Locked["control"]
if ok && !session.Admin() {
if h.state.IsLocked("control") && !session.Admin() {
h.logger.Debug().Msg("control is locked")
return nil
}
@ -98,8 +97,7 @@ func (h *MessageHandler) controlGive(id string, session types.Session, payload *
}
// check if control is locked or giver is admin
_, ok := h.Locked["control"]
if ok && !session.Admin() {
if h.state.IsLocked("control") && !session.Admin() {
h.logger.Debug().Msg("control is locked")
return nil
}

View File

@ -11,6 +11,7 @@ import (
"m1k1o/neko/internal/types/event"
"m1k1o/neko/internal/types/message"
"m1k1o/neko/internal/utils"
"m1k1o/neko/internal/websocket/state"
)
type MessageHandler struct {
@ -20,9 +21,7 @@ type MessageHandler struct {
capture types.CaptureManager
webrtc types.WebRTCManager
broadcast types.BroadcastManager
Banned map[string]string // IP -> session ID (that banned it)
Locked map[string]string // resource name -> session ID (that locked it)
state *state.State
}
func New(
@ -31,6 +30,7 @@ func New(
capture types.CaptureManager,
webrtc types.WebRTCManager,
broadcast types.BroadcastManager,
state *state.State,
) *MessageHandler {
return &MessageHandler{
logger: log.With().Str("module", "websocket").Str("submodule", "handler").Logger(),
@ -39,8 +39,7 @@ func New(
capture: capture,
webrtc: webrtc,
broadcast: broadcast,
Banned: make(map[string]string),
Locked: make(map[string]string),
state: state,
}
}
@ -48,15 +47,13 @@ func (h *MessageHandler) Connected(admin bool, address string) (bool, string) {
if address == "" {
h.logger.Debug().Msg("no remote address")
} else {
_, ok := h.Banned[address]
if ok {
if h.state.IsBanned(address) {
h.logger.Debug().Str("address", address).Msg("banned")
return false, "banned"
}
}
_, ok := h.Locked["login"]
if ok && !admin {
if h.state.IsLocked("login") && !admin {
h.logger.Debug().Msg("server locked")
return false, "locked"
}

View File

@ -16,7 +16,7 @@ func (h *MessageHandler) SessionCreated(id string, session types.Session) error
if err := session.Send(message.SystemInit{
Event: event.SYSTEM_INIT,
ImplicitHosting: h.webrtc.ImplicitControl(),
Locks: h.Locked,
Locks: h.state.AllLocked(),
}); err != nil {
h.logger.Warn().Str("id", id).Err(err).Msgf("sending event %s has failed", event.SYSTEM_INIT)
return err