move locks and bans to state.
This commit is contained in:
@ -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
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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"
|
||||
}
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user