From 03c3c192edd03f64db81478f8af82c61fe703085 Mon Sep 17 00:00:00 2001
From: Deluan <deluan@deluan.com>
Date: Sun, 26 Apr 2020 12:06:38 -0400
Subject: [PATCH] Fixing static checks about passing nil context

---
 engine/auth/auth.go                      |  3 ++-
 engine/cover_test.go                     |  3 ++-
 engine/media_streamer_test.go            |  2 +-
 engine/players_test.go                   |  2 +-
 engine/playlists.go                      |  2 +-
 log/log_test.go                          |  2 +-
 persistence/album_repository_test.go     |  2 +-
 persistence/artist_repository_test.go    |  2 +-
 persistence/genre_repository_test.go     |  4 +++-
 persistence/mediafile_repository_test.go |  2 +-
 persistence/persistence_suite_test.go    |  3 +--
 persistence/playlist_repository_test.go  |  4 +++-
 persistence/property_repository_test.go  |  6 ++++--
 persistence/user_repository_test.go      |  4 +++-
 scanner/scanner.go                       |  6 +++---
 scanner/tag_scanner.go                   |  2 +-
 server/initial_setup.go                  | 22 +++++++++++++---------
 17 files changed, 42 insertions(+), 29 deletions(-)

diff --git a/engine/auth/auth.go b/engine/auth/auth.go
index 4c8db1a02..774d33445 100644
--- a/engine/auth/auth.go
+++ b/engine/auth/auth.go
@@ -1,6 +1,7 @@
 package auth
 
 import (
+	"context"
 	"fmt"
 	"sync"
 	"time"
@@ -22,7 +23,7 @@ var (
 
 func InitTokenAuth(ds model.DataStore) {
 	once.Do(func() {
-		secret, err := ds.Property(nil).DefaultGet(consts.JWTSecretKey, "not so secret")
+		secret, err := ds.Property(context.TODO()).DefaultGet(consts.JWTSecretKey, "not so secret")
 		if err != nil {
 			log.Error("No JWT secret found in DB. Setting a temp one, but please report this error", err)
 		}
diff --git a/engine/cover_test.go b/engine/cover_test.go
index 213c974df..329bc6145 100644
--- a/engine/cover_test.go
+++ b/engine/cover_test.go
@@ -2,6 +2,7 @@ package engine
 
 import (
 	"bytes"
+	"context"
 	"image"
 
 	"github.com/deluan/navidrome/log"
@@ -14,7 +15,7 @@ import (
 var _ = Describe("Cover", func() {
 	var cover Cover
 	var ds model.DataStore
-	ctx := log.NewContext(nil)
+	ctx := log.NewContext(context.TODO())
 
 	BeforeEach(func() {
 		ds = &persistence.MockDataStore{MockedTranscoding: &mockTranscodingRepository{}}
diff --git a/engine/media_streamer_test.go b/engine/media_streamer_test.go
index ac05fbc2b..0f0dbbb57 100644
--- a/engine/media_streamer_test.go
+++ b/engine/media_streamer_test.go
@@ -16,7 +16,7 @@ var _ = Describe("MediaStreamer", func() {
 	var streamer MediaStreamer
 	var ds model.DataStore
 	ffmpeg := &fakeFFmpeg{Data: "fake data"}
-	ctx := log.NewContext(nil)
+	ctx := log.NewContext(context.TODO())
 
 	BeforeEach(func() {
 		ds = &persistence.MockDataStore{MockedTranscoding: &mockTranscodingRepository{}}
diff --git a/engine/players_test.go b/engine/players_test.go
index ec2b58677..720274035 100644
--- a/engine/players_test.go
+++ b/engine/players_test.go
@@ -14,7 +14,7 @@ import (
 var _ = Describe("Players", func() {
 	var players Players
 	var repo *mockPlayerRepository
-	ctx := context.WithValue(log.NewContext(nil), "user", model.User{ID: "userid", UserName: "johndoe"})
+	ctx := context.WithValue(log.NewContext(context.TODO()), "user", model.User{ID: "userid", UserName: "johndoe"})
 	ctx = context.WithValue(ctx, "username", "johndoe")
 	var beforeRegister time.Time
 
diff --git a/engine/playlists.go b/engine/playlists.go
index 65eadb841..d37b4f730 100644
--- a/engine/playlists.go
+++ b/engine/playlists.go
@@ -69,7 +69,7 @@ func (p *playlists) Delete(ctx context.Context, playlistId string) error {
 	if owner != pls.Owner {
 		return model.ErrNotAuthorized
 	}
-	return p.ds.Playlist(nil).Delete(playlistId)
+	return p.ds.Playlist(ctx).Delete(playlistId)
 }
 
 func (p *playlists) Update(ctx context.Context, playlistId string, name *string, idsToAdd []string, idxToRemove []int) error {
diff --git a/log/log_test.go b/log/log_test.go
index f11a2b491..9ef382648 100644
--- a/log/log_test.go
+++ b/log/log_test.go
@@ -70,7 +70,7 @@ var _ = Describe("Logger", func() {
 		})
 
 		It("can get data from the request's context", func() {
-			ctx := NewContext(nil, "foo", "bar")
+			ctx := NewContext(context.TODO(), "foo", "bar")
 			req := httptest.NewRequest("get", "/", nil).WithContext(ctx)
 
 			Error(req, "Simple Message", "key1", "value1")
diff --git a/persistence/album_repository_test.go b/persistence/album_repository_test.go
index e057344f2..1472c2804 100644
--- a/persistence/album_repository_test.go
+++ b/persistence/album_repository_test.go
@@ -14,7 +14,7 @@ var _ = Describe("AlbumRepository", func() {
 	var repo model.AlbumRepository
 
 	BeforeEach(func() {
-		ctx := context.WithValue(log.NewContext(nil), "user", model.User{ID: "userid"})
+		ctx := context.WithValue(log.NewContext(context.TODO()), "user", model.User{ID: "userid"})
 		repo = NewAlbumRepository(ctx, orm.NewOrm())
 	})
 
diff --git a/persistence/artist_repository_test.go b/persistence/artist_repository_test.go
index ab37bb62d..79726e96c 100644
--- a/persistence/artist_repository_test.go
+++ b/persistence/artist_repository_test.go
@@ -14,7 +14,7 @@ var _ = Describe("ArtistRepository", func() {
 	var repo model.ArtistRepository
 
 	BeforeEach(func() {
-		ctx := context.WithValue(log.NewContext(nil), "user", model.User{ID: "userid"})
+		ctx := context.WithValue(log.NewContext(context.TODO()), "user", model.User{ID: "userid"})
 		repo = NewArtistRepository(ctx, orm.NewOrm())
 	})
 
diff --git a/persistence/genre_repository_test.go b/persistence/genre_repository_test.go
index b10df31e8..b76d07a60 100644
--- a/persistence/genre_repository_test.go
+++ b/persistence/genre_repository_test.go
@@ -1,6 +1,8 @@
 package persistence_test
 
 import (
+	"context"
+
 	"github.com/astaxie/beego/orm"
 	"github.com/deluan/navidrome/log"
 	"github.com/deluan/navidrome/model"
@@ -13,7 +15,7 @@ var _ = Describe("GenreRepository", func() {
 	var repo model.GenreRepository
 
 	BeforeEach(func() {
-		repo = persistence.NewGenreRepository(log.NewContext(nil), orm.NewOrm())
+		repo = persistence.NewGenreRepository(log.NewContext(context.TODO()), orm.NewOrm())
 	})
 
 	It("returns all records", func() {
diff --git a/persistence/mediafile_repository_test.go b/persistence/mediafile_repository_test.go
index ea09e5a64..5231e4e93 100644
--- a/persistence/mediafile_repository_test.go
+++ b/persistence/mediafile_repository_test.go
@@ -16,7 +16,7 @@ var _ = Describe("MediaRepository", func() {
 	var mr model.MediaFileRepository
 
 	BeforeEach(func() {
-		ctx := context.WithValue(log.NewContext(nil), "user", model.User{ID: "userid"})
+		ctx := context.WithValue(log.NewContext(context.TODO()), "user", model.User{ID: "userid"})
 		mr = NewMediaFileRepository(ctx, orm.NewOrm())
 	})
 
diff --git a/persistence/persistence_suite_test.go b/persistence/persistence_suite_test.go
index 4e6b8703b..a05c97837 100644
--- a/persistence/persistence_suite_test.go
+++ b/persistence/persistence_suite_test.go
@@ -23,7 +23,6 @@ func TestPersistence(t *testing.T) {
 	//conf.Server.Path = "./test-123.db"
 	conf.Server.DbPath = "file::memory:?cache=shared"
 	orm.RegisterDataBase("default", db.Driver, conf.Server.DbPath)
-	New()
 	db.EnsureLatestVersion()
 	log.SetLevel(log.LevelCritical)
 	RegisterFailHandler(Fail)
@@ -85,7 +84,7 @@ var _ = Describe("Initialize test DB", func() {
 	// TODO Load this data setup from file(s)
 	BeforeSuite(func() {
 		o := orm.NewOrm()
-		ctx := context.WithValue(log.NewContext(nil), "user", model.User{ID: "userid"})
+		ctx := context.WithValue(log.NewContext(context.TODO()), "user", model.User{ID: "userid"})
 		mr := NewMediaFileRepository(ctx, o)
 		for _, s := range testSongs {
 			err := mr.Put(&s)
diff --git a/persistence/playlist_repository_test.go b/persistence/playlist_repository_test.go
index 271810146..da8f8b413 100644
--- a/persistence/playlist_repository_test.go
+++ b/persistence/playlist_repository_test.go
@@ -1,6 +1,8 @@
 package persistence
 
 import (
+	"context"
+
 	"github.com/astaxie/beego/orm"
 	"github.com/deluan/navidrome/log"
 	"github.com/deluan/navidrome/model"
@@ -12,7 +14,7 @@ var _ = Describe("PlaylistRepository", func() {
 	var repo model.PlaylistRepository
 
 	BeforeEach(func() {
-		repo = NewPlaylistRepository(log.NewContext(nil), orm.NewOrm())
+		repo = NewPlaylistRepository(log.NewContext(context.TODO()), orm.NewOrm())
 	})
 
 	Describe("Count", func() {
diff --git a/persistence/property_repository_test.go b/persistence/property_repository_test.go
index dc9e5c331..de1222c33 100644
--- a/persistence/property_repository_test.go
+++ b/persistence/property_repository_test.go
@@ -1,8 +1,10 @@
 package persistence
 
 import (
+	"context"
+
 	"github.com/astaxie/beego/orm"
-	. "github.com/deluan/navidrome/log"
+	"github.com/deluan/navidrome/log"
 	"github.com/deluan/navidrome/model"
 	. "github.com/onsi/ginkgo"
 	. "github.com/onsi/gomega"
@@ -12,7 +14,7 @@ var _ = Describe("Property Repository", func() {
 	var pr model.PropertyRepository
 
 	BeforeEach(func() {
-		pr = NewPropertyRepository(NewContext(nil), orm.NewOrm())
+		pr = NewPropertyRepository(log.NewContext(context.TODO()), orm.NewOrm())
 	})
 
 	It("saves and restore a new property", func() {
diff --git a/persistence/user_repository_test.go b/persistence/user_repository_test.go
index f9c3b2ab8..1feab6915 100644
--- a/persistence/user_repository_test.go
+++ b/persistence/user_repository_test.go
@@ -1,6 +1,8 @@
 package persistence
 
 import (
+	"context"
+
 	"github.com/astaxie/beego/orm"
 	"github.com/deluan/navidrome/log"
 	"github.com/deluan/navidrome/model"
@@ -12,7 +14,7 @@ var _ = Describe("UserRepository", func() {
 	var repo model.UserRepository
 
 	BeforeEach(func() {
-		repo = NewUserRepository(log.NewContext(nil), orm.NewOrm())
+		repo = NewUserRepository(log.NewContext(context.TODO()), orm.NewOrm())
 	})
 
 	Describe("Put/Get/FindByUsername", func() {
diff --git a/scanner/scanner.go b/scanner/scanner.go
index 7a896ca40..1f032f3f5 100644
--- a/scanner/scanner.go
+++ b/scanner/scanner.go
@@ -34,7 +34,7 @@ func (s *Scanner) Rescan(mediaFolder string, fullRescan bool) error {
 		log.Debug("Scanning folder (full scan)", "folder", mediaFolder)
 	}
 
-	err := folderScanner.Scan(log.NewContext(nil), lastModifiedSince)
+	err := folderScanner.Scan(log.NewContext(context.TODO()), lastModifiedSince)
 	if err != nil {
 		log.Error("Error importing MediaFolder", "folder", mediaFolder, err)
 	}
@@ -59,7 +59,7 @@ func (s *Scanner) RescanAll(fullRescan bool) error {
 func (s *Scanner) Status() []StatusInfo { return nil }
 
 func (s *Scanner) getLastModifiedSince(folder string) time.Time {
-	ms, err := s.ds.Property(nil).Get(model.PropLastScan + "-" + folder)
+	ms, err := s.ds.Property(context.TODO()).Get(model.PropLastScan + "-" + folder)
 	if err != nil {
 		return time.Time{}
 	}
@@ -76,7 +76,7 @@ func (s *Scanner) updateLastModifiedSince(folder string, t time.Time) {
 }
 
 func (s *Scanner) loadFolders() {
-	fs, _ := s.ds.MediaFolder(nil).GetAll()
+	fs, _ := s.ds.MediaFolder(context.TODO()).GetAll()
 	for _, f := range fs {
 		log.Info("Configuring Media Folder", "name", f.Name, "path", f.Path)
 		s.folders[f.Path] = NewTagScanner(f.Path, s.ds)
diff --git a/scanner/tag_scanner.go b/scanner/tag_scanner.go
index 16010b64e..9a6d8add7 100644
--- a/scanner/tag_scanner.go
+++ b/scanner/tag_scanner.go
@@ -113,7 +113,7 @@ func (s *TagScanner) Scan(ctx context.Context, lastModifiedSince time.Time) erro
 		return err
 	}
 
-	err = s.ds.GC(log.NewContext(nil))
+	err = s.ds.GC(log.NewContext(context.TODO()))
 	log.Info("Finished Music Folder", "folder", s.rootFolder, "elapsed", time.Since(start))
 
 	return err
diff --git a/server/initial_setup.go b/server/initial_setup.go
index cd0ad971a..45083046a 100644
--- a/server/initial_setup.go
+++ b/server/initial_setup.go
@@ -1,6 +1,7 @@
 package server
 
 import (
+	"context"
 	"encoding/json"
 	"fmt"
 	"time"
@@ -18,7 +19,8 @@ func initialSetup(ds model.DataStore) {
 			return err
 		}
 
-		_, err := ds.Property(nil).Get(consts.InitialSetupFlagKey)
+		properties := ds.Property(context.TODO())
+		_, err := properties.Get(consts.InitialSetupFlagKey)
 		if err == nil {
 			return nil
 		}
@@ -33,13 +35,14 @@ func initialSetup(ds model.DataStore) {
 			}
 		}
 
-		err = ds.Property(nil).Put(consts.InitialSetupFlagKey, time.Now().String())
+		err = properties.Put(consts.InitialSetupFlagKey, time.Now().String())
 		return err
 	})
 }
 
 func createInitialAdminUser(ds model.DataStore) error {
-	c, err := ds.User(nil).CountAll()
+	users := ds.User(context.TODO())
+	c, err := users.CountAll()
 	if err != nil {
 		panic(fmt.Sprintf("Could not access User table: %s", err))
 	}
@@ -59,7 +62,7 @@ func createInitialAdminUser(ds model.DataStore) error {
 			Password: initialPassword,
 			IsAdmin:  true,
 		}
-		err := ds.User(nil).Put(&initialUser)
+		err := users.Put(&initialUser)
 		if err != nil {
 			log.Error("Could not create initial admin user", "user", initialUser, err)
 		}
@@ -68,13 +71,14 @@ func createInitialAdminUser(ds model.DataStore) error {
 }
 
 func createJWTSecret(ds model.DataStore) error {
-	_, err := ds.Property(nil).Get(consts.JWTSecretKey)
+	properties := ds.Property(context.TODO())
+	_, err := properties.Get(consts.JWTSecretKey)
 	if err == nil {
 		return nil
 	}
 	jwtSecret, _ := uuid.NewRandom()
 	log.Warn("Creating JWT secret, used for encrypting UI sessions")
-	err = ds.Property(nil).Put(consts.JWTSecretKey, jwtSecret.String())
+	err = properties.Put(consts.JWTSecretKey, jwtSecret.String())
 	if err != nil {
 		log.Error("Could not save JWT secret in DB", err)
 	}
@@ -82,8 +86,8 @@ func createJWTSecret(ds model.DataStore) error {
 }
 
 func createDefaultTranscodings(ds model.DataStore) error {
-	repo := ds.Transcoding(nil)
-	c, _ := repo.CountAll()
+	transcodings := ds.Transcoding(context.TODO())
+	c, _ := transcodings.CountAll()
 	if c != 0 {
 		return nil
 	}
@@ -98,7 +102,7 @@ func createDefaultTranscodings(ds model.DataStore) error {
 			return err
 		}
 		log.Info("Creating default transcoding config", "name", t.Name)
-		if err = repo.Put(&t); err != nil {
+		if err = transcodings.Put(&t); err != nil {
 			return err
 		}
 	}