Make it possible to customize the super user name

This commit is contained in:
Ola Bini 2020-07-11 15:52:35 +00:00
parent dd4cf8748f
commit c876ee6273
No known key found for this signature in database
GPG key ID: 6786A150F6A2B28F
3 changed files with 24 additions and 12 deletions

View file

@ -141,9 +141,9 @@ func (client *Client) UserId() int {
} }
// ShownName gets the client's shown name. // ShownName gets the client's shown name.
func (client *Client) ShownName() string { func (client *Client) ShownName(suName string) string {
if client.IsSuperUser() { if client.IsSuperUser() {
return "SuperUser" return suName
} }
if client.IsRegistered() { if client.IsRegistered() {
return client.user.Name return client.user.Name

View file

@ -519,7 +519,7 @@ func (server *Server) handleUserRemoveMessage(client *Client, msg *Message) {
if userremove.Reason != nil { if userremove.Reason != nil {
ban.Reason = *userremove.Reason ban.Reason = *userremove.Reason
} }
ban.Username = removeClient.ShownName() ban.Username = removeClient.ShownName(server.GetSuperUserName())
ban.CertHash = removeClient.CertHash() ban.CertHash = removeClient.CertHash()
ban.Start = time.Now().Unix() ban.Start = time.Now().Unix()
ban.Duration = 0 ban.Duration = 0
@ -537,9 +537,9 @@ func (server *Server) handleUserRemoveMessage(client *Client, msg *Message) {
} }
if isBan { 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 { } else {
client.Printf("Kicked %v (%v)", removeClient.ShownName(), removeClient.Session()) client.Printf("Kicked %v (%v)", removeClient.ShownName(server.GetSuperUserName()), removeClient.Session())
} }
removeClient.ForceDisconnect() removeClient.ForceDisconnect()
@ -784,9 +784,9 @@ func (server *Server) handleUserStateMessage(client *Client, msg *Message) {
txtmsg := &mumbleproto.TextMessage{} txtmsg := &mumbleproto.TextMessage{}
txtmsg.TreeId = append(txtmsg.TreeId, uint32(0)) txtmsg.TreeId = append(txtmsg.TreeId, uint32(0))
if target.Recording { 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 { } 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 { server.broadcastProtoMessageWithPredicate(txtmsg, func(client *Client) bool {

View file

@ -127,12 +127,13 @@ type Server struct {
type clientLogForwarder struct { type clientLogForwarder struct {
client *Client client *Client
server *Server
logger *log.Logger logger *log.Logger
} }
func (lf clientLogForwarder) Write(incoming []byte) (int, error) { func (lf clientLogForwarder) Write(incoming []byte) (int, error) {
buf := new(bytes.Buffer) 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) buf.Write(incoming)
lf.logger.Output(3, buf.String()) lf.logger.Output(3, buf.String())
return len(incoming), nil return len(incoming), nil
@ -162,6 +163,17 @@ func NewServer(id int64) (s *Server, err error) {
return 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. // Debugf implements debug-level printing for Servers.
func (server *Server) Debugf(format string, v ...interface{}) { func (server *Server) Debugf(format string, v ...interface{}) {
server.Printf(format, v...) server.Printf(format, v...)
@ -260,7 +272,7 @@ func (server *Server) handleIncomingClient(conn net.Conn) (err error) {
return return
} }
client.lf = &clientLogForwarder{client, server.Logger} client.lf = &clientLogForwarder{client, server, server.Logger}
client.Logger = log.New(client.lf, "", 0) client.Logger = log.New(client.lf, "", 0)
client.session = server.pool.Get() client.session = server.pool.Get()
@ -508,7 +520,7 @@ func (server *Server) handleAuthenticate(client *Client, msg *Message) {
client.Username = *auth.Username client.Username = *auth.Username
if client.Username == "SuperUser" { if client.Username == server.GetSuperUserName() {
if auth.Password == nil { if auth.Password == nil {
client.RejectAuth(mumbleproto.Reject_WrongUserPW, "") client.RejectAuth(mumbleproto.Reject_WrongUserPW, "")
return return
@ -652,7 +664,7 @@ func (server *Server) finishAuthenticate(client *Client) {
userstate := &mumbleproto.UserState{ userstate := &mumbleproto.UserState{
Session: proto.Uint32(client.Session()), Session: proto.Uint32(client.Session()),
Name: proto.String(client.ShownName()), Name: proto.String(client.ShownName(server.GetSuperUserName())),
ChannelId: proto.Uint32(uint32(channel.Id)), ChannelId: proto.Uint32(uint32(channel.Id)),
} }
@ -836,7 +848,7 @@ func (server *Server) sendUserList(client *Client) {
userstate := &mumbleproto.UserState{ userstate := &mumbleproto.UserState{
Session: proto.Uint32(connectedClient.Session()), Session: proto.Uint32(connectedClient.Session()),
Name: proto.String(connectedClient.ShownName()), Name: proto.String(connectedClient.ShownName(server.GetSuperUserName())),
ChannelId: proto.Uint32(uint32(connectedClient.Channel.Id)), ChannelId: proto.Uint32(uint32(connectedClient.Channel.Id)),
} }