Sfoglia il codice sorgente

fix: panic when executing action with no arguments

jamesread 8 mesi fa
parent
commit
a4e50bfb54
2 ha cambiato i file con 18 aggiunte e 25 eliminazioni
  1. 15 23
      service/internal/auth/sessions.go
  2. 3 2
      service/internal/executor/executor.go

+ 15 - 23
service/internal/auth/sessions.go

@@ -85,29 +85,21 @@ func LoadUserSessions(cfg *config.Config) {
 	sessionStorageMutex.Lock()
 	defer sessionStorageMutex.Unlock()
 
-	data, err := os.ReadFile(cfg.GetDir() + "/sessions.yaml")
-	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
-	}
-
-	err = yaml.Unmarshal(data, &sessionStorage)
-	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
-	}
+    data, err := os.ReadFile(cfg.GetDir() + "/sessions.yaml")
+    if err != nil {
+        logrus.WithError(err).Warn("Failed to read sessions.yaml file")
+        // Always reset in-memory sessions on load error
+        sessionStorage = &SessionStorage{Providers: make(map[string]*SessionProvider)}
+        return
+    }
+
+    err = yaml.Unmarshal(data, &sessionStorage)
+    if err != nil {
+        logrus.WithError(err).Error("Failed to unmarshal sessions.yaml")
+        // Always reset in-memory sessions on parse error
+        sessionStorage = &SessionStorage{Providers: make(map[string]*SessionProvider)}
+        return
+    }
 
 	// Ensure sessionStorage and Providers are properly initialized
 	if sessionStorage == nil {

+ 3 - 2
service/internal/executor/executor.go

@@ -436,8 +436,6 @@ func stepParseArgs(req *ExecutionRequest) bool {
 	req.Arguments["ot_executionTrackingId"] = req.TrackingID
 	req.Arguments["ot_username"] = req.AuthenticatedUser.Username
 
-	mangleInvalidArgumentValues(req)
-
 	if req.Binding == nil || req.Binding.Action == nil {
 		err = fmt.Errorf("cannot parse arguments: Binding or Action is nil")
 		req.logEntry.Output = err.Error()
@@ -445,6 +443,9 @@ func stepParseArgs(req *ExecutionRequest) bool {
 		return false
 	}
 
+	// Only mangle arguments when we have a valid binding/action
+	mangleInvalidArgumentValues(req)
+
 	if len(req.Binding.Action.Exec) > 0 {
 		req.useDirectExec = true
 		req.execArgs, err = parseActionExec(req.Arguments, req.Binding.Action, req.Binding.Entity)