Просмотр исходного кода

fix: guard against nil session storage

jamesread 8 месяцев назад
Родитель
Сommit
0dd9e9b2b7
1 измененных файлов с 22 добавлено и 0 удалено
  1. 22 0
      service/internal/auth/sessions.go

+ 22 - 0
service/internal/auth/sessions.go

@@ -6,6 +6,7 @@ import (
 	"time"
 	"time"
 
 
 	"github.com/OliveTin/OliveTin/internal/config"
 	"github.com/OliveTin/OliveTin/internal/config"
+	"github.com/sirupsen/logrus"
 	"gopkg.in/yaml.v3"
 	"gopkg.in/yaml.v3"
 )
 )
 
 
@@ -86,29 +87,50 @@ func LoadUserSessions(cfg *config.Config) {
 
 
 	data, err := os.ReadFile(cfg.GetDir() + "/sessions.yaml")
 	data, err := os.ReadFile(cfg.GetDir() + "/sessions.yaml")
 	if err != nil {
 	if err != nil {
+		logrus.WithError(err).Warn("Failed to read sessions.yaml file")
+		// Initialize empty session storage if file doesn't exist
+		if sessionStorage == nil {
+			sessionStorage = &SessionStorage{
+				Providers: make(map[string]*SessionProvider),
+			}
+		}
 		return
 		return
 	}
 	}
 
 
 	err = yaml.Unmarshal(data, &sessionStorage)
 	err = yaml.Unmarshal(data, &sessionStorage)
 	if err != nil {
 	if err != nil {
+		logrus.WithError(err).Error("Failed to unmarshal sessions.yaml")
+		// Initialize empty session storage if unmarshal fails
+		if sessionStorage == nil {
+			sessionStorage = &SessionStorage{
+				Providers: make(map[string]*SessionProvider),
+			}
+		}
 		return
 		return
 	}
 	}
 
 
+	// Ensure sessionStorage and Providers are properly initialized
 	if sessionStorage == nil {
 	if sessionStorage == nil {
 		sessionStorage = &SessionStorage{
 		sessionStorage = &SessionStorage{
 			Providers: make(map[string]*SessionProvider),
 			Providers: make(map[string]*SessionProvider),
 		}
 		}
 	}
 	}
+
+	if sessionStorage.Providers == nil {
+		sessionStorage.Providers = make(map[string]*SessionProvider)
+	}
 }
 }
 
 
 func saveUserSessions(cfg *config.Config) {
 func saveUserSessions(cfg *config.Config) {
 	out, err := yaml.Marshal(sessionStorage)
 	out, err := yaml.Marshal(sessionStorage)
 	if err != nil {
 	if err != nil {
+		logrus.WithError(err).Error("Failed to marshal session storage")
 		return
 		return
 	}
 	}
 
 
 	err = os.WriteFile(cfg.GetDir()+"/sessions.yaml", out, 0600)
 	err = os.WriteFile(cfg.GetDir()+"/sessions.yaml", out, 0600)
 	if err != nil {
 	if err != nil {
+		logrus.WithError(err).Error("Failed to write sessions.yaml file")
 		return
 		return
 	}
 	}
 }
 }