Name: "tranUserBroadcast",
Handler: HandleUserBroadcast,
},
+ tranDownloadBanner: {
+ Name: "tranDownloadBanner",
+ Handler: HandleDownloadBanner,
+ },
}
func HandleChatSend(cc *ClientConn, t *Transaction) (res []Transaction, err error) {
}
}
- hlFile.ffo.FlatFileInformationFork.setComment(t.GetField(fieldFileComment).Data)
+ if err := hlFile.ffo.FlatFileInformationFork.setComment(t.GetField(fieldFileComment).Data); err != nil {
+ return res, err
+ }
w, err := hlFile.infoForkWriter()
if err != nil {
return res, err
return res, err
}
- cc.Server.Logger.Debugw("Move file", "src", filePath+"/"+fileName, "dst", fileNewPath+"/"+fileName)
+ cc.logger.Infow("Move file", "src", filePath+"/"+fileName, "dst", fileNewPath+"/"+fileName)
hlFile, err := newFileWrapper(cc.Server.FS, filePath, 0)
+ if err != nil {
+ return res, err
+ }
fi, err := hlFile.dataFile()
if err != nil {
if len(subFields) == 1 {
login := DecodeUserString(getField(fieldData, &subFields).Data)
- cc.Server.Logger.Infow("DeleteUser", "login", login)
+ cc.logger.Infow("DeleteUser", "login", login)
if !authorize(cc.Account.Access, accessDeleteUser) {
res = append(res, cc.NewErrReply(t, "You are not allowed to delete accounts."))
// check if the login dataFile; if so, we know we are updating an existing user
if acc, ok := cc.Server.Accounts[login]; ok {
- cc.Server.Logger.Infow("UpdateUser", "login", login)
+ cc.logger.Infow("UpdateUser", "login", login)
// account dataFile, so this is an update action
if !authorize(cc.Account.Access, accessModifyUser) {
return res, err
}
} else {
- cc.Server.Logger.Infow("CreateUser", "login", login)
+ cc.logger.Infow("CreateUser", "login", login)
if !authorize(cc.Account.Access, accessCreateUser) {
res = append(res, cc.NewErrReply(t, "You are not allowed to create new accounts."))
cc.UserName = t.GetField(fieldUserName).Data
*cc.Icon = t.GetField(fieldUserIconID).Data
+ cc.logger = cc.logger.With("name", string(cc.UserName))
+
options := t.GetField(fieldOptions).Data
optBitmap := big.NewInt(int64(binary.BigEndian.Uint16(options)))
cc.AutoReply = []byte{}
}
- cc.notifyOthers(
+ for _, t := range cc.notifyOthers(
*NewTransaction(
tranNotifyChangeUser, nil,
NewField(fieldUserName, cc.UserName),
NewField(fieldUserIconID, *cc.Icon),
NewField(fieldUserFlags, *cc.Flags),
),
- )
+ ) {
+ cc.Server.outbox <- t
+ }
+
+ if cc.Server.Config.BannerFile != "" {
+ cc.Server.outbox <- *NewTransaction(tranServerBanner, cc.ID, NewField(fieldBannerType, []byte("JPEG")))
+ }
res = append(res, cc.NewReply(t))
return res, err
}
- newsPath := t.GetField(fieldNewsPath).Data
- cc.Server.Logger.Infow("NewsPath: ", "np", string(newsPath))
-
pathStrs := ReadNewsPath(t.GetField(fieldNewsPath).Data)
cats := cc.Server.GetNewsCatByPath(pathStrs)
name := string(t.GetField(fieldFileName).Data)
pathStrs := ReadNewsPath(t.GetField(fieldNewsPath).Data)
- cc.Server.Logger.Infof("Creating new news folder %s", name)
+ cc.logger.Infof("Creating new news folder %s", name)
cats := cc.Server.GetNewsCatByPath(pathStrs)
cats[name] = NewsCategoryListData15{
// TODO: determine if path is a Folder (Bundle) or Category and check for permission
- cc.Server.Logger.Infof("DelNewsItem %v", pathStrs)
+ cc.logger.Infof("DelNewsItem %v", pathStrs)
cats := cc.Server.ThreadedNews.Categories
return res, err
}
- cc.Server.Logger.Debugw("Make alias", "src", fullFilePath, "dst", fullNewFilePath)
+ cc.logger.Debugw("Make alias", "src", fullFilePath, "dst", fullNewFilePath)
if err := cc.Server.FS.Symlink(fullFilePath, fullNewFilePath); err != nil {
res = append(res, cc.NewErrReply(t, "Error creating alias"))
res = append(res, cc.NewReply(t))
return res, err
}
+
+func HandleDownloadBanner(cc *ClientConn, t *Transaction) (res []Transaction, err error) {
+ transactionRef := cc.Server.NewTransactionRef()
+ data := binary.BigEndian.Uint32(transactionRef)
+
+ ft := &FileTransfer{
+ ReferenceNumber: transactionRef,
+ Type: bannerDownload,
+ }
+
+ fi, err := cc.Server.FS.Stat(filepath.Join(cc.Server.ConfigDir, cc.Server.Config.BannerFile))
+ if err != nil {
+ return res, err
+ }
+
+ size := make([]byte, 4)
+ binary.BigEndian.PutUint32(size, uint32(fi.Size()))
+
+ cc.Server.mux.Lock()
+ defer cc.Server.mux.Unlock()
+ cc.Server.FileTransfers[data] = ft
+
+ res = append(res, cc.NewReply(t,
+ NewField(fieldRefNum, transactionRef),
+ NewField(fieldTransferSize, size),
+ ))
+
+ return res, err
+}