diff --git a/.golangci.yaml b/.golangci.yaml index 068969fc8bd..e6b41a7da84 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -15,7 +15,6 @@ linters: - stylecheck # TODO: consider enabling the 'stylecheck' linter to enforce style rules. - usestdlibvars # TODO: consider enabling the 'usestdlibvars' linter to detect the possibility to use variables/constants from the Go standard library. - thelper # TODO: consider enabling the 'thelper' linter to detect golang test helpers without t.Helper() call and check the consistency of test helpers. - - staticcheck # TODO: consider enabling the 'staticcheck' linter to find bugs and performance issues, offer simplifications, and enforce style rules. - predeclared # TODO: consider enabling the 'predeclared' linter to find code that shadows one of Go's predeclared identifiers. - paralleltest # TODO: consider enabling the 'paralleltest' linter to detect missing usage of t.Parallel() method in Go test. - ireturn # TODO: consider enabling the 'ireturn' linter to accept interfaces and return concrete types. diff --git a/changelog/unreleased/enhancement-staticcheck.md b/changelog/unreleased/enhancement-staticcheck.md new file mode 100644 index 00000000000..95ddc80a6a9 --- /dev/null +++ b/changelog/unreleased/enhancement-staticcheck.md @@ -0,0 +1,3 @@ +Enhancement: Enable staticcheck linter in golangci-lint and solve issues + +https://github.com/cs3org/reva/pull/3487 diff --git a/cmd/reva/common.go b/cmd/reva/common.go index 64f80ac5668..69b6f3f9e08 100644 --- a/cmd/reva/common.go +++ b/cmd/reva/common.go @@ -21,7 +21,7 @@ package main import ( "bufio" "encoding/json" - "io/ioutil" + "os" gouser "os/user" "path" "strings" @@ -50,7 +50,7 @@ func getConfigFile() string { } func readConfig() (*config, error) { - data, err := ioutil.ReadFile(getConfigFile()) + data, err := os.ReadFile(getConfigFile()) if err != nil { return nil, err } @@ -68,7 +68,7 @@ func writeConfig(c *config) error { if err != nil { return err } - return ioutil.WriteFile(getConfigFile(), data, 0600) + return os.WriteFile(getConfigFile(), data, 0600) } func getTokenFile() string { @@ -81,7 +81,7 @@ func getTokenFile() string { } func readToken() (string, error) { - data, err := ioutil.ReadFile(getTokenFile()) + data, err := os.ReadFile(getTokenFile()) if err != nil { return "", err } @@ -89,7 +89,7 @@ func readToken() (string, error) { } func writeToken(token string) { - err := ioutil.WriteFile(getTokenFile(), []byte(token), 0600) + err := os.WriteFile(getTokenFile(), []byte(token), 0600) if err != nil { panic(err) } diff --git a/cmd/revad/internal/config/config.go b/cmd/revad/internal/config/config.go index 99eda406d84..77ecc790335 100644 --- a/cmd/revad/internal/config/config.go +++ b/cmd/revad/internal/config/config.go @@ -20,7 +20,6 @@ package config import ( "io" - "io/ioutil" "github.com/BurntSushi/toml" "github.com/pkg/errors" @@ -28,7 +27,7 @@ import ( // Read reads the configuration from the reader. func Read(r io.Reader) (map[string]interface{}, error) { - data, err := ioutil.ReadAll(r) + data, err := io.ReadAll(r) if err != nil { err = errors.Wrap(err, "config: error reading from reader") return nil, err diff --git a/cmd/revad/internal/grace/grace.go b/cmd/revad/internal/grace/grace.go index bd90e6bdc79..339a8c5c1e6 100644 --- a/cmd/revad/internal/grace/grace.go +++ b/cmd/revad/internal/grace/grace.go @@ -20,7 +20,6 @@ package grace import ( "fmt" - "io/ioutil" "net" "os" "os/signal" @@ -108,7 +107,7 @@ func (w *Watcher) clean() error { } func (w *Watcher) readPID() (int, error) { - piddata, err := ioutil.ReadFile(w.pidFile) + piddata, err := os.ReadFile(w.pidFile) if err != nil { return 0, err } @@ -123,7 +122,7 @@ func (w *Watcher) readPID() (int, error) { // GetProcessFromFile reads the pidfile and returns the running process or error if the process or file // are not available. func GetProcessFromFile(pfile string) (*os.Process, error) { - data, err := ioutil.ReadFile(pfile) + data, err := os.ReadFile(pfile) if err != nil { return nil, err } @@ -144,7 +143,7 @@ func GetProcessFromFile(pfile string) (*os.Process, error) { // WritePID writes the pid to the configured pid file. func (w *Watcher) WritePID() error { // Read in the pid file as a slice of bytes. - if piddata, err := ioutil.ReadFile(w.pidFile); err == nil { + if piddata, err := os.ReadFile(w.pidFile); err == nil { // Convert the file contents to an integer. if pid, err := strconv.Atoi(string(piddata)); err == nil { // Look for the pid in the process list. @@ -174,7 +173,7 @@ func (w *Watcher) WritePID() error { // If we get here, then the pidfile didn't exist or we are are in graceful reload and thus we overwrite // or the pid in it doesn't belong to the user running this app. - err := ioutil.WriteFile(w.pidFile, []byte(fmt.Sprintf("%d", os.Getpid())), 0664) + err := os.WriteFile(w.pidFile, []byte(fmt.Sprintf("%d", os.Getpid())), 0664) if err != nil { return err } diff --git a/cmd/revad/main.go b/cmd/revad/main.go index e803757c3dc..6d0ab9a09d5 100644 --- a/cmd/revad/main.go +++ b/cmd/revad/main.go @@ -21,7 +21,7 @@ package main import ( "flag" "fmt" - "io/ioutil" + "io/fs" "os" "path" "regexp" @@ -163,10 +163,18 @@ func getConfigs() ([]map[string]interface{}, error) { } func getConfigsFromDir(dir string) (confs []string, err error) { - files, err := ioutil.ReadDir(*dirFlag) + entries, err := os.ReadDir(*dirFlag) if err != nil { return nil, err } + files := make([]fs.FileInfo, 0, len(entries)) + for _, entry := range entries { + info, err := entry.Info() + if err != nil { + return nil, err + } + files = append(files, info) + } for _, value := range files { if !value.IsDir() { diff --git a/docs/content/en/docs/config/grpc/services/appprovider/_index.md b/docs/content/en/docs/config/grpc/services/appprovider/_index.md index 7a87e329c36..db3ebb32877 100644 --- a/docs/content/en/docs/config/grpc/services/appprovider/_index.md +++ b/docs/content/en/docs/config/grpc/services/appprovider/_index.md @@ -9,7 +9,7 @@ description: > # _struct: config_ {{% dir name="mime_types" type="[]string" default=nil %}} -A list of mime types supported by this app. [[Ref]](https://github.com/cs3org/reva/tree/master/internal/grpc/services/appprovider/appprovider.go#L63) +A list of mime types supported by this app. [[Ref]](https://github.com/cs3org/reva/tree/master/internal/grpc/services/appprovider/appprovider.go#L62) {{< highlight toml >}} [grpc.services.appprovider] mime_types = nil @@ -17,7 +17,7 @@ mime_types = nil {{% /dir %}} {{% dir name="custom_mime_types_json" type="string" default="nil" %}} -An optional mapping file with the list of supported custom file extensions and corresponding mime types. [[Ref]](https://github.com/cs3org/reva/tree/master/internal/grpc/services/appprovider/appprovider.go#L64) +An optional mapping file with the list of supported custom file extensions and corresponding mime types. [[Ref]](https://github.com/cs3org/reva/tree/master/internal/grpc/services/appprovider/appprovider.go#L63) {{< highlight toml >}} [grpc.services.appprovider] custom_mime_types_json = "nil" diff --git a/docs/content/en/docs/config/grpc/services/storageprovider/_index.md b/docs/content/en/docs/config/grpc/services/storageprovider/_index.md index 8a7af3e7bb9..0f14db6708f 100644 --- a/docs/content/en/docs/config/grpc/services/storageprovider/_index.md +++ b/docs/content/en/docs/config/grpc/services/storageprovider/_index.md @@ -9,7 +9,7 @@ description: > # _struct: config_ {{% dir name="mount_path" type="string" default="/" %}} -The path where the file system would be mounted. [[Ref]](https://github.com/cs3org/reva/tree/master/internal/grpc/services/storageprovider/storageprovider.go#L58) +The path where the file system would be mounted. [[Ref]](https://github.com/cs3org/reva/tree/master/internal/grpc/services/storageprovider/storageprovider.go#L57) {{< highlight toml >}} [grpc.services.storageprovider] mount_path = "/" @@ -17,7 +17,7 @@ mount_path = "/" {{% /dir %}} {{% dir name="mount_id" type="string" default="-" %}} -The ID of the mounted file system. [[Ref]](https://github.com/cs3org/reva/tree/master/internal/grpc/services/storageprovider/storageprovider.go#L59) +The ID of the mounted file system. [[Ref]](https://github.com/cs3org/reva/tree/master/internal/grpc/services/storageprovider/storageprovider.go#L58) {{< highlight toml >}} [grpc.services.storageprovider] mount_id = "-" @@ -25,7 +25,7 @@ mount_id = "-" {{% /dir %}} {{% dir name="driver" type="string" default="localhome" %}} -The storage driver to be used. [[Ref]](https://github.com/cs3org/reva/tree/master/internal/grpc/services/storageprovider/storageprovider.go#L60) +The storage driver to be used. [[Ref]](https://github.com/cs3org/reva/tree/master/internal/grpc/services/storageprovider/storageprovider.go#L59) {{< highlight toml >}} [grpc.services.storageprovider] driver = "localhome" @@ -33,7 +33,7 @@ driver = "localhome" {{% /dir %}} {{% dir name="drivers" type="map[string]map[string]interface{}" default="localhome" %}} - [[Ref]](https://github.com/cs3org/reva/tree/master/internal/grpc/services/storageprovider/storageprovider.go#L61) + [[Ref]](https://github.com/cs3org/reva/tree/master/internal/grpc/services/storageprovider/storageprovider.go#L60) {{< highlight toml >}} [grpc.services.storageprovider.drivers.localhome] root = "/var/tmp/reva/" @@ -44,7 +44,7 @@ user_layout = "{{.Username}}" {{% /dir %}} {{% dir name="tmp_folder" type="string" default="/var/tmp" %}} -Path to temporary folder. [[Ref]](https://github.com/cs3org/reva/tree/master/internal/grpc/services/storageprovider/storageprovider.go#L62) +Path to temporary folder. [[Ref]](https://github.com/cs3org/reva/tree/master/internal/grpc/services/storageprovider/storageprovider.go#L61) {{< highlight toml >}} [grpc.services.storageprovider] tmp_folder = "/var/tmp" @@ -52,7 +52,7 @@ tmp_folder = "/var/tmp" {{% /dir %}} {{% dir name="data_server_url" type="string" default="http://localhost/data" %}} -The URL for the data server. [[Ref]](https://github.com/cs3org/reva/tree/master/internal/grpc/services/storageprovider/storageprovider.go#L63) +The URL for the data server. [[Ref]](https://github.com/cs3org/reva/tree/master/internal/grpc/services/storageprovider/storageprovider.go#L62) {{< highlight toml >}} [grpc.services.storageprovider] data_server_url = "http://localhost/data" @@ -60,7 +60,7 @@ data_server_url = "http://localhost/data" {{% /dir %}} {{% dir name="expose_data_server" type="bool" default=false %}} -Whether to expose data server. [[Ref]](https://github.com/cs3org/reva/tree/master/internal/grpc/services/storageprovider/storageprovider.go#L64) +Whether to expose data server. [[Ref]](https://github.com/cs3org/reva/tree/master/internal/grpc/services/storageprovider/storageprovider.go#L63) {{< highlight toml >}} [grpc.services.storageprovider] expose_data_server = false @@ -68,7 +68,7 @@ expose_data_server = false {{% /dir %}} {{% dir name="available_checksums" type="map[string]uint32" default=nil %}} -List of available checksums. [[Ref]](https://github.com/cs3org/reva/tree/master/internal/grpc/services/storageprovider/storageprovider.go#L65) +List of available checksums. [[Ref]](https://github.com/cs3org/reva/tree/master/internal/grpc/services/storageprovider/storageprovider.go#L64) {{< highlight toml >}} [grpc.services.storageprovider] available_checksums = nil @@ -76,7 +76,7 @@ available_checksums = nil {{% /dir %}} {{% dir name="custom_mime_types_json" type="string" default="nil" %}} -An optional mapping file with the list of supported custom file extensions and corresponding mime types. [[Ref]](https://github.com/cs3org/reva/tree/master/internal/grpc/services/storageprovider/storageprovider.go#L66) +An optional mapping file with the list of supported custom file extensions and corresponding mime types. [[Ref]](https://github.com/cs3org/reva/tree/master/internal/grpc/services/storageprovider/storageprovider.go#L65) {{< highlight toml >}} [grpc.services.storageprovider] custom_mime_types_json = "nil" diff --git a/docs/content/en/docs/config/packages/app/provider/wopi/_index.md b/docs/content/en/docs/config/packages/app/provider/wopi/_index.md index c9dfca1b7ca..631923d946b 100644 --- a/docs/content/en/docs/config/packages/app/provider/wopi/_index.md +++ b/docs/content/en/docs/config/packages/app/provider/wopi/_index.md @@ -8,16 +8,16 @@ description: > # _struct: config_ -{{% dir name="mime_types" type="[]string" default= %}} -Inherited from the appprovider. [[Ref]](https://github.com/cs3org/reva/tree/master/pkg/app/provider/wopi/wopi.go#L59) +{{% dir name="mime_types" type="[]string" default=nil %}} +Inherited from the appprovider. [[Ref]](https://github.com/cs3org/reva/tree/master/pkg/app/provider/wopi/wopi.go#L58) {{< highlight toml >}} [app.provider.wopi] -mime_types = +mime_types = nil {{< /highlight >}} {{% /dir %}} {{% dir name="iop_secret" type="string" default="" %}} -The IOP secret used to connect to the wopiserver. [[Ref]](https://github.com/cs3org/reva/tree/master/pkg/app/provider/wopi/wopi.go#L60) +The IOP secret used to connect to the wopiserver. [[Ref]](https://github.com/cs3org/reva/tree/master/pkg/app/provider/wopi/wopi.go#L59) {{< highlight toml >}} [app.provider.wopi] iop_secret = "" @@ -25,7 +25,7 @@ iop_secret = "" {{% /dir %}} {{% dir name="wopi_url" type="string" default="" %}} -The wopiserver's URL. [[Ref]](https://github.com/cs3org/reva/tree/master/pkg/app/provider/wopi/wopi.go#L61) +The wopiserver's URL. [[Ref]](https://github.com/cs3org/reva/tree/master/pkg/app/provider/wopi/wopi.go#L60) {{< highlight toml >}} [app.provider.wopi] wopi_url = "" @@ -33,7 +33,7 @@ wopi_url = "" {{% /dir %}} {{% dir name="app_name" type="string" default="" %}} -The App user-friendly name. [[Ref]](https://github.com/cs3org/reva/tree/master/pkg/app/provider/wopi/wopi.go#L62) +The App user-friendly name. [[Ref]](https://github.com/cs3org/reva/tree/master/pkg/app/provider/wopi/wopi.go#L61) {{< highlight toml >}} [app.provider.wopi] app_name = "" @@ -41,7 +41,7 @@ app_name = "" {{% /dir %}} {{% dir name="app_icon_uri" type="string" default="" %}} -A URI to a static asset which represents the app icon. [[Ref]](https://github.com/cs3org/reva/tree/master/pkg/app/provider/wopi/wopi.go#L63) +A URI to a static asset which represents the app icon. [[Ref]](https://github.com/cs3org/reva/tree/master/pkg/app/provider/wopi/wopi.go#L62) {{< highlight toml >}} [app.provider.wopi] app_icon_uri = "" @@ -49,7 +49,7 @@ app_icon_uri = "" {{% /dir %}} {{% dir name="app_url" type="string" default="" %}} -The App URL. [[Ref]](https://github.com/cs3org/reva/tree/master/pkg/app/provider/wopi/wopi.go#L64) +The App URL. [[Ref]](https://github.com/cs3org/reva/tree/master/pkg/app/provider/wopi/wopi.go#L63) {{< highlight toml >}} [app.provider.wopi] app_url = "" @@ -57,7 +57,7 @@ app_url = "" {{% /dir %}} {{% dir name="app_int_url" type="string" default="" %}} -The internal app URL in case of dockerized deployments. Defaults to AppURL [[Ref]](https://github.com/cs3org/reva/tree/master/pkg/app/provider/wopi/wopi.go#L65) +The internal app URL in case of dockerized deployments. Defaults to AppURL [[Ref]](https://github.com/cs3org/reva/tree/master/pkg/app/provider/wopi/wopi.go#L64) {{< highlight toml >}} [app.provider.wopi] app_int_url = "" @@ -65,7 +65,7 @@ app_int_url = "" {{% /dir %}} {{% dir name="app_api_key" type="string" default="" %}} -The API key used by the app, if applicable. [[Ref]](https://github.com/cs3org/reva/tree/master/pkg/app/provider/wopi/wopi.go#L66) +The API key used by the app, if applicable. [[Ref]](https://github.com/cs3org/reva/tree/master/pkg/app/provider/wopi/wopi.go#L65) {{< highlight toml >}} [app.provider.wopi] app_api_key = "" @@ -73,7 +73,7 @@ app_api_key = "" {{% /dir %}} {{% dir name="jwt_secret" type="string" default="" %}} -The JWT secret to be used to retrieve the token TTL. [[Ref]](https://github.com/cs3org/reva/tree/master/pkg/app/provider/wopi/wopi.go#L67) +The JWT secret to be used to retrieve the token TTL. [[Ref]](https://github.com/cs3org/reva/tree/master/pkg/app/provider/wopi/wopi.go#L66) {{< highlight toml >}} [app.provider.wopi] jwt_secret = "" @@ -81,7 +81,7 @@ jwt_secret = "" {{% /dir %}} {{% dir name="app_desktop_only" type="bool" default=false %}} -Specifies if the app can be opened only on desktop. [[Ref]](https://github.com/cs3org/reva/tree/master/pkg/app/provider/wopi/wopi.go#L68) +Specifies if the app can be opened only on desktop. [[Ref]](https://github.com/cs3org/reva/tree/master/pkg/app/provider/wopi/wopi.go#L67) {{< highlight toml >}} [app.provider.wopi] app_desktop_only = false diff --git a/docs/content/en/docs/config/packages/storage/utils/decomposedfs/atomicity.md b/docs/content/en/docs/config/packages/storage/utils/decomposedfs/atomicity.md index 72118863f6a..abced060cd9 100644 --- a/docs/content/en/docs/config/packages/storage/utils/decomposedfs/atomicity.md +++ b/docs/content/en/docs/config/packages/storage/utils/decomposedfs/atomicity.md @@ -167,16 +167,15 @@ package main import ( "fmt" - "io/ioutil" "os" ) func main() { - err := ioutil.WriteFile("file1", []byte(""), 0600) + err := os.WriteFile("file1", []byte(""), 0600) if err != nil { os.Exit(1) } - err = ioutil.WriteFile("file2", []byte(""), 0600) + err = os.WriteFile("file2", []byte(""), 0600) if err != nil { os.Exit(1) } @@ -208,16 +207,15 @@ package main import ( "fmt" - "io/ioutil" "os" ) func main() { - err := ioutil.WriteFile("file1", []byte(""), 0600) + err := os.WriteFile("file1", []byte(""), 0600) if err != nil { os.Exit(1) } - err = ioutil.WriteFile("file2", []byte(""), 0600) + err = os.WriteFile("file2", []byte(""), 0600) if err != nil { os.Exit(1) } diff --git a/examples/plugin/json/json.go b/examples/plugin/json/json.go index fc3f8beb4cc..a4d3c0c0361 100644 --- a/examples/plugin/json/json.go +++ b/examples/plugin/json/json.go @@ -22,7 +22,7 @@ import ( "context" "encoding/json" "errors" - "io/ioutil" + "os" "strings" userpb "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1" @@ -63,7 +63,7 @@ func (m *Manager) Configure(ml map[string]interface{}) error { return err } - f, err := ioutil.ReadFile(c.Users) + f, err := os.ReadFile(c.Users) if err != nil { return err } diff --git a/go.mod b/go.mod index b8179855283..2760ea9b707 100644 --- a/go.mod +++ b/go.mod @@ -67,6 +67,7 @@ require ( golang.org/x/sync v0.0.0-20210220032951-036812b2e83c golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 + golang.org/x/text v0.3.7 google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb google.golang.org/grpc v1.47.0 google.golang.org/protobuf v1.28.0 @@ -150,7 +151,6 @@ require ( go.etcd.io/bbolt v1.3.6 // indirect go.mongodb.org/mongo-driver v1.8.3 // indirect golang.org/x/net v0.0.0-20220325170049-de3da57026de // indirect - golang.org/x/text v0.3.7 // indirect golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11 // indirect google.golang.org/appengine v1.6.7 // indirect gopkg.in/ini.v1 v1.62.0 // indirect diff --git a/internal/grpc/services/appprovider/appprovider.go b/internal/grpc/services/appprovider/appprovider.go index 453fb8698ca..4daa20b323b 100644 --- a/internal/grpc/services/appprovider/appprovider.go +++ b/internal/grpc/services/appprovider/appprovider.go @@ -23,7 +23,6 @@ import ( "encoding/json" "errors" "fmt" - "io/ioutil" "os" "strconv" "time" @@ -114,7 +113,7 @@ func registerMimeTypes(mappingFile string) error { // TODO(lopresti) this function also exists in the storage provider, to be seen if we want to factor it out, though a // fileext <-> mimetype "service" would have to be served by the gateway for it to be accessible both by storage providers and app providers. if mappingFile != "" { - f, err := ioutil.ReadFile(mappingFile) + f, err := os.ReadFile(mappingFile) if err != nil { return fmt.Errorf("appprovider: error reading the custom mime types file: +%v", err) } diff --git a/internal/grpc/services/datatx/datatx.go b/internal/grpc/services/datatx/datatx.go index 8c2c2b87e27..cb293886be5 100644 --- a/internal/grpc/services/datatx/datatx.go +++ b/internal/grpc/services/datatx/datatx.go @@ -22,7 +22,7 @@ import ( "context" "encoding/json" "fmt" - "io/ioutil" + "io" "net/url" "os" "sync" @@ -334,7 +334,7 @@ func (s *service) extractEndpointInfo(ctx context.Context, targetURL string) (*w func loadOrCreate(file string) (*txShareModel, error) { _, err := os.Stat(file) if os.IsNotExist(err) { - if err := ioutil.WriteFile(file, []byte("{}"), 0700); err != nil { + if err := os.WriteFile(file, []byte("{}"), 0700); err != nil { err = errors.Wrap(err, "datatx service: error creating the transfer shares storage file: "+file) return nil, err } @@ -347,7 +347,7 @@ func loadOrCreate(file string) (*txShareModel, error) { } defer fd.Close() - data, err := ioutil.ReadAll(fd) + data, err := io.ReadAll(fd) if err != nil { err = errors.Wrap(err, "datatx service: error reading the data") return nil, err @@ -374,7 +374,7 @@ func (m *txShareModel) saveTxShare() error { return err } - if err := ioutil.WriteFile(m.File, data, 0644); err != nil { + if err := os.WriteFile(m.File, data, 0644); err != nil { err = errors.Wrap(err, "datatx service: error writing transfer share data to file: "+m.File) return err } diff --git a/internal/grpc/services/storageprovider/storageprovider.go b/internal/grpc/services/storageprovider/storageprovider.go index 2129e930f0b..ad47edbbcb6 100644 --- a/internal/grpc/services/storageprovider/storageprovider.go +++ b/internal/grpc/services/storageprovider/storageprovider.go @@ -22,7 +22,6 @@ import ( "context" "encoding/json" "fmt" - "io/ioutil" "net/url" "os" "path" @@ -144,7 +143,7 @@ func parseConfig(m map[string]interface{}) (*config, error) { func registerMimeTypes(mappingFile string) error { if mappingFile != "" { - f, err := ioutil.ReadFile(mappingFile) + f, err := os.ReadFile(mappingFile) if err != nil { return fmt.Errorf("storageprovider: error reading the custom mime types file: +%v", err) } diff --git a/internal/http/interceptors/log/log.go b/internal/http/interceptors/log/log.go index 3255cc7ad65..9e587c59bc9 100644 --- a/internal/http/interceptors/log/log.go +++ b/internal/http/interceptors/log/log.go @@ -63,13 +63,9 @@ func makeLogger(w http.ResponseWriter) loggingResponseWriter { if _, ok := w.(http.Hijacker); ok { logger = &hijackLogger{responseLogger{w: w, status: http.StatusOK}} } - h, ok1 := logger.(http.Hijacker) - c, ok2 := w.(http.CloseNotifier) - if ok1 && ok2 { - return hijackCloseNotifier{logger, h, c} - } - if ok2 { - return &closeNotifyWriter{logger, c} + h, ok := logger.(http.Hijacker) + if ok { + return hijackCloseNotifier{logger, h} } return logger } @@ -183,13 +179,7 @@ func (l *hijackLogger) Hijack() (net.Conn, *bufio.ReadWriter, error) { return conn, rw, err } -type closeNotifyWriter struct { - loggingResponseWriter - http.CloseNotifier -} - type hijackCloseNotifier struct { loggingResponseWriter http.Hijacker - http.CloseNotifier } diff --git a/internal/http/services/reverseproxy/reverseproxy.go b/internal/http/services/reverseproxy/reverseproxy.go index 09d7d968a3f..6439667ee67 100644 --- a/internal/http/services/reverseproxy/reverseproxy.go +++ b/internal/http/services/reverseproxy/reverseproxy.go @@ -20,10 +20,10 @@ package reverseproxy import ( "encoding/json" - "io/ioutil" "net/http" "net/http/httputil" "net/url" + "os" ctxpkg "github.com/cs3org/reva/pkg/ctx" "github.com/cs3org/reva/pkg/rhttp/global" @@ -63,7 +63,7 @@ func New(m map[string]interface{}, log *zerolog.Logger) (global.Service, error) } conf.init() - f, err := ioutil.ReadFile(conf.ProxyRulesJSON) + f, err := os.ReadFile(conf.ProxyRulesJSON) if err != nil { return nil, err } diff --git a/pkg/app/provider/wopi/wopi.go b/pkg/app/provider/wopi/wopi.go index 49004de73d9..436d4d74632 100644 --- a/pkg/app/provider/wopi/wopi.go +++ b/pkg/app/provider/wopi/wopi.go @@ -24,7 +24,6 @@ import ( "encoding/json" "fmt" "io" - "io/ioutil" "net/http" "net/url" "os" @@ -56,7 +55,7 @@ func init() { } type config struct { - MimeTypes []string `mapstructure:"mime_types" docs:";Inherited from the appprovider."` + MimeTypes []string `mapstructure:"mime_types" docs:"nil;Inherited from the appprovider."` IOPSecret string `mapstructure:"iop_secret" docs:";The IOP secret used to connect to the wopiserver."` WopiURL string `mapstructure:"wopi_url" docs:";The wopiserver's URL."` AppName string `mapstructure:"app_name" docs:";The App user-friendly name."` @@ -205,7 +204,7 @@ func (p *wopiProvider) GetAppURL(ctx context.Context, resource *provider.Resourc } defer openRes.Body.Close() - body, err := ioutil.ReadAll(openRes.Body) + body, err := io.ReadAll(openRes.Body) if err != nil { return nil, err } diff --git a/pkg/appauth/manager/json/json.go b/pkg/appauth/manager/json/json.go index 955d8de8b4c..58f0c971e0c 100644 --- a/pkg/appauth/manager/json/json.go +++ b/pkg/appauth/manager/json/json.go @@ -21,7 +21,7 @@ package json import ( "context" "encoding/json" - "io/ioutil" + "io" "os" "sync" "time" @@ -100,7 +100,7 @@ func parseConfig(m map[string]interface{}) (*config, error) { func loadOrCreate(file string) (*jsonManager, error) { stat, err := os.Stat(file) if os.IsNotExist(err) || stat.Size() == 0 { - if err = ioutil.WriteFile(file, []byte("{}"), 0644); err != nil { + if err = os.WriteFile(file, []byte("{}"), 0644); err != nil { return nil, errors.Wrapf(err, "error creating the file %s", file) } } @@ -111,7 +111,7 @@ func loadOrCreate(file string) (*jsonManager, error) { } defer fd.Close() - data, err := ioutil.ReadAll(fd) + data, err := io.ReadAll(fd) if err != nil { return nil, errors.Wrapf(err, "error reading the file %s", file) } @@ -246,7 +246,7 @@ func (mgr *jsonManager) save() error { return errors.Wrap(err, "error encoding json file") } - if err = ioutil.WriteFile(mgr.config.File, data, 0644); err != nil { + if err = os.WriteFile(mgr.config.File, data, 0644); err != nil { return errors.Wrapf(err, "error writing to file %s", mgr.config.File) } diff --git a/pkg/appauth/manager/json/json_test.go b/pkg/appauth/manager/json/json_test.go index 6cc1ae6e7d2..428fa6d9a6c 100644 --- a/pkg/appauth/manager/json/json_test.go +++ b/pkg/appauth/manager/json/json_test.go @@ -22,7 +22,7 @@ import ( "bytes" "context" "encoding/json" - "io/ioutil" + "io" "os" "reflect" "testing" @@ -270,7 +270,7 @@ func TestGenerateAppPassword(t *testing.T) { if err != nil { t.Fatal(err) } - data, err := ioutil.ReadAll(tmpFile) + data, err := io.ReadAll(tmpFile) if err != nil { t.Fatalf("error reading file %s: %v", tmpFile.Name(), err) } @@ -701,7 +701,7 @@ func TestGetAppPassword(t *testing.T) { } func createTempDir(t *testing.T, name string) string { - tempDir, err := ioutil.TempDir("", name) + tempDir, err := os.MkdirTemp("", name) if err != nil { t.Fatalf("error while creating temp dir: %v", err) } @@ -709,7 +709,7 @@ func createTempDir(t *testing.T, name string) string { } func createTempFile(t *testing.T, tempDir string, name string) *os.File { - tempFile, err := ioutil.TempFile(tempDir, name) + tempFile, err := os.CreateTemp(tempDir, name) if err != nil { t.Fatalf("error while creating temp file: %v", err) } diff --git a/pkg/auth/manager/json/json.go b/pkg/auth/manager/json/json.go index 1e989fba5f0..bf66c465ebe 100644 --- a/pkg/auth/manager/json/json.go +++ b/pkg/auth/manager/json/json.go @@ -21,7 +21,7 @@ package json import ( "context" "encoding/json" - "io/ioutil" + "os" authpb "github.com/cs3org/go-cs3apis/cs3/auth/provider/v1beta1" user "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1" @@ -94,7 +94,7 @@ func (m *manager) Configure(ml map[string]interface{}) error { } m.credentials = map[string]*Credentials{} - f, err := ioutil.ReadFile(c.Users) + f, err := os.ReadFile(c.Users) if err != nil { return err } diff --git a/pkg/auth/manager/json/json_test.go b/pkg/auth/manager/json/json_test.go index 3abaf024a6d..a75d21f81d7 100644 --- a/pkg/auth/manager/json/json_test.go +++ b/pkg/auth/manager/json/json_test.go @@ -20,7 +20,6 @@ package json import ( "context" - "io/ioutil" "os" "testing" @@ -93,7 +92,7 @@ func TestGetManagerWithJSONObject(t *testing.T) { var tmpFile *os.File // add tempdir - tmpDir, err := ioutil.TempDir("", "json_test") + tmpDir, err := os.MkdirTemp("", "json_test") if err != nil { t.Fatalf("Error while creating temp dir: %v", err) } @@ -101,7 +100,7 @@ func TestGetManagerWithJSONObject(t *testing.T) { for _, tt := range tests { // get file handler for temporary file - tmpFile, err = ioutil.TempFile(tmpDir, "json_test") + tmpFile, err = os.CreateTemp(tmpDir, "json_test") if err != nil { t.Fatalf("Error while opening temp file: %v", err) } @@ -159,14 +158,14 @@ func TestGetAuthenticatedManager(t *testing.T) { } // add tempdir - tempdir, err := ioutil.TempDir("", "json_test") + tempdir, err := os.MkdirTemp("", "json_test") if err != nil { t.Fatalf("Error while creating temp dir: %v", err) } defer os.RemoveAll(tempdir) // get file handler for temporary file - tempFile, err := ioutil.TempFile(tempdir, "json_test") + tempFile, err := os.CreateTemp(tempdir, "json_test") if err != nil { t.Fatalf("Error while opening temp file: %v", err) } diff --git a/pkg/auth/manager/oidc/oidc.go b/pkg/auth/manager/oidc/oidc.go index 6b4cb70676d..c23aa30ba32 100644 --- a/pkg/auth/manager/oidc/oidc.go +++ b/pkg/auth/manager/oidc/oidc.go @@ -24,7 +24,7 @@ import ( "context" "encoding/json" "fmt" - "io/ioutil" + "os" "strings" "time" @@ -125,7 +125,7 @@ func (am *mgr) Configure(m map[string]interface{}) error { return nil } - f, err := ioutil.ReadFile(c.UsersMapping) + f, err := os.ReadFile(c.UsersMapping) if err != nil { return fmt.Errorf("oidc: error reading the users mapping file: +%v", err) } diff --git a/pkg/auth/manager/owncloudsql/accounts/accounts_test.go b/pkg/auth/manager/owncloudsql/accounts/accounts_test.go index bb00fcbf2f2..320a291ccad 100644 --- a/pkg/auth/manager/owncloudsql/accounts/accounts_test.go +++ b/pkg/auth/manager/owncloudsql/accounts/accounts_test.go @@ -21,7 +21,6 @@ package accounts_test import ( "context" "database/sql" - "io/ioutil" "os" _ "github.com/mattn/go-sqlite3" @@ -41,10 +40,10 @@ var _ = Describe("Accounts", func() { BeforeEach(func() { var err error - testDbFile, err = ioutil.TempFile("", "example") + testDbFile, err = os.CreateTemp("", "example") Expect(err).ToNot(HaveOccurred()) - dbData, err := ioutil.ReadFile("test.sqlite") + dbData, err := os.ReadFile("test.sqlite") Expect(err).ToNot(HaveOccurred()) _, err = testDbFile.Write(dbData) diff --git a/pkg/cbox/utils/tokenmanagement.go b/pkg/cbox/utils/tokenmanagement.go index 8a995dc3249..273411e79e4 100644 --- a/pkg/cbox/utils/tokenmanagement.go +++ b/pkg/cbox/utils/tokenmanagement.go @@ -22,7 +22,7 @@ import ( "context" "encoding/json" "errors" - "io/ioutil" + "io" "net/http" "net/url" "strings" @@ -109,7 +109,7 @@ func (a *APITokenManager) getAPIToken(ctx context.Context) (string, time.Time, e } defer httpRes.Body.Close() - body, err := ioutil.ReadAll(httpRes.Body) + body, err := io.ReadAll(httpRes.Body) if err != nil { return "", time.Time{}, err } @@ -159,7 +159,7 @@ func (a *APITokenManager) SendAPIGetRequest(ctx context.Context, url string, for return nil, errors.New("rest: API request returned " + httpRes.Status) } - body, err := ioutil.ReadAll(httpRes.Body) + body, err := io.ReadAll(httpRes.Body) if err != nil { return nil, err } diff --git a/pkg/datatx/manager/rclone/rclone.go b/pkg/datatx/manager/rclone/rclone.go index 7644df66582..41752ed6ed5 100644 --- a/pkg/datatx/manager/rclone/rclone.go +++ b/pkg/datatx/manager/rclone/rclone.go @@ -23,7 +23,7 @@ import ( "context" "encoding/json" "fmt" - "io/ioutil" + "io" "net/http" "net/url" "os" @@ -158,7 +158,7 @@ func parseConfig(m map[string]interface{}) (*config, error) { func loadOrCreate(file string) (*transferModel, error) { _, err := os.Stat(file) if os.IsNotExist(err) { - if err := ioutil.WriteFile(file, []byte("{}"), 0700); err != nil { + if err := os.WriteFile(file, []byte("{}"), 0700); err != nil { err = errors.Wrap(err, "error creating the transfers storage file: "+file) return nil, err } @@ -171,7 +171,7 @@ func loadOrCreate(file string) (*transferModel, error) { } defer fd.Close() - data, err := ioutil.ReadAll(fd) + data, err := io.ReadAll(fd) if err != nil { err = errors.Wrap(err, "error reading the data") return nil, err @@ -199,7 +199,7 @@ func (m *transferModel) saveTransfer(e error) error { return e } - if err := ioutil.WriteFile(m.File, data, 0644); err != nil { + if err := os.WriteFile(m.File, data, 0644); err != nil { e = errors.Wrap(err, "error writing transfer data to file: "+m.File) return e } diff --git a/pkg/eosclient/eosbinary/eosbinary.go b/pkg/eosclient/eosbinary/eosbinary.go index f07192db9da..b8155759988 100644 --- a/pkg/eosclient/eosbinary/eosbinary.go +++ b/pkg/eosclient/eosbinary/eosbinary.go @@ -23,7 +23,6 @@ import ( "context" "fmt" "io" - "io/ioutil" "os" "os/exec" "path" @@ -745,7 +744,7 @@ func (c *Client) Read(ctx context.Context, auth eosclient.Authorization, path st // Write writes a stream to the mgm func (c *Client) Write(ctx context.Context, auth eosclient.Authorization, path string, stream io.ReadCloser) error { - fd, err := ioutil.TempFile(c.opt.CacheDirectory, "eoswrite-") + fd, err := os.CreateTemp(c.opt.CacheDirectory, "eoswrite-") if err != nil { return err } diff --git a/pkg/eosclient/eosgrpc/eosgrpc.go b/pkg/eosclient/eosgrpc/eosgrpc.go index 2c4f47c2696..bd516d8f0cc 100644 --- a/pkg/eosclient/eosgrpc/eosgrpc.go +++ b/pkg/eosclient/eosgrpc/eosgrpc.go @@ -24,7 +24,6 @@ import ( "encoding/hex" "fmt" "io" - "io/ioutil" "os" "os/exec" "path" @@ -1303,7 +1302,7 @@ func (c *Client) Write(ctx context.Context, auth eosclient.Authorization, path s length = -1 if c.opt.WriteUsesLocalTemp { - fd, err := ioutil.TempFile(c.opt.CacheDirectory, "eoswrite-") + fd, err := os.CreateTemp(c.opt.CacheDirectory, "eoswrite-") if err != nil { return err } diff --git a/pkg/group/manager/json/json.go b/pkg/group/manager/json/json.go index 3e54b7765c9..9446df25f77 100644 --- a/pkg/group/manager/json/json.go +++ b/pkg/group/manager/json/json.go @@ -21,7 +21,7 @@ package json import ( "context" "encoding/json" - "io/ioutil" + "os" "strconv" "strings" @@ -70,7 +70,7 @@ func New(m map[string]interface{}) (group.Manager, error) { return nil, err } - f, err := ioutil.ReadFile(c.Groups) + f, err := os.ReadFile(c.Groups) if err != nil { return nil, err } diff --git a/pkg/group/manager/json/json_test.go b/pkg/group/manager/json/json_test.go index 3960276d4af..ed28f6f8b9a 100644 --- a/pkg/group/manager/json/json_test.go +++ b/pkg/group/manager/json/json_test.go @@ -20,7 +20,6 @@ package json import ( "context" - "io/ioutil" "os" "reflect" "testing" @@ -34,7 +33,7 @@ var ctx = context.Background() func TestUserManager(t *testing.T) { // add tempdir - tempdir, err := ioutil.TempDir("", "json_test") + tempdir, err := os.MkdirTemp("", "json_test") if err != nil { t.Fatalf("error while create temp dir: %v", err) } @@ -44,7 +43,7 @@ func TestUserManager(t *testing.T) { userJSON := `[{` // get file handler for temporary file - file, err := ioutil.TempFile(tempdir, "json_test") + file, err := os.CreateTemp(tempdir, "json_test") if err != nil { t.Fatalf("error while open temp file: %v", err) } @@ -71,7 +70,7 @@ func TestUserManager(t *testing.T) { userJSON = `[{"id":{"opaque_id":"sailing-lovers"},"group_name":"sailing-lovers","mail":"sailing-lovers@example.org","display_name":"Sailing Lovers","gid_number":1234,"members":[{"idp":"localhost","opaque_id":"einstein","type":1},{"idp":"localhost","opaque_id":"marie","type":1}]}]` // get file handler for temporary file - file, err = ioutil.TempFile(tempdir, "json_test") + file, err = os.CreateTemp(tempdir, "json_test") if err != nil { t.Fatalf("error while open temp file: %v", err) } diff --git a/pkg/mentix/exchangers/exporters/promsd.go b/pkg/mentix/exchangers/exporters/promsd.go index baaf087682b..ce7eeb2dc66 100755 --- a/pkg/mentix/exchangers/exporters/promsd.go +++ b/pkg/mentix/exchangers/exporters/promsd.go @@ -21,7 +21,6 @@ package exporters import ( "encoding/json" "fmt" - "io/ioutil" "net/url" "os" "path" @@ -222,7 +221,7 @@ func (exporter *PrometheusSDExporter) exportScrapeConfig(outputFilename string, } // Write the data to disk - if err := ioutil.WriteFile(outputFilename, data, 0755); err != nil { + if err := os.WriteFile(outputFilename, data, 0755); err != nil { return fmt.Errorf("unable to write scrape config '%v': %v", outputFilename, err) } diff --git a/pkg/mentix/exchangers/exporters/reqexporter.go b/pkg/mentix/exchangers/exporters/reqexporter.go index 59c15439ce8..c7668cf8043 100644 --- a/pkg/mentix/exchangers/exporters/reqexporter.go +++ b/pkg/mentix/exchangers/exporters/reqexporter.go @@ -19,7 +19,7 @@ package exporters import ( - "io/ioutil" + "io" "net/http" "net/url" @@ -37,7 +37,7 @@ type BaseRequestExporter struct { // HandleRequest handles the actual HTTP request. func (exporter *BaseRequestExporter) HandleRequest(resp http.ResponseWriter, req *http.Request, conf *config.Configuration, log *zerolog.Logger) { - body, _ := ioutil.ReadAll(req.Body) + body, _ := io.ReadAll(req.Body) status, respData, err := exporter.handleQuery(body, req.URL.Query(), conf, log) if err != nil { respData = []byte(err.Error()) diff --git a/pkg/mentix/exchangers/importers/reqimporter.go b/pkg/mentix/exchangers/importers/reqimporter.go index 933db84fa53..4311e2ec18b 100644 --- a/pkg/mentix/exchangers/importers/reqimporter.go +++ b/pkg/mentix/exchangers/importers/reqimporter.go @@ -19,7 +19,7 @@ package importers import ( - "io/ioutil" + "io" "net/http" "net/url" @@ -38,7 +38,7 @@ type BaseRequestImporter struct { // HandleRequest handles the actual HTTP request. func (importer *BaseRequestImporter) HandleRequest(resp http.ResponseWriter, req *http.Request, conf *config.Configuration, log *zerolog.Logger) { - body, _ := ioutil.ReadAll(req.Body) + body, _ := io.ReadAll(req.Body) meshDataSet, status, respData, err := importer.handleQuery(body, req.URL.Query(), conf, log) if err == nil { if len(meshDataSet) > 0 { diff --git a/pkg/mentix/utils/network/network.go b/pkg/mentix/utils/network/network.go index 23b8ca02edb..4a01bd9e4e0 100644 --- a/pkg/mentix/utils/network/network.go +++ b/pkg/mentix/utils/network/network.go @@ -21,7 +21,7 @@ package network import ( "encoding/json" "fmt" - "io/ioutil" + "io" "net" "net/http" "net/url" @@ -87,7 +87,7 @@ func queryEndpoint(method string, endpointURL *url.URL, auth *BasicAuth, checkSt return nil, fmt.Errorf("invalid response received: %v", resp.Status) } - body, _ := ioutil.ReadAll(resp.Body) + body, _ := io.ReadAll(resp.Body) return body, nil } diff --git a/pkg/metrics/driver/json/json.go b/pkg/metrics/driver/json/json.go index 43ed354947f..ac4b28ce017 100644 --- a/pkg/metrics/driver/json/json.go +++ b/pkg/metrics/driver/json/json.go @@ -21,7 +21,6 @@ package json import ( "encoding/json" "errors" - "io/ioutil" "os" "github.com/cs3org/reva/pkg/metrics/driver/registry" @@ -47,7 +46,7 @@ func driverName() string { func readJSON(driver *MetricsJSONDriver) *data { data := &data{} - file, err := ioutil.ReadFile(driver.metricsDataLocation) + file, err := os.ReadFile(driver.metricsDataLocation) if err != nil { log.Error().Err(err).Str("location", driver.metricsDataLocation).Msg("Unable to read json file from location.") } diff --git a/pkg/metrics/driver/xcloud/xcloud.go b/pkg/metrics/driver/xcloud/xcloud.go index 84fbae56dc6..d469551650f 100644 --- a/pkg/metrics/driver/xcloud/xcloud.go +++ b/pkg/metrics/driver/xcloud/xcloud.go @@ -23,7 +23,7 @@ import ( "encoding/json" "errors" "fmt" - "io/ioutil" + "io" "net/http" "os" "sync" @@ -82,7 +82,7 @@ func (d *CloudDriver) refresh() error { defer resp.Body.Close() // read response body - data, err := ioutil.ReadAll(resp.Body) + data, err := io.ReadAll(resp.Body) if err != nil { log.Err(err).Msgf("xcloud: error reading resp body from internal metrics from %s", d.instance) return err diff --git a/pkg/ocm/invite/manager/json/json.go b/pkg/ocm/invite/manager/json/json.go index 076892232f2..039a0c4ddf1 100644 --- a/pkg/ocm/invite/manager/json/json.go +++ b/pkg/ocm/invite/manager/json/json.go @@ -22,7 +22,7 @@ import ( "context" "encoding/json" "fmt" - "io/ioutil" + "io" "net/http" "net/url" "os" @@ -125,7 +125,7 @@ func loadOrCreate(file string) (*inviteModel, error) { _, err := os.Stat(file) if os.IsNotExist(err) { - if err := ioutil.WriteFile(file, []byte("{}"), 0700); err != nil { + if err := os.WriteFile(file, []byte("{}"), 0700); err != nil { err = errors.Wrap(err, "error creating the invite storage file: "+file) return nil, err } @@ -138,7 +138,7 @@ func loadOrCreate(file string) (*inviteModel, error) { } defer fd.Close() - data, err := ioutil.ReadAll(fd) + data, err := io.ReadAll(fd) if err != nil { err = errors.Wrap(err, "error reading the data") return nil, err @@ -168,7 +168,7 @@ func (model *inviteModel) Save() error { return err } - if err := ioutil.WriteFile(model.File, data, 0644); err != nil { + if err := os.WriteFile(model.File, data, 0644); err != nil { err = errors.Wrap(err, "error writing invite data to file: "+model.File) return err } @@ -235,7 +235,7 @@ func (m *manager) ForwardInvite(ctx context.Context, invite *invitepb.InviteToke defer resp.Body.Close() if resp.StatusCode != http.StatusOK { - respBody, e := ioutil.ReadAll(resp.Body) + respBody, e := io.ReadAll(resp.Body) if e != nil { return errors.Wrap(e, "json: error reading request body") } diff --git a/pkg/ocm/provider/authorizer/json/json.go b/pkg/ocm/provider/authorizer/json/json.go index 575287c5866..95ef439d1fb 100644 --- a/pkg/ocm/provider/authorizer/json/json.go +++ b/pkg/ocm/provider/authorizer/json/json.go @@ -21,9 +21,9 @@ package json import ( "context" "encoding/json" - "io/ioutil" "net" "net/url" + "os" "strings" "sync" @@ -48,7 +48,7 @@ func New(m map[string]interface{}) (provider.Authorizer, error) { } c.init() - f, err := ioutil.ReadFile(c.Providers) + f, err := os.ReadFile(c.Providers) if err != nil { return nil, err } diff --git a/pkg/ocm/provider/authorizer/open/open.go b/pkg/ocm/provider/authorizer/open/open.go index e3b6e314946..cd4b028f8fd 100644 --- a/pkg/ocm/provider/authorizer/open/open.go +++ b/pkg/ocm/provider/authorizer/open/open.go @@ -21,8 +21,8 @@ package open import ( "context" "encoding/json" - "io/ioutil" "net/url" + "os" "strings" ocmprovider "github.com/cs3org/go-cs3apis/cs3/ocm/provider/v1beta1" @@ -46,7 +46,7 @@ func New(m map[string]interface{}) (provider.Authorizer, error) { } c.init() - f, err := ioutil.ReadFile(c.Providers) + f, err := os.ReadFile(c.Providers) if err != nil { return nil, err } diff --git a/pkg/ocm/share/manager/json/json.go b/pkg/ocm/share/manager/json/json.go index 25800b867e7..799b576804f 100644 --- a/pkg/ocm/share/manager/json/json.go +++ b/pkg/ocm/share/manager/json/json.go @@ -22,7 +22,7 @@ import ( "context" "encoding/json" "fmt" - "io/ioutil" + "io" "os" "sync" "time" @@ -76,7 +76,7 @@ func New(m map[string]interface{}) (share.Manager, error) { func loadOrCreate(file string) (*shareModel, error) { _, err := os.Stat(file) if os.IsNotExist(err) { - if err := ioutil.WriteFile(file, []byte("{}"), 0700); err != nil { + if err := os.WriteFile(file, []byte("{}"), 0700); err != nil { err = errors.Wrap(err, "error creating the file: "+file) return nil, err } @@ -89,7 +89,7 @@ func loadOrCreate(file string) (*shareModel, error) { } defer fd.Close() - data, err := ioutil.ReadAll(fd) + data, err := io.ReadAll(fd) if err != nil { err = errors.Wrap(err, "error reading the data") return nil, err @@ -142,7 +142,7 @@ func (m *shareModel) Save() error { return err } - if err := ioutil.WriteFile(m.file, data, 0644); err != nil { + if err := os.WriteFile(m.file, data, 0644); err != nil { err = errors.Wrap(err, "error writing to file: "+m.file) return err } @@ -151,7 +151,7 @@ func (m *shareModel) Save() error { } func (m *shareModel) ReadFile() error { - data, err := ioutil.ReadFile(m.file) + data, err := os.ReadFile(m.file) if err != nil { err = errors.Wrap(err, "error reading the data") return err diff --git a/pkg/ocm/share/sender/sender.go b/pkg/ocm/share/sender/sender.go index 3e2dd965ae9..32e414e93d9 100644 --- a/pkg/ocm/share/sender/sender.go +++ b/pkg/ocm/share/sender/sender.go @@ -21,7 +21,7 @@ package sender import ( "encoding/json" "fmt" - "io/ioutil" + "io" "net/http" "net/url" "path" @@ -81,7 +81,7 @@ func Send(requestBodyMap map[string]interface{}, pi *ocmprovider.ProviderInfo) e defer resp.Body.Close() if (resp.StatusCode != http.StatusCreated) && (resp.StatusCode != http.StatusOK) { - respBody, e := ioutil.ReadAll(resp.Body) + respBody, e := io.ReadAll(resp.Body) if e != nil { e = errors.Wrap(e, "sender: error reading request body") return e diff --git a/pkg/publicshare/manager/json/json.go b/pkg/publicshare/manager/json/json.go index e0c537eac6a..f0fbfb0db0d 100644 --- a/pkg/publicshare/manager/json/json.go +++ b/pkg/publicshare/manager/json/json.go @@ -22,7 +22,6 @@ import ( "context" "encoding/json" "fmt" - "io/ioutil" "os" "os/signal" "path/filepath" @@ -81,7 +80,7 @@ func New(c map[string]interface{}) (publicshare.Manager, error) { } if fi == nil || fi.Size() == 0 { - err := ioutil.WriteFile(m.file, []byte("{}"), 0644) + err := os.WriteFile(m.file, []byte("{}"), 0644) if err != nil { return nil, err } @@ -543,7 +542,7 @@ func (m *manager) GetPublicShareByToken(ctx context.Context, token string, auth func (m *manager) readDb() (map[string]interface{}, error) { db := map[string]interface{}{} - readBytes, err := ioutil.ReadFile(m.file) + readBytes, err := os.ReadFile(m.file) if err != nil { return nil, err } @@ -559,11 +558,7 @@ func (m *manager) writeDb(db map[string]interface{}) error { return err } - if err := ioutil.WriteFile(m.file, dbAsJSON, 0644); err != nil { - return err - } - - return nil + return os.WriteFile(m.file, dbAsJSON, 0644) } func authenticate(share *link.PublicShare, pw string, auth *link.PublicShareAuthentication) bool { diff --git a/pkg/sdk/common/net/httpreq.go b/pkg/sdk/common/net/httpreq.go index d6167abdbca..17b9fbf823b 100644 --- a/pkg/sdk/common/net/httpreq.go +++ b/pkg/sdk/common/net/httpreq.go @@ -22,7 +22,6 @@ import ( "context" "fmt" "io" - "io/ioutil" "net/http" "time" ) @@ -93,7 +92,7 @@ func (request *HTTPRequest) Do(checkStatus bool) ([]byte, error) { return nil, fmt.Errorf("received invalid response from '%v': %s", request.endpoint, httpRes.Status) } - data, err := ioutil.ReadAll(httpRes.Body) + data, err := io.ReadAll(httpRes.Body) if err != nil { return nil, fmt.Errorf("reading response data from '%v' failed: %v", request.endpoint, err) } diff --git a/pkg/sdk/common/net/webdav.go b/pkg/sdk/common/net/webdav.go index 16d810e200d..2bf9e5e829f 100644 --- a/pkg/sdk/common/net/webdav.go +++ b/pkg/sdk/common/net/webdav.go @@ -21,7 +21,6 @@ package net import ( "fmt" "io" - "io/ioutil" "strconv" types "github.com/cs3org/go-cs3apis/cs3/types/v1beta1" @@ -61,7 +60,7 @@ func (webdav *WebDAVClient) Read(file string) ([]byte, error) { } defer reader.Close() - data, err := ioutil.ReadAll(reader) + data, err := io.ReadAll(reader) if err != nil { return nil, fmt.Errorf("unable to read the data: %v", err) } diff --git a/pkg/share/manager/json/json.go b/pkg/share/manager/json/json.go index 55fcf2c691b..18b88939846 100644 --- a/pkg/share/manager/json/json.go +++ b/pkg/share/manager/json/json.go @@ -21,7 +21,7 @@ package json import ( "context" "encoding/json" - "io/ioutil" + "io" "os" "sync" "time" @@ -71,7 +71,7 @@ func New(m map[string]interface{}) (share.Manager, error) { func loadOrCreate(file string) (*shareModel, error) { info, err := os.Stat(file) if os.IsNotExist(err) || info.Size() == 0 { - if err := ioutil.WriteFile(file, []byte("{}"), 0700); err != nil { + if err := os.WriteFile(file, []byte("{}"), 0700); err != nil { err = errors.Wrap(err, "error opening/creating the file: "+file) return nil, err } @@ -84,7 +84,7 @@ func loadOrCreate(file string) (*shareModel, error) { } defer fd.Close() - data, err := ioutil.ReadAll(fd) + data, err := io.ReadAll(fd) if err != nil { err = errors.Wrap(err, "error reading the data") return nil, err @@ -140,7 +140,7 @@ func (m *shareModel) Save() error { return err } - if err := ioutil.WriteFile(m.file, data, 0644); err != nil { + if err := os.WriteFile(m.file, data, 0644); err != nil { err = errors.Wrap(err, "error writing to file: "+m.file) return err } diff --git a/pkg/share/manager/sql/sql_test.go b/pkg/share/manager/sql/sql_test.go index 016ced3044e..35d4a92ff5a 100644 --- a/pkg/share/manager/sql/sql_test.go +++ b/pkg/share/manager/sql/sql_test.go @@ -21,7 +21,6 @@ package sql_test import ( "context" "database/sql" - "io/ioutil" "os" user "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1" @@ -80,10 +79,10 @@ var _ = Describe("SQL manager", func() { BeforeEach(func() { var err error - testDbFile, err = ioutil.TempFile("", "example") + testDbFile, err = os.CreateTemp("", "example") Expect(err).ToNot(HaveOccurred()) - dbData, err := ioutil.ReadFile("test.db") + dbData, err := os.ReadFile("test.db") Expect(err).ToNot(HaveOccurred()) _, err = testDbFile.Write(dbData) diff --git a/pkg/siteacc/data/filestorage.go b/pkg/siteacc/data/filestorage.go index 6c72796a78b..5a75783112c 100644 --- a/pkg/siteacc/data/filestorage.go +++ b/pkg/siteacc/data/filestorage.go @@ -20,7 +20,6 @@ package data import ( "encoding/json" - "io/ioutil" "os" "path/filepath" @@ -70,7 +69,7 @@ func (storage *FileStorage) initialize(conf *config.Configuration, log *zerolog. func (storage *FileStorage) readData(file string, obj interface{}) error { // Read the data from the specified file - jsonData, err := ioutil.ReadFile(file) + jsonData, err := os.ReadFile(file) if err != nil { return errors.Wrapf(err, "unable to read file %v", file) } @@ -103,7 +102,7 @@ func (storage *FileStorage) ReadAccounts() (*Accounts, error) { func (storage *FileStorage) writeData(file string, obj interface{}) error { // Write the data to the specified file jsonData, _ := json.MarshalIndent(obj, "", "\t") - if err := ioutil.WriteFile(file, jsonData, 0755); err != nil { + if err := os.WriteFile(file, jsonData, 0755); err != nil { return errors.Wrapf(err, "unable to write file %v", file) } return nil diff --git a/pkg/siteacc/endpoints.go b/pkg/siteacc/endpoints.go index ac2dfe0f6d6..68c74560c0f 100644 --- a/pkg/siteacc/endpoints.go +++ b/pkg/siteacc/endpoints.go @@ -21,7 +21,7 @@ package siteacc import ( "encoding/json" "fmt" - "io/ioutil" + "io" "net/http" "net/url" "strings" @@ -128,7 +128,7 @@ func callMethodEndpoint(siteacc *SiteAccounts, ep endpoint, w http.ResponseWrite // Search for a matching method in the list of callbacks for method, cb := range ep.MethodCallbacks { if method == r.Method { - body, _ := ioutil.ReadAll(r.Body) + body, _ := io.ReadAll(r.Body) if respData, err := cb(siteacc, r.URL.Query(), body, session); err == nil { resp.Success = true diff --git a/pkg/siteacc/manager/gocdb/account.go b/pkg/siteacc/manager/gocdb/account.go index 8b164a4876d..a90d606a76f 100644 --- a/pkg/siteacc/manager/gocdb/account.go +++ b/pkg/siteacc/manager/gocdb/account.go @@ -21,7 +21,7 @@ package gocdb import ( "bytes" "encoding/json" - "io/ioutil" + "io" "net/http" "github.com/cs3org/reva/pkg/mentix/utils/network" @@ -78,7 +78,7 @@ func writeAccount(account *data.Account, operation string, address string, apiKe defer resp.Body.Close() if resp.StatusCode >= 400 { - msg, _ := ioutil.ReadAll(resp.Body) + msg, _ := io.ReadAll(resp.Body) return errors.Errorf("unable to perform request: %v", string(msg)) } diff --git a/pkg/siteacc/panels/account/panel.go b/pkg/siteacc/panels/account/panel.go index 634b2e0b4a4..6be642ad620 100644 --- a/pkg/siteacc/panels/account/panel.go +++ b/pkg/siteacc/panels/account/panel.go @@ -20,7 +20,6 @@ package account import ( "net/http" - "strings" "github.com/cs3org/reva/pkg/siteacc/config" "github.com/cs3org/reva/pkg/siteacc/data" @@ -35,6 +34,8 @@ import ( "github.com/cs3org/reva/pkg/siteacc/panels/account/sites" "github.com/pkg/errors" "github.com/rs/zerolog" + "golang.org/x/text/cases" + "golang.org/x/text/language" ) // Panel represents the account panel. @@ -141,7 +142,8 @@ func (panel *Panel) Execute(w http.ResponseWriter, r *http.Request, session *htm dataProvider := func(*html.Session) interface{} { flatValues := make(map[string]string, len(r.URL.Query())) for k, v := range r.URL.Query() { - flatValues[strings.Title(k)] = v[0] + caser := cases.Title(language.Und) + flatValues[caser.String(k)] = v[0] } availOps, err := data.QueryAvailableOperators(panel.Config().Mentix.URL, panel.Config().Mentix.DataEndpoint) diff --git a/pkg/storage/fs/ocis/blobstore/blobstore_test.go b/pkg/storage/fs/ocis/blobstore/blobstore_test.go index 450226a7fa5..4d875575c55 100644 --- a/pkg/storage/fs/ocis/blobstore/blobstore_test.go +++ b/pkg/storage/fs/ocis/blobstore/blobstore_test.go @@ -20,7 +20,7 @@ package blobstore_test import ( "bytes" - "io/ioutil" + "io" "os" "path" @@ -70,7 +70,7 @@ var _ = Describe("Blobstore", func() { err := bs.Upload(key, bytes.NewReader(data)) Expect(err).ToNot(HaveOccurred()) - writtenBytes, err := ioutil.ReadFile(blobPath) + writtenBytes, err := os.ReadFile(blobPath) Expect(err).ToNot(HaveOccurred()) Expect(writtenBytes).To(Equal(data)) }) @@ -78,7 +78,7 @@ var _ = Describe("Blobstore", func() { Context("with an existing blob", func() { BeforeEach(func() { - Expect(ioutil.WriteFile(blobPath, data, 0700)).To(Succeed()) + Expect(os.WriteFile(blobPath, data, 0700)).To(Succeed()) }) Describe("Download", func() { @@ -86,7 +86,7 @@ var _ = Describe("Blobstore", func() { reader, err := bs.Download("../" + key) Expect(err).ToNot(HaveOccurred()) - readData, err := ioutil.ReadAll(reader) + readData, err := io.ReadAll(reader) Expect(err).ToNot(HaveOccurred()) Expect(readData).To(Equal(data)) }) @@ -95,7 +95,7 @@ var _ = Describe("Blobstore", func() { reader, err := bs.Download(key) Expect(err).ToNot(HaveOccurred()) - readData, err := ioutil.ReadAll(reader) + readData, err := io.ReadAll(reader) Expect(err).ToNot(HaveOccurred()) Expect(readData).To(Equal(data)) }) diff --git a/pkg/storage/fs/owncloud/owncloud.go b/pkg/storage/fs/owncloud/owncloud.go index 1b74b7ab43f..52201581649 100644 --- a/pkg/storage/fs/owncloud/owncloud.go +++ b/pkg/storage/fs/owncloud/owncloud.go @@ -23,7 +23,7 @@ import ( "encoding/hex" "fmt" "io" - "io/ioutil" + iofs "io/fs" "net/url" "os" "path/filepath" @@ -1789,10 +1789,18 @@ func (fs *ocfs) listWithNominalHome(ctx context.Context, ip string, mdKeys []str return nil, errors.Wrap(err, "ocfs: error reading permissions") } - mds, err := ioutil.ReadDir(ip) + entries, err := os.ReadDir(ip) if err != nil { return nil, errors.Wrapf(err, "ocfs: error listing %s", ip) } + mds := make([]iofs.FileInfo, 0, len(entries)) + for _, entry := range entries { + info, err := entry.Info() + if err != nil { + return nil, err + } + mds = append(mds, info) + } c := fs.pool.Get() defer c.Close() finfos := []*provider.ResourceInfo{} @@ -1840,11 +1848,18 @@ func (fs *ocfs) listHome(ctx context.Context, home string, mdKeys []string) ([]* return nil, errors.Wrap(err, "ocfs: error reading permissions") } - mds, err := ioutil.ReadDir(ip) + entries, err := os.ReadDir(ip) if err != nil { return nil, errors.Wrap(err, "ocfs: error listing files") } - + mds := make([]iofs.FileInfo, 0, len(entries)) + for _, entry := range entries { + info, err := entry.Info() + if err != nil { + return nil, err + } + mds = append(mds, info) + } c := fs.pool.Get() defer c.Close() @@ -1857,10 +1872,18 @@ func (fs *ocfs) listHome(ctx context.Context, home string, mdKeys []string) ([]* // list shadow_files ip = fs.toInternalShadowPath(ctx, home) - mds, err = ioutil.ReadDir(ip) + entries, err = os.ReadDir(ip) if err != nil { return nil, errors.Wrap(err, "ocfs: error listing shadow_files") } + mds = make([]iofs.FileInfo, 0, len(entries)) + for _, entry := range entries { + info, err := entry.Info() + if err != nil { + return nil, err + } + mds = append(mds, info) + } for _, md := range mds { cp := filepath.Join(ip, md.Name()) m := fs.convertToResourceInfo(ctx, md, cp, fs.toStorageShadowPath(ctx, cp), c, mdKeys) @@ -1884,14 +1907,21 @@ func (fs *ocfs) listShareFolderRoot(ctx context.Context, sp string, mdKeys []str return nil, errors.Wrap(err, "ocfs: error reading permissions") } - mds, err := ioutil.ReadDir(ip) + entries, err := os.ReadDir(ip) if err != nil { if os.IsNotExist(err) { return nil, errtypes.NotFound(fs.toStoragePath(ctx, filepath.Dir(ip))) } return nil, errors.Wrap(err, "ocfs: error listing shadow_files") } - + mds := make([]iofs.FileInfo, 0, len(entries)) + for _, entry := range entries { + info, err := entry.Info() + if err != nil { + return nil, err + } + mds = append(mds, info) + } c := fs.pool.Get() defer c.Close() @@ -1996,10 +2026,18 @@ func (fs *ocfs) ListRevisions(ctx context.Context, ref *provider.Reference) ([]* bn := filepath.Base(ip) revisions := []*provider.FileVersion{} - mds, err := ioutil.ReadDir(filepath.Dir(vp)) + entries, err := os.ReadDir(filepath.Dir(vp)) if err != nil { return nil, errors.Wrap(err, "ocfs: error reading"+filepath.Dir(vp)) } + mds := make([]iofs.FileInfo, 0, len(entries)) + for _, entry := range entries { + info, err := entry.Info() + if err != nil { + return nil, err + } + mds = append(mds, info) + } for i := range mds { rev := fs.filterAsRevision(ctx, bn, mds[i]) if rev != nil { @@ -2195,13 +2233,22 @@ func (fs *ocfs) ListRecycle(ctx context.Context, basePath, key, relativePath str } // list files folder - mds, err := ioutil.ReadDir(filepath.Join(rp, key)) + entries, err := os.ReadDir(filepath.Join(rp, key)) if err != nil { log := appctx.GetLogger(ctx) log.Debug().Err(err).Str("path", rp).Msg("trash not readable") // TODO jfd only ignore not found errors return []*provider.RecycleItem{}, nil } + mds := make([]iofs.FileInfo, 0, len(entries)) + for _, entry := range entries { + info, err := entry.Info() + if err != nil { + // TODO jfd only ignore not found errors + return []*provider.RecycleItem{}, nil + } + mds = append(mds, info) + } // TODO (jfd) limit and offset items := []*provider.RecycleItem{} for i := range mds { diff --git a/pkg/storage/fs/owncloud/upload.go b/pkg/storage/fs/owncloud/upload.go index 69a48d25d86..dccc170aa78 100644 --- a/pkg/storage/fs/owncloud/upload.go +++ b/pkg/storage/fs/owncloud/upload.go @@ -27,7 +27,6 @@ import ( "fmt" "hash/adler32" "io" - "io/ioutil" "os" "path/filepath" "strings" @@ -247,7 +246,7 @@ func (fs *ocfs) GetUpload(ctx context.Context, id string) (tusd.Upload, error) { infoPath := filepath.Join(fs.c.UploadInfoDir, filepath.Join("/", id+".info")) info := tusd.FileInfo{} - data, err := ioutil.ReadFile(infoPath) + data, err := os.ReadFile(infoPath) if err != nil { return nil, err } @@ -348,7 +347,7 @@ func (upload *fileUpload) writeInfo() error { if err != nil { return err } - return ioutil.WriteFile(upload.infoPath, data, defaultFilePerm) + return os.WriteFile(upload.infoPath, data, defaultFilePerm) } // FinishUpload finishes an upload and moves the file to the internal destination diff --git a/pkg/storage/fs/owncloudsql/filecache/filecache_test.go b/pkg/storage/fs/owncloudsql/filecache/filecache_test.go index c1c383aa58e..4323fe10748 100644 --- a/pkg/storage/fs/owncloudsql/filecache/filecache_test.go +++ b/pkg/storage/fs/owncloudsql/filecache/filecache_test.go @@ -20,7 +20,6 @@ package filecache_test import ( "database/sql" - "io/ioutil" "os" "strconv" @@ -41,10 +40,10 @@ var _ = Describe("Filecache", func() { BeforeEach(func() { var err error - testDbFile, err = ioutil.TempFile("", "example") + testDbFile, err = os.CreateTemp("", "example") Expect(err).ToNot(HaveOccurred()) - dbData, err := ioutil.ReadFile("test.db") + dbData, err := os.ReadFile("test.db") Expect(err).ToNot(HaveOccurred()) _, err = testDbFile.Write(dbData) diff --git a/pkg/storage/fs/owncloudsql/owncloudsql.go b/pkg/storage/fs/owncloudsql/owncloudsql.go index ebf2796c496..a445e3b83f1 100644 --- a/pkg/storage/fs/owncloudsql/owncloudsql.go +++ b/pkg/storage/fs/owncloudsql/owncloudsql.go @@ -26,7 +26,7 @@ import ( "fmt" "hash/adler32" "io" - "io/ioutil" + iofs "io/fs" "net/url" "os" "path/filepath" @@ -1744,13 +1744,24 @@ func (fs *owncloudsqlfs) ListRecycle(ctx context.Context, basePath, key, relativ } // list files folder - mds, err := ioutil.ReadDir(rp) + entries, err := os.ReadDir(rp) if err != nil { log := appctx.GetLogger(ctx) log.Debug().Err(err).Str("path", rp).Msg("trash not readable") // TODO jfd only ignore not found errors return []*provider.RecycleItem{}, nil } + mds := make([]iofs.FileInfo, 0, len(entries)) + for _, entry := range entries { + info, err := entry.Info() + if err != nil { + log := appctx.GetLogger(ctx) + log.Debug().Err(err).Str("path", rp).Msg("trash not readable") + // TODO jfd only ignore not found errors + return []*provider.RecycleItem{}, nil + } + mds = append(mds, info) + } // TODO (jfd) limit and offset items := []*provider.RecycleItem{} for i := range mds { diff --git a/pkg/storage/fs/owncloudsql/upload.go b/pkg/storage/fs/owncloudsql/upload.go index da167efe91a..3ed523afc2a 100644 --- a/pkg/storage/fs/owncloudsql/upload.go +++ b/pkg/storage/fs/owncloudsql/upload.go @@ -23,7 +23,6 @@ import ( "encoding/json" "fmt" "io" - "io/ioutil" "os" "path/filepath" "strconv" @@ -249,7 +248,7 @@ func (fs *owncloudsqlfs) GetUpload(ctx context.Context, id string) (tusd.Upload, infoPath := filepath.Join(fs.c.UploadInfoDir, id+".info") info := tusd.FileInfo{} - data, err := ioutil.ReadFile(infoPath) + data, err := os.ReadFile(infoPath) if err != nil { if os.IsNotExist(err) { // Interpret os.ErrNotExist as 404 Not Found @@ -354,7 +353,7 @@ func (upload *fileUpload) writeInfo() error { if err != nil { return err } - return ioutil.WriteFile(upload.infoPath, data, defaultFilePerm) + return os.WriteFile(upload.infoPath, data, defaultFilePerm) } // FinishUpload finishes an upload and moves the file to the internal destination diff --git a/pkg/storage/utils/chunking/chunking.go b/pkg/storage/utils/chunking/chunking.go index 656ec14fe91..7c3afc217a2 100644 --- a/pkg/storage/utils/chunking/chunking.go +++ b/pkg/storage/utils/chunking/chunking.go @@ -21,7 +21,6 @@ package chunking import ( "fmt" "io" - "io/ioutil" "os" "path/filepath" "regexp" @@ -87,7 +86,7 @@ func NewChunkHandler(chunkFolder string) *ChunkHandler { } func (c *ChunkHandler) createChunkTempFile() (string, *os.File, error) { - file, err := ioutil.TempFile(fmt.Sprintf("/%s", c.ChunkFolder), "") + file, err := os.CreateTemp(fmt.Sprintf("/%s", c.ChunkFolder), "") if err != nil { return "", nil, err } diff --git a/pkg/storage/utils/decomposedfs/decomposedfs_concurrency_test.go b/pkg/storage/utils/decomposedfs/decomposedfs_concurrency_test.go index 867d9ebaa42..0fcc0e417c0 100644 --- a/pkg/storage/utils/decomposedfs/decomposedfs_concurrency_test.go +++ b/pkg/storage/utils/decomposedfs/decomposedfs_concurrency_test.go @@ -20,7 +20,6 @@ package decomposedfs_test import ( "context" - "io/ioutil" "os" "path" "sync" @@ -116,7 +115,7 @@ var _ = Describe("Decomposed", func() { Expect(err).ToNot(HaveOccurred()) Expect(len(revisions)).To(Equal(1)) - _, err = ioutil.ReadFile(path.Join(tmpRoot, "nodes", "root", "uploaded.txt")) + _, err = os.ReadFile(path.Join(tmpRoot, "nodes", "root", "uploaded.txt")) Expect(err).ToNot(HaveOccurred()) }) }) diff --git a/pkg/storage/utils/decomposedfs/upload.go b/pkg/storage/utils/decomposedfs/upload.go index 4d1f2b9c0f4..3fec88244d8 100644 --- a/pkg/storage/utils/decomposedfs/upload.go +++ b/pkg/storage/utils/decomposedfs/upload.go @@ -28,7 +28,6 @@ import ( "hash" "hash/adler32" "io" - "io/ioutil" "os" "path/filepath" "strings" @@ -304,7 +303,7 @@ func (fs *Decomposedfs) GetUpload(ctx context.Context, id string) (tusd.Upload, infoPath := filepath.Join(fs.o.Root, "uploads", id+".info") info := tusd.FileInfo{} - data, err := ioutil.ReadFile(infoPath) + data, err := os.ReadFile(infoPath) if err != nil { if os.IsNotExist(err) { // Interpret os.ErrNotExist as 404 Not Found @@ -440,7 +439,7 @@ func (upload *fileUpload) writeInfo() error { if err != nil { return err } - return ioutil.WriteFile(upload.infoPath, data, defaultFilePerm) + return os.WriteFile(upload.infoPath, data, defaultFilePerm) } // FinishUpload finishes an upload and moves the file to the internal destination diff --git a/pkg/storage/utils/decomposedfs/upload_test.go b/pkg/storage/utils/decomposedfs/upload_test.go index 2b0c2eb681f..1ae39d20cde 100644 --- a/pkg/storage/utils/decomposedfs/upload_test.go +++ b/pkg/storage/utils/decomposedfs/upload_test.go @@ -23,7 +23,6 @@ import ( "context" "fmt" "io" - "io/ioutil" "os" userpb "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1" @@ -215,13 +214,13 @@ var _ = Describe("File uploads", func() { Return(nil). Run(func(args mock.Arguments) { reader := args.Get(1).(io.Reader) - data, err := ioutil.ReadAll(reader) + data, err := io.ReadAll(reader) Expect(err).ToNot(HaveOccurred()) Expect(data).To(Equal([]byte("0123456789"))) }) - err = fs.Upload(ctx, uploadRef, ioutil.NopCloser(bytes.NewReader(fileContent))) + err = fs.Upload(ctx, uploadRef, io.NopCloser(bytes.NewReader(fileContent))) Expect(err).ToNot(HaveOccurred()) bs.AssertCalled(GinkgoT(), "Upload", mock.Anything, mock.Anything) @@ -254,13 +253,13 @@ var _ = Describe("File uploads", func() { Return(nil). Run(func(args mock.Arguments) { reader := args.Get(1).(io.Reader) - data, err := ioutil.ReadAll(reader) + data, err := io.ReadAll(reader) Expect(err).ToNot(HaveOccurred()) Expect(data).To(Equal([]byte(""))) }) - err = fs.Upload(ctx, uploadRef, ioutil.NopCloser(bytes.NewReader(fileContent))) + err = fs.Upload(ctx, uploadRef, io.NopCloser(bytes.NewReader(fileContent))) Expect(err).ToNot(HaveOccurred()) bs.AssertCalled(GinkgoT(), "Upload", mock.Anything, mock.Anything) @@ -281,7 +280,7 @@ var _ = Describe("File uploads", func() { ) uploadRef := &provider.Reference{Path: "/some-non-existent-upload-reference"} - err := fs.Upload(ctx, uploadRef, ioutil.NopCloser(bytes.NewReader(fileContent))) + err := fs.Upload(ctx, uploadRef, io.NopCloser(bytes.NewReader(fileContent))) Expect(err).To(HaveOccurred()) diff --git a/pkg/storage/utils/localfs/localfs.go b/pkg/storage/utils/localfs/localfs.go index f7e6abdc59c..a0b9162058e 100644 --- a/pkg/storage/utils/localfs/localfs.go +++ b/pkg/storage/utils/localfs/localfs.go @@ -23,7 +23,7 @@ import ( "database/sql" "fmt" "io" - "io/ioutil" + iofs "io/fs" "net/url" "os" "path" @@ -993,7 +993,7 @@ func (fs *localfs) listFolder(ctx context.Context, fn string, mdKeys []string) ( fn = fs.wrap(ctx, fn) - mds, err := ioutil.ReadDir(fn) + entries, err := os.ReadDir(fn) if err != nil { if os.IsNotExist(err) { return nil, errtypes.NotFound(fn) @@ -1001,6 +1001,15 @@ func (fs *localfs) listFolder(ctx context.Context, fn string, mdKeys []string) ( return nil, errors.Wrap(err, "localfs: error listing "+fn) } + mds := make([]iofs.FileInfo, 0, len(entries)) + for _, entry := range entries { + info, err := entry.Info() + if err != nil { + return nil, err + } + mds = append(mds, info) + } + finfos := []*provider.ResourceInfo{} for _, md := range mds { info, err := fs.normalize(ctx, md, path.Join(fn, md.Name()), mdKeys) @@ -1015,13 +1024,21 @@ func (fs *localfs) listShareFolderRoot(ctx context.Context, home string, mdKeys fn := fs.wrapReferences(ctx, home) - mds, err := ioutil.ReadDir(fn) + entries, err := os.ReadDir(fn) if err != nil { if os.IsNotExist(err) { return nil, errtypes.NotFound(fn) } return nil, errors.Wrap(err, "localfs: error listing "+fn) } + mds := make([]iofs.FileInfo, 0, len(entries)) + for _, entry := range entries { + info, err := entry.Info() + if err != nil { + return nil, err + } + mds = append(mds, info) + } finfos := []*provider.ResourceInfo{} for _, md := range mds { @@ -1087,10 +1104,18 @@ func (fs *localfs) ListRevisions(ctx context.Context, ref *provider.Reference) ( versionsDir := fs.wrapVersions(ctx, np) revisions := []*provider.FileVersion{} - mds, err := ioutil.ReadDir(versionsDir) + entries, err := os.ReadDir(versionsDir) if err != nil { return nil, errors.Wrap(err, "localfs: error reading"+versionsDir) } + mds := make([]iofs.FileInfo, 0, len(entries)) + for _, entry := range entries { + info, err := entry.Info() + if err != nil { + return nil, err + } + mds = append(mds, info) + } for i := range mds { // versions resemble v12345678 @@ -1226,10 +1251,18 @@ func (fs *localfs) ListRecycle(ctx context.Context, basePath, key, relativePath rp := fs.wrapRecycleBin(ctx, "/") - mds, err := ioutil.ReadDir(rp) + entries, err := os.ReadDir(rp) if err != nil { return nil, errors.Wrap(err, "localfs: error listing deleted files") } + mds := make([]iofs.FileInfo, 0, len(entries)) + for _, entry := range entries { + info, err := entry.Info() + if err != nil { + return nil, err + } + mds = append(mds, info) + } items := []*provider.RecycleItem{} for i := range mds { ri := fs.convertToRecycleItem(ctx, rp, mds[i]) diff --git a/pkg/storage/utils/localfs/upload.go b/pkg/storage/utils/localfs/upload.go index 36963e7bfb4..8bc43c46402 100644 --- a/pkg/storage/utils/localfs/upload.go +++ b/pkg/storage/utils/localfs/upload.go @@ -22,7 +22,6 @@ import ( "context" "encoding/json" "io" - "io/ioutil" "os" "path/filepath" @@ -211,7 +210,7 @@ func (fs *localfs) GetUpload(ctx context.Context, id string) (tusd.Upload, error } infoPath := binPath + ".info" info := tusd.FileInfo{} - data, err := ioutil.ReadFile(infoPath) + data, err := os.ReadFile(infoPath) if err != nil { if os.IsNotExist(err) { // Interpret os.ErrNotExist as 404 Not Found @@ -305,7 +304,7 @@ func (upload *fileUpload) writeInfo() error { if err != nil { return err } - return ioutil.WriteFile(upload.infoPath, data, defaultFilePerm) + return os.WriteFile(upload.infoPath, data, defaultFilePerm) } // FinishUpload finishes an upload and moves the file to the internal destination diff --git a/pkg/test/vars.go b/pkg/test/vars.go index ec56b7948bf..ba3799d0acb 100644 --- a/pkg/test/vars.go +++ b/pkg/test/vars.go @@ -21,7 +21,6 @@ package test import ( "bytes" "errors" - "io/ioutil" "os" "path" ) @@ -47,7 +46,7 @@ type CleanerFunc func() // TmpDir creates a dir in the system temp folder that has // TmpDirPattern as prefix func TmpDir() (string, CleanerFunc, error) { - name, err := ioutil.TempDir("", TmpDirPattern) + name, err := os.MkdirTemp("", TmpDirPattern) if err != nil { return "", nil, err } diff --git a/pkg/user/manager/json/json.go b/pkg/user/manager/json/json.go index 5a47d16c647..f03d0f12721 100644 --- a/pkg/user/manager/json/json.go +++ b/pkg/user/manager/json/json.go @@ -21,7 +21,7 @@ package json import ( "context" "encoding/json" - "io/ioutil" + "os" "strconv" "strings" @@ -79,7 +79,7 @@ func (m *manager) Configure(ml map[string]interface{}) error { return err } - f, err := ioutil.ReadFile(c.Users) + f, err := os.ReadFile(c.Users) if err != nil { return err } diff --git a/pkg/user/manager/json/json_test.go b/pkg/user/manager/json/json_test.go index f591d94a69d..a7d56cae8e6 100644 --- a/pkg/user/manager/json/json_test.go +++ b/pkg/user/manager/json/json_test.go @@ -20,7 +20,6 @@ package json import ( "context" - "io/ioutil" "os" "reflect" "testing" @@ -33,7 +32,7 @@ var ctx = context.Background() func TestUserManager(t *testing.T) { // add tempdir - tempdir, err := ioutil.TempDir("", "json_test") + tempdir, err := os.MkdirTemp("", "json_test") if err != nil { t.Fatalf("error while create temp dir: %v", err) } @@ -43,7 +42,7 @@ func TestUserManager(t *testing.T) { userJSON := `[{` // get file handler for temporary file - file, err := ioutil.TempFile(tempdir, "json_test") + file, err := os.CreateTemp(tempdir, "json_test") if err != nil { t.Fatalf("error while open temp file: %v", err) } @@ -70,7 +69,7 @@ func TestUserManager(t *testing.T) { userJSON = `[{"id":{"idp":"localhost","opaque_id":"einstein","type":1},"username":"einstein","mail":"einstein@example.org","display_name":"Albert Einstein","groups":["sailing-lovers","violin-haters","physics-lovers"]}]` // get file handler for temporary file - file, err = ioutil.TempFile(tempdir, "json_test") + file, err = os.CreateTemp(tempdir, "json_test") if err != nil { t.Fatalf("error while open temp file: %v", err) } diff --git a/pkg/user/manager/owncloudsql/accounts/accounts_test.go b/pkg/user/manager/owncloudsql/accounts/accounts_test.go index 61819b966fa..1fd9f8cd4ea 100644 --- a/pkg/user/manager/owncloudsql/accounts/accounts_test.go +++ b/pkg/user/manager/owncloudsql/accounts/accounts_test.go @@ -21,7 +21,6 @@ package accounts_test import ( "context" "database/sql" - "io/ioutil" "os" _ "github.com/mattn/go-sqlite3" @@ -41,10 +40,10 @@ var _ = Describe("Accounts", func() { BeforeEach(func() { var err error - testDbFile, err = ioutil.TempFile("", "example") + testDbFile, err = os.CreateTemp("", "example") Expect(err).ToNot(HaveOccurred()) - dbData, err := ioutil.ReadFile("test.sqlite") + dbData, err := os.ReadFile("test.sqlite") Expect(err).ToNot(HaveOccurred()) _, err = testDbFile.Write(dbData) diff --git a/pkg/utils/ldap.go b/pkg/utils/ldap.go index 0a97e0eb172..0d3aa9da069 100644 --- a/pkg/utils/ldap.go +++ b/pkg/utils/ldap.go @@ -22,7 +22,7 @@ import ( "crypto/tls" "crypto/x509" "fmt" - "io/ioutil" + "os" "github.com/go-ldap/ldap/v3" "github.com/pkg/errors" @@ -46,7 +46,7 @@ func GetLDAPConnection(c *LDAPConn) (*ldap.Conn, error) { tlsconfig := &tls.Config{InsecureSkipVerify: c.Insecure} if !c.Insecure && c.CACert != "" { - if pemBytes, err := ioutil.ReadFile(c.CACert); err == nil { + if pemBytes, err := os.ReadFile(c.CACert); err == nil { rpool, _ := x509.SystemCertPool() rpool.AppendCertsFromPEM(pemBytes) tlsconfig.RootCAs = rpool diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go index be4fedf7dbf..1c0f43d2cbe 100644 --- a/pkg/utils/utils.go +++ b/pkg/utils/utils.go @@ -39,7 +39,7 @@ import ( types "github.com/cs3org/go-cs3apis/cs3/types/v1beta1" "github.com/cs3org/reva/pkg/registry" "github.com/cs3org/reva/pkg/registry/memory" - "github.com/golang/protobuf/proto" + "github.com/golang/protobuf/proto" //nolint:staticcheck "google.golang.org/protobuf/encoding/protojson" ) diff --git a/tests/helpers/helpers.go b/tests/helpers/helpers.go index bff07340b28..b8ff8077d13 100644 --- a/tests/helpers/helpers.go +++ b/tests/helpers/helpers.go @@ -22,7 +22,7 @@ import ( "bytes" "context" "errors" - "io/ioutil" + "io" "os" "path/filepath" "runtime" @@ -43,7 +43,7 @@ func TempDir(name string) (string, error) { if err != nil { return "nil", err } - tmpRoot, err := ioutil.TempDir(tmpDir, "reva-unit-tests-*-root") + tmpRoot, err := os.MkdirTemp(tmpDir, "reva-unit-tests-*-root") if err != nil { return "nil", err } @@ -62,6 +62,6 @@ func Upload(ctx context.Context, fs storage.FS, ref *provider.Reference, content return errors.New("simple upload method not available") } uploadRef := &provider.Reference{Path: "/" + uploadID} - err = fs.Upload(ctx, uploadRef, ioutil.NopCloser(bytes.NewReader(content))) + err = fs.Upload(ctx, uploadRef, io.NopCloser(bytes.NewReader(content))) return err } diff --git a/tests/integration/grpc/grpc_suite_test.go b/tests/integration/grpc/grpc_suite_test.go index 82cbdc2e932..60302a36fbd 100644 --- a/tests/integration/grpc/grpc_suite_test.go +++ b/tests/integration/grpc/grpc_suite_test.go @@ -20,7 +20,6 @@ package grpc_test import ( "fmt" - "io/ioutil" "net" "os" "os/exec" @@ -91,12 +90,12 @@ func startRevads(configs map[string]string, variables map[string]string) (map[st ownAddress := addresses[name] // Create a temporary root for this revad - tmpRoot, err := ioutil.TempDir("", "reva-grpc-integration-tests-*-root") + tmpRoot, err := os.MkdirTemp("", "reva-grpc-integration-tests-*-root") if err != nil { return nil, errors.Wrapf(err, "Could not create tmpdir") } newCfgPath := path.Join(tmpRoot, "config.toml") - rawCfg, err := ioutil.ReadFile(path.Join("fixtures", config)) + rawCfg, err := os.ReadFile(path.Join("fixtures", config)) if err != nil { return nil, errors.Wrapf(err, "Could not read config file") } @@ -109,7 +108,7 @@ func startRevads(configs map[string]string, variables map[string]string) (map[st for name, address := range addresses { cfg = strings.ReplaceAll(cfg, "{{"+name+"_address}}", address) } - err = ioutil.WriteFile(newCfgPath, []byte(cfg), 0600) + err = os.WriteFile(newCfgPath, []byte(cfg), 0600) if err != nil { return nil, errors.Wrapf(err, "Could not write config file") } diff --git a/tools/check-license/check-license.go b/tools/check-license/check-license.go index 6e8807d5bc7..4cbec4ecdc8 100644 --- a/tools/check-license/check-license.go +++ b/tools/check-license/check-license.go @@ -22,7 +22,6 @@ import ( "bytes" "flag" "fmt" - "io/ioutil" "os" "path/filepath" "strings" @@ -78,7 +77,7 @@ func main() { return nil } - src, err := ioutil.ReadFile(path) + src, err := os.ReadFile(path) if err != nil { return nil } @@ -88,7 +87,7 @@ func main() { err := fmt.Errorf("%v: license header not present or not at the top, to fix run: go run tools/check-license/check-license.go -fix", path) if *fix { newSrc := licenseText + string(src) - if err := ioutil.WriteFile(path, []byte(newSrc), 0644); err != nil { + if err := os.WriteFile(path, []byte(newSrc), 0644); err != nil { fmt.Println(err) os.Exit(1) } diff --git a/tools/create-artifacts/main.go b/tools/create-artifacts/main.go index 420207b80ef..3abc1c980db 100644 --- a/tools/create-artifacts/main.go +++ b/tools/create-artifacts/main.go @@ -25,7 +25,6 @@ import ( "flag" "fmt" "io" - "io/ioutil" "log" "os" "os/exec" @@ -122,7 +121,7 @@ func hashFile(file string) { } f.Close() val := hex.EncodeToString(hasher.Sum(nil)) - if err := ioutil.WriteFile(file+".sha256", []byte(val), 0644); err != nil { + if err := os.WriteFile(file+".sha256", []byte(val), 0644); err != nil { log.Fatal(err) } } diff --git a/tools/prepare-release/main.go b/tools/prepare-release/main.go index 051909b04bd..fa902a4b0ce 100644 --- a/tools/prepare-release/main.go +++ b/tools/prepare-release/main.go @@ -23,7 +23,6 @@ import ( "flag" "fmt" "io" - "io/ioutil" "os" "os/exec" "path" @@ -81,18 +80,18 @@ func main() { run(cmd) // add new VERSION and BUILD_DATE - if err := ioutil.WriteFile("VERSION", []byte(*version), 0644); err != nil { + if err := os.WriteFile("VERSION", []byte(*version), 0644); err != nil { fmt.Fprintf(os.Stderr, "error writing to VERSION file: %s", err) os.Exit(1) } // add new VERSION and RELEASE_DATE - if err := ioutil.WriteFile("RELEASE_DATE", []byte(date), 0644); err != nil { + if err := os.WriteFile("RELEASE_DATE", []byte(date), 0644); err != nil { fmt.Fprintf(os.Stderr, "error writing to RELEASE_DATE file: %s", err) os.Exit(1) } - tmp, err := ioutil.TempDir("", "reva-changelog") + tmp, err := os.MkdirTemp("", "reva-changelog") if err != nil { fmt.Fprintf(os.Stderr, "error creating tmp directory to store changelog: %s", err) os.Exit(1) @@ -120,7 +119,7 @@ func main() { } os.RemoveAll(tmp) - data, err := ioutil.ReadFile("changelog/NOTE.md") + data, err := os.ReadFile("changelog/NOTE.md") if err != nil { fmt.Fprintf(os.Stderr, "error reading NOTE.md: %s", err) os.Exit(1) @@ -138,7 +137,7 @@ description: > `, *version, *version, *version, date) releaseDocs += string(data) - if err := ioutil.WriteFile(fmt.Sprintf("docs/content/en/docs/changelog/%s/_index.md", *version), []byte(releaseDocs), 0644); err != nil { + if err := os.WriteFile(fmt.Sprintf("docs/content/en/docs/changelog/%s/_index.md", *version), []byte(releaseDocs), 0644); err != nil { fmt.Fprintf(os.Stderr, "error writing docs release file _index.md: %s", err) os.Exit(1) }