Name: "tranNotifyDeleteUser",
},
tranAgreed: {
- Access: accessAlwaysAllow,
Name: "tranAgreed",
Handler: HandleTranAgreed,
},
tranChatSend: {
- Access: accessSendChat,
- DenyMsg: "You are not allowed to participate in chat.",
Handler: HandleChatSend,
Name: "tranChatSend",
RequiredFields: []requiredField{
Handler: HandleDelNewsArt,
},
tranDelNewsItem: {
- Access: accessAlwaysAllow, // Granular access enforced inside the handler
// Has multiple access flags: News Delete Folder (37) or News Delete Category (35)
// TODO: Implement inside the handler
Name: "tranDelNewsItem",
Handler: HandleDelNewsItem,
},
tranDeleteFile: {
- Access: accessAlwaysAllow, // Granular access enforced inside the handler
Name: "tranDeleteFile",
Handler: HandleDeleteFile,
},
tranDeleteUser: {
- Access: accessDeleteUser,
- DenyMsg: "You are not allowed to delete accounts.",
Name: "tranDeleteUser",
Handler: HandleDeleteUser,
},
Handler: HandleGetClientConnInfoText,
},
tranGetFileInfo: {
- Access: accessAlwaysAllow,
Name: "tranGetFileInfo",
Handler: HandleGetFileInfo,
},
tranGetFileNameList: {
- Access: accessAlwaysAllow,
Name: "tranGetFileNameList",
Handler: HandleGetFileNameList,
},
Handler: HandleGetNewsCatNameList,
},
tranGetUser: {
- Access: accessOpenUser,
DenyMsg: "You are not allowed to view accounts.",
Name: "tranGetUser",
Handler: HandleGetUser,
},
tranGetUserNameList: {
- Access: accessAlwaysAllow,
Name: "tranHandleGetUserNameList",
Handler: HandleGetUserNameList,
},
Handler: HandleInviteToChat,
},
tranJoinChat: {
- Access: accessAlwaysAllow,
Name: "tranJoinChat",
Handler: HandleJoinChat,
},
tranKeepAlive: {
- Access: accessAlwaysAllow,
Name: "tranKeepAlive",
Handler: HandleKeepAlive,
},
tranLeaveChat: {
- Access: accessAlwaysAllow,
Name: "tranJoinChat",
Handler: HandleLeaveChat,
},
Handler: HandlePostNewsArt,
},
tranRejectChatInvite: {
- Access: accessAlwaysAllow,
Name: "tranRejectChatInvite",
Handler: HandleRejectChatInvite,
},
},
},
tranSetChatSubject: {
- Access: accessAlwaysAllow,
Name: "tranSetChatSubject",
Handler: HandleSetChatSubject,
},
tranMakeFileAlias: {
- Access: accessAlwaysAllow,
Name: "tranMakeFileAlias",
Handler: HandleMakeAlias,
RequiredFields: []requiredField{
},
},
tranSetClientUserInfo: {
- Access: accessAlwaysAllow,
Name: "tranSetClientUserInfo",
Handler: HandleSetClientUserInfo,
},
tranSetFileInfo: {
- Access: accessAlwaysAllow, // granular access is in the handler
Name: "tranSetFileInfo",
Handler: HandleSetFileInfo,
},
Handler: HandleSetUser,
},
tranUploadFile: {
- Access: accessAlwaysAllow,
- DenyMsg: "You are not allowed to upload files.",
Name: "tranUploadFile",
Handler: HandleUploadFile,
},
tranUploadFldr: {
- Access: accessAlwaysAllow, // TODO: what should this be?
Name: "tranUploadFldr",
Handler: HandleUploadFolder,
},
}
func HandleChatSend(cc *ClientConn, t *Transaction) (res []Transaction, err error) {
+ if !authorize(cc.Account.Access, accessSendChat) {
+ res = append(res, cc.NewErrReply(t, "You are not allowed to participate in chat."))
+ return res, err
+ }
+
// Truncate long usernames
trunc := fmt.Sprintf("%13s", cc.UserName)
formattedMsg := fmt.Sprintf("\r%.14s: %s", trunc, t.GetField(fieldData).Data)
cc.Server.Logger.Debugw("Move file", "src", filePath+"/"+fileName, "dst", fileNewPath+"/"+fileName)
- path := filePath + "/" + fileName
- fi, err := os.Stat(path)
+ fp := filePath + "/" + fileName
+ fi, err := os.Stat(fp)
if err != nil {
return res, err
}
}
}
- // TODO: If we have just promoted a connected user to admin, notify
- // connected clients to turn the user red
-
res = append(res, cc.NewReply(t))
return res, err
}
func HandleGetUser(cc *ClientConn, t *Transaction) (res []Transaction, err error) {
- // userLogin := string(t.GetField(fieldUserLogin).Data)
+ if !authorize(cc.Account.Access, accessOpenUser) {
+ res = append(res, cc.NewErrReply(t, "You are not allowed to view accounts."))
+ return res, err
+ }
+
account := cc.Server.Accounts[string(t.GetField(fieldUserLogin).Data)]
if account == nil {
errorT := cc.NewErrReply(t, "Account does not exist.")
}
func HandleDeleteUser(cc *ClientConn, t *Transaction) (res []Transaction, err error) {
+ if !authorize(cc.Account.Access, accessDeleteUser) {
+ res = append(res, cc.NewErrReply(t, "You are not allowed to delete accounts."))
+ return res, err
+ }
+
// TODO: Handle case where account doesn't exist; e.g. delete race condition
login := DecodeUserString(t.GetField(fieldUserLogin).Data)
return res, err
}
-func (cc *ClientConn) notifyNewUserHasJoined() (res []Transaction, err error) {
- // Notify other ccs that a new user has connected
- cc.NotifyOthers(
- *NewTransaction(
- tranNotifyChangeUser, nil,
- NewField(fieldUserName, cc.UserName),
- NewField(fieldUserID, *cc.ID),
- NewField(fieldUserIconID, *cc.Icon),
- NewField(fieldUserFlags, *cc.Flags),
- ),
- )
-
- return res, nil
-}
-
func HandleTranAgreed(cc *ClientConn, t *Transaction) (res []Transaction, err error) {
cc.Agreed = true
cc.UserName = t.GetField(fieldUserName).Data
cc.AutoReply = []byte{}
}
- _, _ = cc.notifyNewUserHasJoined()
+ cc.notifyOthers(
+ *NewTransaction(
+ tranNotifyChangeUser, nil,
+ NewField(fieldUserName, cc.UserName),
+ NewField(fieldUserID, *cc.ID),
+ NewField(fieldUserIconID, *cc.Icon),
+ NewField(fieldUserFlags, *cc.Flags),
+ ),
+ )
res = append(res, cc.NewReply(t))
var cat NewsCategoryListData15
cats := cc.Server.ThreadedNews.Categories
- for _, path := range pathStrs {
- cat = cats[path]
- cats = cats[path].SubCats
+ for _, fp := range pathStrs {
+ cat = cats[fp]
+ cats = cats[fp].SubCats
}
nald := cat.GetNewsArtListData()
func HandleGetNewsArtData(cc *ClientConn, t *Transaction) (res []Transaction, err error) {
// Request fields
- // 325 News path
+ // 325 News fp
// 326 News article ID
// 327 News article data flavor
var cat NewsCategoryListData15
cats := cc.Server.ThreadedNews.Categories
- for _, path := range pathStrs {
- cat = cats[path]
- cats = cats[path].SubCats
+ for _, fp := range pathStrs {
+ cat = cats[fp]
+ cats = cats[fp].SubCats
}
newsArtID := t.GetField(fieldNewsArtID).Data
return res, err
}
-// User options
-const (
- refusePM = 0
- refuseChat = 1
- autoResponse = 2
-)
-
func HandleSetClientUserInfo(cc *ClientConn, t *Transaction) (res []Transaction, err error) {
var icon []byte
if len(t.GetField(fieldUserIconID).Data) == 4 {