mirror of
https://github.com/m1k1o/neko.git
synced 2024-07-24 14:40:50 +12:00
remove control protection.
This commit is contained in:
parent
5c683fb1b8
commit
014b68e1fb
@ -9,8 +9,6 @@ type WebSocket struct {
|
|||||||
Password string
|
Password string
|
||||||
AdminPassword string
|
AdminPassword string
|
||||||
Locks []string
|
Locks []string
|
||||||
|
|
||||||
ControlProtection bool
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (WebSocket) Init(cmd *cobra.Command) error {
|
func (WebSocket) Init(cmd *cobra.Command) error {
|
||||||
@ -29,11 +27,6 @@ func (WebSocket) Init(cmd *cobra.Command) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd.PersistentFlags().Bool("control_protection", false, "control protection means, users can gain control only if at least one admin is in the room")
|
|
||||||
if err := viper.BindPFlag("control_protection", cmd.PersistentFlags().Lookup("control_protection")); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -41,6 +34,4 @@ func (s *WebSocket) Set() {
|
|||||||
s.Password = viper.GetString("password")
|
s.Password = viper.GetString("password")
|
||||||
s.AdminPassword = viper.GetString("password_admin")
|
s.AdminPassword = viper.GetString("password_admin")
|
||||||
s.Locks = viper.GetStringSlice("locks")
|
s.Locks = viper.GetStringSlice("locks")
|
||||||
|
|
||||||
s.ControlProtection = viper.GetBool("control_protection")
|
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,6 @@ type Stats struct {
|
|||||||
LastAdminLeftAt *time.Time `json:"last_admin_left_at"`
|
LastAdminLeftAt *time.Time `json:"last_admin_left_at"`
|
||||||
LastUserLeftAt *time.Time `json:"last_user_left_at"`
|
LastUserLeftAt *time.Time `json:"last_user_left_at"`
|
||||||
|
|
||||||
ControlProtection bool `json:"control_protection"`
|
|
||||||
ImplicitControl bool `json:"implicit_control"`
|
ImplicitControl bool `json:"implicit_control"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,19 +20,11 @@ import (
|
|||||||
"m1k1o/neko/internal/websocket/state"
|
"m1k1o/neko/internal/websocket/state"
|
||||||
)
|
)
|
||||||
|
|
||||||
const CONTROL_PROTECTION_SESSION = "by_control_protection"
|
|
||||||
|
|
||||||
func New(sessions types.SessionManager, desktop types.DesktopManager, capture types.CaptureManager, webrtc types.WebRTCManager, conf *config.WebSocket) *WebSocketHandler {
|
func New(sessions types.SessionManager, desktop types.DesktopManager, capture types.CaptureManager, webrtc types.WebRTCManager, conf *config.WebSocket) *WebSocketHandler {
|
||||||
logger := log.With().Str("module", "websocket").Logger()
|
logger := log.With().Str("module", "websocket").Logger()
|
||||||
|
|
||||||
state := state.New()
|
state := state.New()
|
||||||
|
|
||||||
// if control protection is enabled
|
|
||||||
if conf.ControlProtection {
|
|
||||||
state.Lock("control", CONTROL_PROTECTION_SESSION)
|
|
||||||
logger.Info().Msgf("control locked on behalf of control protection")
|
|
||||||
}
|
|
||||||
|
|
||||||
// apply default locks
|
// apply default locks
|
||||||
for _, lock := range conf.Locks {
|
for _, lock := range conf.Locks {
|
||||||
state.Lock(lock, "") // empty session ID
|
state.Lock(lock, "") // empty session ID
|
||||||
@ -113,24 +105,6 @@ func (ws *WebSocketHandler) Start() {
|
|||||||
ws.logger.Debug().Str("id", e.Id).Msg("session connected")
|
ws.logger.Debug().Str("id", e.Id).Msg("session connected")
|
||||||
}
|
}
|
||||||
|
|
||||||
// if control protection is enabled and at least one admin
|
|
||||||
// and if room was locked on behalf control protection, unlock
|
|
||||||
sess, ok := ws.state.GetLocked("control")
|
|
||||||
if ok && ws.conf.ControlProtection && sess == CONTROL_PROTECTION_SESSION && len(ws.sessions.Admins()) > 0 {
|
|
||||||
ws.state.Unlock("control")
|
|
||||||
ws.sessions.SetControlLocked(false) // TODO: Handle locks in sessions as flags.
|
|
||||||
ws.logger.Info().Msgf("control unlocked on behalf of control protection")
|
|
||||||
|
|
||||||
if err := ws.sessions.Broadcast(
|
|
||||||
message.AdminLock{
|
|
||||||
Event: event.ADMIN_UNLOCK,
|
|
||||||
ID: e.Id,
|
|
||||||
Resource: "control",
|
|
||||||
}, nil); err != nil {
|
|
||||||
ws.logger.Warn().Err(err).Msgf("broadcasting event %s has failed", event.ADMIN_UNLOCK)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// remove outdated stats
|
// remove outdated stats
|
||||||
if e.Session.Admin() {
|
if e.Session.Admin() {
|
||||||
ws.lastAdminLeftAt = nil
|
ws.lastAdminLeftAt = nil
|
||||||
@ -147,25 +121,6 @@ func (ws *WebSocketHandler) Start() {
|
|||||||
membersCount := len(ws.sessions.Members())
|
membersCount := len(ws.sessions.Members())
|
||||||
adminCount := len(ws.sessions.Admins())
|
adminCount := len(ws.sessions.Admins())
|
||||||
|
|
||||||
// if control protection is enabled and no admin
|
|
||||||
// and room is not locked, lock
|
|
||||||
ok := ws.state.IsLocked("control")
|
|
||||||
if !ok && ws.conf.ControlProtection && adminCount == 0 {
|
|
||||||
ws.state.Lock("control", CONTROL_PROTECTION_SESSION)
|
|
||||||
ws.sessions.SetControlLocked(true) // TODO: Handle locks in sessions as flags.
|
|
||||||
ws.logger.Info().Msgf("control locked and released on behalf of control protection")
|
|
||||||
ws.handler.AdminRelease(e.Id, e.Session)
|
|
||||||
|
|
||||||
if err := ws.sessions.Broadcast(
|
|
||||||
message.AdminLock{
|
|
||||||
Event: event.ADMIN_LOCK,
|
|
||||||
ID: e.Id,
|
|
||||||
Resource: "control",
|
|
||||||
}, nil); err != nil {
|
|
||||||
ws.logger.Warn().Err(err).Msgf("broadcasting event %s has failed", event.ADMIN_LOCK)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// if this was the last admin
|
// if this was the last admin
|
||||||
if e.Session.Admin() && adminCount == 0 {
|
if e.Session.Admin() && adminCount == 0 {
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
@ -312,7 +267,6 @@ func (ws *WebSocketHandler) Stats() types.Stats {
|
|||||||
LastAdminLeftAt: ws.lastAdminLeftAt,
|
LastAdminLeftAt: ws.lastAdminLeftAt,
|
||||||
LastUserLeftAt: ws.lastUserLeftAt,
|
LastUserLeftAt: ws.lastUserLeftAt,
|
||||||
|
|
||||||
ControlProtection: ws.conf.ControlProtection,
|
|
||||||
ImplicitControl: ws.webrtc.ImplicitControl(),
|
ImplicitControl: ws.webrtc.ImplicitControl(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user