From c876ee6273d576d9b14416cbbc8a43894befee11 Mon Sep 17 00:00:00 2001 From: Ola Bini Date: Sat, 11 Jul 2020 15:52:35 +0000 Subject: [PATCH] Make it possible to customize the super user name --- server/client.go | 4 ++-- server/message.go | 10 +++++----- server/server.go | 22 +++++++++++++++++----- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/server/client.go b/server/client.go index 7ab5e12..a32d315 100644 --- a/server/client.go +++ b/server/client.go @@ -141,9 +141,9 @@ func (client *Client) UserId() int { } // ShownName gets the client's shown name. -func (client *Client) ShownName() string { +func (client *Client) ShownName(suName string) string { if client.IsSuperUser() { - return "SuperUser" + return suName } if client.IsRegistered() { return client.user.Name diff --git a/server/message.go b/server/message.go index 7228f0f..b073dc2 100644 --- a/server/message.go +++ b/server/message.go @@ -519,7 +519,7 @@ func (server *Server) handleUserRemoveMessage(client *Client, msg *Message) { if userremove.Reason != nil { ban.Reason = *userremove.Reason } - ban.Username = removeClient.ShownName() + ban.Username = removeClient.ShownName(server.GetSuperUserName()) ban.CertHash = removeClient.CertHash() ban.Start = time.Now().Unix() ban.Duration = 0 @@ -537,9 +537,9 @@ func (server *Server) handleUserRemoveMessage(client *Client, msg *Message) { } if isBan { - client.Printf("Kick-banned %v (%v)", removeClient.ShownName(), removeClient.Session()) + client.Printf("Kick-banned %v (%v)", removeClient.ShownName(server.GetSuperUserName()), removeClient.Session()) } else { - client.Printf("Kicked %v (%v)", removeClient.ShownName(), removeClient.Session()) + client.Printf("Kicked %v (%v)", removeClient.ShownName(server.GetSuperUserName()), removeClient.Session()) } removeClient.ForceDisconnect() @@ -784,9 +784,9 @@ func (server *Server) handleUserStateMessage(client *Client, msg *Message) { txtmsg := &mumbleproto.TextMessage{} txtmsg.TreeId = append(txtmsg.TreeId, uint32(0)) if target.Recording { - txtmsg.Message = proto.String(fmt.Sprintf("User '%s' started recording", target.ShownName())) + txtmsg.Message = proto.String(fmt.Sprintf("User '%s' started recording", target.ShownName(server.GetSuperUserName()))) } else { - txtmsg.Message = proto.String(fmt.Sprintf("User '%s' stopped recording", target.ShownName())) + txtmsg.Message = proto.String(fmt.Sprintf("User '%s' stopped recording", target.ShownName(server.GetSuperUserName()))) } server.broadcastProtoMessageWithPredicate(txtmsg, func(client *Client) bool { diff --git a/server/server.go b/server/server.go index e3e12c5..9d728eb 100644 --- a/server/server.go +++ b/server/server.go @@ -127,12 +127,13 @@ type Server struct { type clientLogForwarder struct { client *Client + server *Server logger *log.Logger } func (lf clientLogForwarder) Write(incoming []byte) (int, error) { buf := new(bytes.Buffer) - buf.WriteString(fmt.Sprintf("<%v:%v(%v)> ", lf.client.Session(), lf.client.ShownName(), lf.client.UserId())) + buf.WriteString(fmt.Sprintf("<%v:%v(%v)> ", lf.client.Session(), lf.client.ShownName(lf.server.GetSuperUserName()), lf.client.UserId())) buf.Write(incoming) lf.logger.Output(3, buf.String()) return len(incoming), nil @@ -162,6 +163,17 @@ func NewServer(id int64) (s *Server, err error) { return } +func (server *Server) GetSuperUserName() string { + return server.Users[0].Name +} + +func (server *Server) SetSuperUserName(n string) { + oldName := server.Users[0].Name + server.Users[0].Name = n + delete(server.UserNameMap, oldName) + server.UserNameMap[n] = server.Users[0] +} + // Debugf implements debug-level printing for Servers. func (server *Server) Debugf(format string, v ...interface{}) { server.Printf(format, v...) @@ -260,7 +272,7 @@ func (server *Server) handleIncomingClient(conn net.Conn) (err error) { return } - client.lf = &clientLogForwarder{client, server.Logger} + client.lf = &clientLogForwarder{client, server, server.Logger} client.Logger = log.New(client.lf, "", 0) client.session = server.pool.Get() @@ -508,7 +520,7 @@ func (server *Server) handleAuthenticate(client *Client, msg *Message) { client.Username = *auth.Username - if client.Username == "SuperUser" { + if client.Username == server.GetSuperUserName() { if auth.Password == nil { client.RejectAuth(mumbleproto.Reject_WrongUserPW, "") return @@ -652,7 +664,7 @@ func (server *Server) finishAuthenticate(client *Client) { userstate := &mumbleproto.UserState{ Session: proto.Uint32(client.Session()), - Name: proto.String(client.ShownName()), + Name: proto.String(client.ShownName(server.GetSuperUserName())), ChannelId: proto.Uint32(uint32(channel.Id)), } @@ -836,7 +848,7 @@ func (server *Server) sendUserList(client *Client) { userstate := &mumbleproto.UserState{ Session: proto.Uint32(connectedClient.Session()), - Name: proto.String(connectedClient.ShownName()), + Name: proto.String(connectedClient.ShownName(server.GetSuperUserName())), ChannelId: proto.Uint32(uint32(connectedClient.Channel.Id)), }