// Fields used in the reply:
// None
func HandleSendInstantMsg(cc *ClientConn, t *Transaction) (res []Transaction, err error) {
+ if !cc.Authorize(accessSendPrivMsg) {
+ res = append(res, cc.NewErrReply(t, "You are not allowed to send private messages."))
+ return res, err
+ }
+
msg := t.GetField(fieldData)
ID := t.GetField(fieldUserID)
newT := NewTransaction(tranUserAccess, c.ID, NewField(fieldUserAccess, newAccessLvl))
res = append(res, *newT)
- flagBitmap := big.NewInt(int64(binary.BigEndian.Uint16(*c.Flags)))
+ flagBitmap := big.NewInt(int64(binary.BigEndian.Uint16(c.Flags)))
if authorize(c.Account.Access, accessDisconUser) {
flagBitmap.SetBit(flagBitmap, userFlagAdmin, 1)
} else {
flagBitmap.SetBit(flagBitmap, userFlagAdmin, 0)
}
- binary.BigEndian.PutUint16(*c.Flags, uint16(flagBitmap.Int64()))
+ binary.BigEndian.PutUint16(c.Flags, uint16(flagBitmap.Int64()))
c.Account.Access = account.Access
cc.sendAll(
tranNotifyChangeUser,
NewField(fieldUserID, *c.ID),
- NewField(fieldUserFlags, *c.Flags),
+ NewField(fieldUserFlags, c.Flags),
NewField(fieldUserName, c.UserName),
- NewField(fieldUserIconID, *c.Icon),
+ NewField(fieldUserIconID, c.Icon),
)
}
}
}
}
- *cc.Icon = t.GetField(fieldUserIconID).Data
+ cc.Icon = t.GetField(fieldUserIconID).Data
cc.logger = cc.logger.With("name", string(cc.UserName))
- cc.logger.Infow("Login successful", "clientVersion", fmt.Sprintf("%x", *cc.Version))
+ cc.logger.Infow("Login successful", "clientVersion", fmt.Sprintf("%x", cc.Version))
options := t.GetField(fieldOptions).Data
optBitmap := big.NewInt(int64(binary.BigEndian.Uint16(options)))
- flagBitmap := big.NewInt(int64(binary.BigEndian.Uint16(*cc.Flags)))
+ flagBitmap := big.NewInt(int64(binary.BigEndian.Uint16(cc.Flags)))
// Check refuse private PM option
if optBitmap.Bit(refusePM) == 1 {
flagBitmap.SetBit(flagBitmap, userFlagRefusePM, 1)
- binary.BigEndian.PutUint16(*cc.Flags, uint16(flagBitmap.Int64()))
+ binary.BigEndian.PutUint16(cc.Flags, uint16(flagBitmap.Int64()))
}
// Check refuse private chat option
if optBitmap.Bit(refuseChat) == 1 {
flagBitmap.SetBit(flagBitmap, userFLagRefusePChat, 1)
- binary.BigEndian.PutUint16(*cc.Flags, uint16(flagBitmap.Int64()))
+ binary.BigEndian.PutUint16(cc.Flags, uint16(flagBitmap.Int64()))
}
// Check auto response
tranNotifyChangeUser, nil,
NewField(fieldUserName, cc.UserName),
NewField(fieldUserID, *cc.ID),
- NewField(fieldUserIconID, *cc.Icon),
- NewField(fieldUserFlags, *cc.Flags),
+ NewField(fieldUserIconID, cc.Icon),
+ NewField(fieldUserFlags, cc.Flags),
),
)
res = append(res, trans...)
}
func HandleSetClientUserInfo(cc *ClientConn, t *Transaction) (res []Transaction, err error) {
- var icon []byte
if len(t.GetField(fieldUserIconID).Data) == 4 {
- icon = t.GetField(fieldUserIconID).Data[2:]
+ cc.Icon = t.GetField(fieldUserIconID).Data[2:]
} else {
- icon = t.GetField(fieldUserIconID).Data
+ cc.Icon = t.GetField(fieldUserIconID).Data
+ }
+ if cc.Authorize(accessAnyName) {
+ cc.UserName = t.GetField(fieldUserName).Data
}
- *cc.Icon = icon
- cc.UserName = t.GetField(fieldUserName).Data
// the options field is only passed by the client versions > 1.2.3.
options := t.GetField(fieldOptions).Data
-
if options != nil {
optBitmap := big.NewInt(int64(binary.BigEndian.Uint16(options)))
- flagBitmap := big.NewInt(int64(binary.BigEndian.Uint16(*cc.Flags)))
+ flagBitmap := big.NewInt(int64(binary.BigEndian.Uint16(cc.Flags)))
flagBitmap.SetBit(flagBitmap, userFlagRefusePM, optBitmap.Bit(refusePM))
- binary.BigEndian.PutUint16(*cc.Flags, uint16(flagBitmap.Int64()))
+ binary.BigEndian.PutUint16(cc.Flags, uint16(flagBitmap.Int64()))
flagBitmap.SetBit(flagBitmap, userFLagRefusePChat, optBitmap.Bit(refuseChat))
- binary.BigEndian.PutUint16(*cc.Flags, uint16(flagBitmap.Int64()))
+ binary.BigEndian.PutUint16(cc.Flags, uint16(flagBitmap.Int64()))
// Check auto response
if optBitmap.Bit(autoResponse) == 1 {
}
}
- // Notify all clients of updated user info
- cc.sendAll(
- tranNotifyChangeUser,
- NewField(fieldUserID, *cc.ID),
- NewField(fieldUserIconID, *cc.Icon),
- NewField(fieldUserFlags, *cc.Flags),
- NewField(fieldUserName, cc.UserName),
- )
+ for _, c := range sortedClients(cc.Server.Clients) {
+ res = append(res, *NewTransaction(
+ tranNotifyChangeUser,
+ c.ID,
+ NewField(fieldUserID, *cc.ID),
+ NewField(fieldUserIconID, cc.Icon),
+ NewField(fieldUserFlags, cc.Flags),
+ NewField(fieldUserName, cc.UserName),
+ ))
+ }
return res, err
}
return res, err
}
- fileNames, err := getFileNameList(fullPath)
+ fileNames, err := getFileNameList(fullPath, cc.Server.Config.IgnoreFiles)
if err != nil {
return res, err
}
NewField(fieldChatID, newChatID),
NewField(fieldUserName, cc.UserName),
NewField(fieldUserID, *cc.ID),
- NewField(fieldUserIconID, *cc.Icon),
- NewField(fieldUserFlags, *cc.Flags),
+ NewField(fieldUserIconID, cc.Icon),
+ NewField(fieldUserFlags, cc.Flags),
),
)
NewField(fieldChatID, chatID),
NewField(fieldUserName, cc.UserName),
NewField(fieldUserID, *cc.ID),
- NewField(fieldUserIconID, *cc.Icon),
- NewField(fieldUserFlags, *cc.Flags),
+ NewField(fieldUserIconID, cc.Icon),
+ NewField(fieldUserFlags, cc.Flags),
),
)
NewField(fieldChatID, chatID),
NewField(fieldUserName, cc.UserName),
NewField(fieldUserID, *cc.ID),
- NewField(fieldUserIconID, *cc.Icon),
- NewField(fieldUserFlags, *cc.Flags),
+ NewField(fieldUserIconID, cc.Icon),
+ NewField(fieldUserFlags, cc.Flags),
),
)
}
for _, c := range sortedClients(privChat.ClientConn) {
user := User{
ID: *c.ID,
- Icon: *c.Icon,
- Flags: *c.Flags,
+ Icon: c.Icon,
+ Flags: c.Flags,
Name: string(c.UserName),
}