add lock controls for users.

This commit is contained in:
Miroslav Šedivý 2021-11-16 22:50:11 +01:00
parent 2290c4a065
commit 61fcf7f699
20 changed files with 277 additions and 113 deletions

View file

@ -8,23 +8,30 @@ import (
"m1k1o/neko/internal/types/message"
)
func (h *MessageHandler) adminLock(id string, session types.Session) error {
func (h *MessageHandler) adminLock(id string, session types.Session, payload *message.AdminLock) error {
if !session.Admin() {
h.logger.Debug().Msg("user not admin")
return nil
}
if h.locked {
h.logger.Debug().Msg("server already locked...")
_, ok := h.locked[payload.Resource]
if ok {
h.logger.Debug().Str("resource", payload.Resource).Msg("resource already locked...")
return nil
}
h.locked = true
if payload.Resource != "login" && payload.Resource != "control" {
h.logger.Debug().Msg("unknown lock resource")
return nil
}
h.locked[payload.Resource] = id
if err := h.sessions.Broadcast(
message.Admin{
Event: event.ADMIN_LOCK,
ID: id,
message.AdminLock{
Event: event.ADMIN_LOCK,
ID: id,
Resource: payload.Resource,
}, nil); err != nil {
h.logger.Warn().Err(err).Msgf("broadcasting event %s has failed", event.ADMIN_LOCK)
return err
@ -33,23 +40,25 @@ func (h *MessageHandler) adminLock(id string, session types.Session) error {
return nil
}
func (h *MessageHandler) adminUnlock(id string, session types.Session) error {
func (h *MessageHandler) adminUnlock(id string, session types.Session, payload *message.AdminLock) error {
if !session.Admin() {
h.logger.Debug().Msg("user not admin")
return nil
}
if !h.locked {
h.logger.Debug().Msg("server not locked...")
_, ok := h.locked[payload.Resource]
if !ok {
h.logger.Debug().Str("resource", payload.Resource).Msg("resource not locked...")
return nil
}
h.locked = false
delete(h.locked, payload.Resource)
if err := h.sessions.Broadcast(
message.Admin{
Event: event.ADMIN_UNLOCK,
ID: id,
message.AdminLock{
Event: event.ADMIN_UNLOCK,
ID: id,
Resource: payload.Resource,
}, nil); err != nil {
h.logger.Warn().Err(err).Msgf("broadcasting event %s has failed", event.ADMIN_UNLOCK)
return err