]> git.r.bdr.sh - rbdr/mobius/blobdiff - hotline/transaction_handlers.go
Fix io.Reader implementations and wrap more errors
[rbdr/mobius] / hotline / transaction_handlers.go
index 1a079f74acb8f5b44e2f080cf1519065ec4f06a7..20b87e2118105e0cdbd977f5a0dc19eba9db6c12 100644 (file)
@@ -749,7 +749,8 @@ func HandleListUsers(cc *ClientConn, t *Transaction) (res []Transaction, err err
 
        var userFields []Field
        for _, acc := range cc.Server.Accounts {
-               b, err := io.ReadAll(acc)
+               accCopy := *acc
+               b, err := io.ReadAll(&accCopy)
                if err != nil {
                        return res, err
                }
@@ -1432,6 +1433,9 @@ func HandlePostNewsArt(cc *ClientConn, t *Transaction) (res []Transaction, err e
        bs := make([]byte, 4)
        binary.BigEndian.PutUint32(bs, convertedArtID)
 
+       cc.Server.mux.Lock()
+       defer cc.Server.mux.Unlock()
+
        newArt := NewsArtData{
                Title:         string(t.GetField(FieldNewsArtTitle).Data),
                Poster:        string(cc.UserName),
@@ -1759,13 +1763,13 @@ func HandleGetFileNameList(cc *ClientConn, t *Transaction) (res []Transaction, e
                nil,
        )
        if err != nil {
-               return res, err
+               return res, fmt.Errorf("error reading file path: %w", err)
        }
 
        var fp FilePath
        if t.GetField(FieldFilePath).Data != nil {
                if _, err = fp.Write(t.GetField(FieldFilePath).Data); err != nil {
-                       return res, err
+                       return res, fmt.Errorf("error writing file path: %w", err)
                }
        }
 
@@ -1777,7 +1781,7 @@ func HandleGetFileNameList(cc *ClientConn, t *Transaction) (res []Transaction, e
 
        fileNames, err := getFileNameList(fullPath, cc.Server.Config.IgnoreFiles)
        if err != nil {
-               return res, err
+               return res, fmt.Errorf("getFileNameList: %w", err)
        }
 
        res = append(res, cc.NewReply(t, fileNames...))
@@ -2053,19 +2057,11 @@ func HandleMakeAlias(cc *ClientConn, t *Transaction) (res []Transaction, err err
 // 107 FieldRefNum                     Used later for transfer
 // 108 FieldTransferSize       Size of data to be downloaded
 func HandleDownloadBanner(cc *ClientConn, t *Transaction) (res []Transaction, err error) {
-       fi, err := cc.Server.FS.Stat(filepath.Join(cc.Server.ConfigDir, cc.Server.Config.BannerFile))
-       if err != nil {
-               return res, err
-       }
-
        ft := cc.newFileTransfer(bannerDownload, []byte{}, []byte{}, make([]byte, 4))
+       binary.BigEndian.PutUint32(ft.TransferSize, uint32(len(cc.Server.banner)))
 
-       binary.BigEndian.PutUint32(ft.TransferSize, uint32(fi.Size()))
-
-       res = append(res, cc.NewReply(t,
+       return append(res, cc.NewReply(t,
                NewField(FieldRefNum, ft.refNum[:]),
                NewField(FieldTransferSize, ft.TransferSize),
-       ))
-
-       return res, err
+       )), err
 }