commit d67d0a2a8b19aeadf64e5bacbeed2a0696cbfde9
Author: Joseph Crowell <joseph.w.crowell@gmail.com>
Date: Wed Dec 17 18:25:52 2025 +0000
diff --git a/bridge/config/config.go b/bridge/config/config.go
index 3a1dff2..0ee0651 100644
--- a/bridge/config/config.go
+++ b/bridge/config/config.go
@@ -47 +46 @@ import (
"bytes"
"errors"
"fmt"
- "io/ioutil"
"os"
"path/filepath"
"regexp"
@@ -3037 +3028 @@ func NewConfig(rootLogger *logrus.Logger, cfgfile string) Config {
logger := rootLogger.WithFields(logrus.Fields{"prefix": "config"})
viper.SetConfigFile(cfgfile)
- input, err := ioutil.ReadFile(cfgfile)
+
+ input, err := os.ReadFile(cfgfile) //nolint:gosec
if err != nil {
logger.Fatalf("Failed to read configuration file: %#v", err)
}
diff --git a/bridge/helper/helper_test.go b/bridge/helper/helper_test.go
index 6823de6..7873e27 100644
--- a/bridge/helper/helper_test.go
+++ b/bridge/helper/helper_test.go
@@ -17 +16 @@
package helper
import (
- "io/ioutil"
"os"
"testing"
@@ -1187 +1177 @@ func TestConvertWebPToPNG(t *testing.T) {
t.Skip()
}
- input, err := ioutil.ReadFile("test.webp")
+ input, err := os.ReadFile("test.webp")
if err != nil {
t.Fail()
}
@@ -1297 +1287 @@ func TestConvertWebPToPNG(t *testing.T) {
t.Fail()
}
- err = ioutil.WriteFile("test.png", *d, 0o644) // nolint:gosec
+ err = os.WriteFile("test.png", *d, 0o644) //nolint:gosec
if err != nil {
t.Fail()
}
diff --git a/bridge/helper/lottie_convert.go b/bridge/helper/lottie_convert.go
index 89397d0..c9843ed 100644
--- a/bridge/helper/lottie_convert.go
+++ b/bridge/helper/lottie_convert.go
@@ -37 +36 @@
package helper
import (
- "io/ioutil"
"os"
"os/exec"
@@ -237 +227 @@ func CanConvertTgsToX() error {
// This relies on an external command, which is ugly, but works.
func ConvertTgsToX(data *[]byte, outputFormat string, logger *logrus.Entry) error {
// lottie can't handle input from a pipe, so write to a temporary file:
- tmpInFile, err := ioutil.TempFile(os.TempDir(), "matterbridge-lottie-input-*.tgs")
+ tmpInFile, err := os.CreateTemp(os.TempDir(), "matterbridge-lottie-input-*.tgs")
if err != nil {
return err
}
@@ -357 +347 @@ func ConvertTgsToX(data *[]byte, outputFormat string, logger *logrus.Entry) erro
}()
// lottie can handle writing to a pipe, but there is no way to do that platform-independently.
// "/dev/stdout" won't work on Windows, and "-" upsets Cairo for some reason. So we need another file:
- tmpOutFile, err := ioutil.TempFile(os.TempDir(), "matterbridge-lottie-output-*.data")
+ tmpOutFile, err := os.CreateTemp(os.TempDir(), "matterbridge-lottie-output-*.data")
if err != nil {
return err
}
@@ -647 +638 @@ func ConvertTgsToX(data *[]byte, outputFormat string, logger *logrus.Entry) erro
// 'stderr' already contains some parts of Stderr, because it was set to 'nil'.
return stderr
}
- dataContents, err := ioutil.ReadFile(tmpOutFileName)
+
+ dataContents, err := os.ReadFile(tmpOutFileName) //nolint:gosec
if err != nil {
return err
}
diff --git a/bridge/irc/handlers.go b/bridge/irc/handlers.go
index e9d79aa..d3934fb 100644
--- a/bridge/irc/handlers.go
+++ b/bridge/irc/handlers.go
@@ -37 +37 @@ package birc
import (
"bytes"
"fmt"
- "io/ioutil"
+ "io"
"strconv"
"strings"
"time"
@@ -2477 +2478 @@ func (b *Birc) handlePrivMsg(client *girc.Client, event girc.Event) {
b.Log.Errorf("charset to utf-8 conversion failed: %s", err)
return
}
- output, _ := ioutil.ReadAll(r)
+
+ output, _ := io.ReadAll(r)
rmsg.Text = string(output)
}
diff --git a/bridge/irc/irc.go b/bridge/irc/irc.go
index cf978c4..504367d 100644
--- a/bridge/irc/irc.go
+++ b/bridge/irc/irc.go
@@ -57 +57 @@ import (
"errors"
"fmt"
"hash/crc32"
- "io/ioutil"
+ "io"
"net"
"sort"
"strconv"
@@ -2937 +2937 @@ func (b *Birc) getClient() (*girc.Client, error) {
realName = b.GetString("Nick")
}
- debug := ioutil.Discard
+ debug := io.Discard
if b.GetInt("DebugLevel") == 2 {
debug = b.Log.Writer()
}
diff --git a/bridge/msteams/handler.go b/bridge/msteams/handler.go
index 6083eab..992e28a 100644
--- a/bridge/msteams/handler.go
+++ b/bridge/msteams/handler.go
@@ -37 +37 @@ package bmsteams
import (
"encoding/json"
"fmt"
- "io/ioutil"
+ "io"
"strings"
"github.com/matterbridge-org/matterbridge/bridge/config"
@@ -927 +928 @@ func (b *Bmsteams) handleCodeSnippet(rmsg *config.Message, attach msgraph.ChatMe
return
}
defer resp.Body.Close()
- res, err := ioutil.ReadAll(resp.Body)
+
+ res, err := io.ReadAll(resp.Body)
if err != nil {
b.Log.Errorf("reading snippet data failed: %s", err)
return
diff --git a/bridge/mumble/mumble.go b/bridge/mumble/mumble.go
index 54bbdcd..bc1b3db 100644
--- a/bridge/mumble/mumble.go
+++ b/bridge/mumble/mumble.go
@@ -58 +58 @@ import (
"crypto/x509"
"errors"
"fmt"
- "io/ioutil"
"net"
+ "os"
"strconv"
"strings"
"time"
@@ -1197 +1197 @@ func (b *Bmumble) buildTLSConfig() error {
}
// Load TLS CA used for server verification. If not provided, the Go system trust anchor is used
if capath := b.GetString("TLSCACertificate"); capath != "" {
- ca, err := ioutil.ReadFile(capath)
+ ca, err := os.ReadFile(capath) //nolint:gosec
if err != nil {
return err
}
diff --git a/bridge/rocketchat/helpers.go b/bridge/rocketchat/helpers.go
index a9a4657..b9b9d59 100644
--- a/bridge/rocketchat/helpers.go
+++ b/bridge/rocketchat/helpers.go
@@ -27 +27 @@ package brocketchat
import (
"context"
- "io/ioutil"
+ "io"
"mime"
"net/http"
"net/url"
@@ -146 +147 @@ import (
"github.com/matterbridge-org/matterbridge/hook/rockethook"
"github.com/matterbridge-org/matterbridge/matterhook"
"github.com/nelsonken/gomf"
+
// Library even upstream no longer actively maintained, should be replaced:
"github.com/matterbridge/Rocket.Chat.Go.SDK/models"
"github.com/matterbridge/Rocket.Chat.Go.SDK/realtime"
@@ -1377 +1388 @@ func (b *Brocketchat) uploadFile(fi *config.FileInfo, channel string) error {
return err
}
defer resp.Body.Close()
- body, err := ioutil.ReadAll(resp.Body)
+
+ body, err := io.ReadAll(resp.Body)
if err != nil {
return err
}
diff --git a/bridge/slack/helpers_test.go b/bridge/slack/helpers_test.go
index 5e314d3..6a9e9ee 100644
--- a/bridge/slack/helpers_test.go
+++ b/bridge/slack/helpers_test.go
@@ -17 +17 @@
package bslack
import (
- "io/ioutil"
+ "io"
"testing"
"github.com/matterbridge-org/matterbridge/bridge"
@@ -247 +247 @@ func TestExtractTopicOrPurpose(t *testing.T) {
}
logger := logrus.New()
- logger.SetOutput(ioutil.Discard)
+ logger.SetOutput(io.Discard)
cfg := &bridge.Config{Bridge: &bridge.Bridge{Log: logrus.NewEntry(logger)}}
b := newBridge(cfg)
for name, tc := range testcases {
diff --git a/bridge/zulip/zulip.go b/bridge/zulip/zulip.go
index a31cbf7..3569ae8 100644
--- a/bridge/zulip/zulip.go
+++ b/bridge/zulip/zulip.go
@@ -37 +37 @@ package bzulip
import (
"encoding/json"
"fmt"
- "io/ioutil"
+ "io"
"strconv"
"strings"
"sync"
@@ -1817 +1818 @@ func (b *Bzulip) sendMessage(msg config.Message) (string, error) {
}
if resp != nil {
defer resp.Body.Close()
- res, err := ioutil.ReadAll(resp.Body)
+
+ res, err := io.ReadAll(resp.Body)
if err != nil {
return "", err
}
diff --git a/gateway/gateway.go b/gateway/gateway.go
index a23b3b3..7ca84e4 100644
--- a/gateway/gateway.go
+++ b/gateway/gateway.go
@@ -27 +26 @@ package gateway
import (
"fmt"
- "io/ioutil"
"os"
"regexp"
"strings"
@@ -5787 +5778 @@ func modifyInMessageTengo(filename string, msg *config.Message) error {
if filename == "" {
return nil
}
- res, err := ioutil.ReadFile(filename)
+
+ res, err := os.ReadFile(filename) //nolint:gosec
if err != nil {
return err
}
@@ -6067 +6068 @@ func (gw *Gateway) modifyUsernameTengo(msg *config.Message, br *bridge.Bridge) (
if filename == "" {
return "", nil
}
- res, err := ioutil.ReadFile(filename)
+
+ res, err := os.ReadFile(filename) //nolint:gosec
if err != nil {
return "", err
}
@@ -6497 +6507 @@ func (gw *Gateway) modifyOutMessageTengo(origmsg *config.Message, msg *config.Me
return drop, err
}
} else {
- res, err = ioutil.ReadFile(filename)
+ res, err = os.ReadFile(filename) //nolint:gosec
if err != nil {
return drop, err
}
diff --git a/gateway/gateway_test.go b/gateway/gateway_test.go
index c0a2980..0f5a6c3 100644
--- a/gateway/gateway_test.go
+++ b/gateway/gateway_test.go
@@ -27 +27 @@ package gateway
import (
"fmt"
- "io/ioutil"
+ "io"
"strconv"
"testing"
@@ -1597 +1597 @@ const (
func maketestRouter(input []byte) *Router {
logger := logrus.New()
- logger.SetOutput(ioutil.Discard)
+ logger.SetOutput(io.Discard)
cfg := config.NewConfigFromString(logger, input)
r, err := NewRouter(logger, cfg, bridgemap.FullMap)
if err != nil {
@@ -3857 +3857 @@ func TestIgnoreSuite(t *testing.T) {
func (s *ignoreTestSuite) SetupSuite() {
logger := logrus.New()
- logger.SetOutput(ioutil.Discard)
+ logger.SetOutput(io.Discard)
s.gw = &Gateway{logger: logrus.NewEntry(logger)}
}
diff --git a/gateway/handlers.go b/gateway/handlers.go
index 2f26103..a151d58 100644
--- a/gateway/handlers.go
+++ b/gateway/handlers.go
@@ -47 +46 @@ import (
"bytes"
"crypto/sha1" //nolint:gosec
"fmt"
- "io/ioutil"
"net/http"
"os"
"path/filepath"
@@ -1577 +1567 @@ func (gw *Gateway) handleFilesLocal(fi *config.FileInfo) error {
path := dir + "/" + fi.Name
gw.logger.Debugf("mediaserver path placing file: %s", path)
- err = ioutil.WriteFile(path, *fi.Data, os.ModePerm)
+ err = os.WriteFile(path, *fi.Data, os.ModePerm) //nolint:gosec
if err != nil {
return fmt.Errorf("mediaserver path failed, could not writefile: %s %#v", err, err)
}
diff --git a/gateway/samechannel/samechannel_test.go b/gateway/samechannel/samechannel_test.go
index 1bed9cf..e5f54f2 100644
--- a/gateway/samechannel/samechannel_test.go
+++ b/gateway/samechannel/samechannel_test.go
@@ -17 +17 @@
package samechannel
import (
- "io/ioutil"
+ "io"
"testing"
"github.com/matterbridge-org/matterbridge/bridge/config"
@@ -697 +697 @@ var (
func TestGetConfig(t *testing.T) {
logger := logrus.New()
- logger.SetOutput(ioutil.Discard)
+ logger.SetOutput(io.Discard)
cfg := config.NewConfigFromString(logger, []byte(testConfig))
sgw := New(cfg)
configs := sgw.GetConfig()
diff --git a/hook/rockethook/rockethook.go b/hook/rockethook/rockethook.go
index 38f53e4..eea75f2 100644
--- a/hook/rockethook/rockethook.go
+++ b/hook/rockethook/rockethook.go
@@ -37 +37 @@ package rockethook
import (
"crypto/tls"
"encoding/json"
- "io/ioutil"
+ "io"
"log"
"net"
"net/http"
@@ -687 +688 @@ func (c *Client) ServeHTTP(w http.ResponseWriter, r *http.Request) {
return
}
msg := Message{}
- body, err := ioutil.ReadAll(r.Body)
+
+ body, err := io.ReadAll(r.Body)
if err != nil {
log.Println(err)
http.NotFound(w, r)
diff --git a/internal/bindata.go b/internal/bindata.go
index 6ea509a..ca767b5 100644
--- a/internal/bindata.go
+++ b/internal/bindata.go
@@ -97 +96 @@ import (
"compress/gzip"
"fmt"
"io"
- "io/ioutil"
"os"
"path/filepath"
"strings"
@@ -2427 +2417 @@ func RestoreAsset(dir, name string) error {
if err != nil {
return err
}
- err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode())
+ err = os.WriteFile(_filePath(dir, name), data, info.Mode())
if err != nil {
return err
}
diff --git a/matterhook/matterhook.go b/matterhook/matterhook.go
index b989d25..5e61d49 100644
--- a/matterhook/matterhook.go
+++ b/matterhook/matterhook.go
@@ -77 +76 @@ import (
"encoding/json"
"fmt"
"io"
- "io/ioutil"
"log"
"net"
"net/http"
@@ -1597 +15810 @@ func (c *Client) Send(msg OMessage) error {
defer resp.Body.Close()
// Read entire body to completion to re-use keep-alive connections.
- io.Copy(ioutil.Discard, resp.Body)
+ _, err2 := io.Copy(io.Discard, resp.Body)
+ if err2 != nil {
+ return err2
+ }
if resp.StatusCode != 200 {
return fmt.Errorf("unexpected status code: %d", resp.StatusCode)