MCPcopy
hub / github.com/filebrowser/filebrowser / exec

Method exec

runner/runner.go:55–118  ·  view source on GitHub ↗
(raw, evt, path, dst string, user *users.User)

Source from the content-addressed store, hash-verified

53}
54
55func (r *Runner) exec(raw, evt, path, dst string, user *users.User) error {
56 blocking := true
57
58 if strings.HasSuffix(raw, "&") {
59 blocking = false
60 raw = strings.TrimSpace(strings.TrimSuffix(raw, "&"))
61 }
62
63 command, _, err := ParseCommand(r.Settings, raw)
64 if err != nil {
65 return err
66 }
67
68 envMapping := func(key string) string {
69 switch key {
70 case "FILE":
71 return path
72 case "SCOPE":
73 return user.Scope
74 case "TRIGGER":
75 return evt
76 case "USERNAME":
77 return user.Username
78 case "DESTINATION":
79 return dst
80 default:
81 return os.Getenv(key)
82 }
83 }
84 for i, arg := range command {
85 if i == 0 {
86 continue
87 }
88
89 command[i] = os.Expand(arg, envMapping)
90 }
91
92 cmd := exec.Command(command[0], command[1:]...)
93 cmd.Env = append(os.Environ(), fmt.Sprintf("FILE=%s", path))
94 cmd.Env = append(cmd.Env, fmt.Sprintf("SCOPE=%s", user.Scope))
95 cmd.Env = append(cmd.Env, fmt.Sprintf("TRIGGER=%s", evt))
96 cmd.Env = append(cmd.Env, fmt.Sprintf("USERNAME=%s", user.Username))
97 cmd.Env = append(cmd.Env, fmt.Sprintf("DESTINATION=%s", dst))
98
99 cmd.Stdin = os.Stdin
100 cmd.Stdout = os.Stdout
101 cmd.Stderr = os.Stderr
102
103 if !blocking {
104 log.Printf("[INFO] Nonblocking Command: \"%s\"", strings.Join(command, " "))
105 defer func() {
106 go func() {
107 err := cmd.Wait()
108 if err != nil {
109 log.Printf("[INFO] Nonblocking Command \"%s\" failed: %s", strings.Join(command, " "), err)
110 }
111 }()
112 }()

Callers 1

RunHookMethod · 0.95

Calls 1

ParseCommandFunction · 0.85

Tested by

no test coverage detected