diff --git a/api/apps.go b/api/apps.go index bb980a06a..cf6c4f578 100644 --- a/api/apps.go +++ b/api/apps.go @@ -10,6 +10,7 @@ import ( "github.com/gorilla/context" "net/http" "reflect" + "sort" "strings" ) @@ -80,13 +81,10 @@ func appMiddleware(next http.Handler) http.Handler { } func getApps(w http.ResponseWriter, r *http.Request) { + type app struct { - ID string `json:"id"` - Title string `json:"title"` - Icon string `json:"icon"` - Color string `json:"color"` - DarkColor string `json:"dark_color"` - Active bool `json:"active"` + util.App + ID string `json:"id"` } apps := make([]app, 0) @@ -94,15 +92,15 @@ func getApps(w http.ResponseWriter, r *http.Request) { for k, a := range util.Config.Apps { apps = append(apps, app{ - ID: k, - Title: a.Title, - Icon: a.Icon, - Color: a.Color, - DarkColor: a.DarkColor, - Active: a.Active, + App: a, + ID: k, }) } + sort.Slice(apps, func(i, j int) bool { + return apps[i].Priority > apps[j].Priority + }) + helpers.WriteJSON(w, http.StatusOK, apps) } diff --git a/db_lib/ShellApp.go b/db_lib/ShellApp.go index c521a16e3..ac32d3b36 100644 --- a/db_lib/ShellApp.go +++ b/db_lib/ShellApp.go @@ -91,15 +91,16 @@ func (t *ShellApp) makeShellCmd(args []string, environmentVars *[]string) *exec. command = "powershell" appArgs = []string{"-File"} default: + command = string(t.App) } - if app, ok := util.Config.Apps[string(t.App)]; ok && app.AppPath != "" { - command = app.AppPath + if app, ok := util.Config.Apps[string(t.App)]; ok { + if app.AppPath != "" { + command = app.AppPath + } if app.AppArgs != nil { appArgs = app.AppArgs } - } else { - command = string(t.App) } return t.makeCmd(command, append(appArgs, args...), environmentVars) diff --git a/util/App.go b/util/App.go index b7e204789..10608053e 100644 --- a/util/App.go +++ b/util/App.go @@ -2,7 +2,7 @@ package util type App struct { Active bool `json:"active"` - Order int `json:"order"` + Priority int `json:"priority"` Title string `json:"title"` Icon string `json:"icon"` Color string `json:"color"` diff --git a/util/config.go b/util/config.go index a226acd4a..5c6e9d344 100644 --- a/util/config.go +++ b/util/config.go @@ -252,14 +252,7 @@ func ConfigInit(configPath string) { fmt.Println("Loading config") Config = &ConfigType{} - Config.Apps = map[string]App{ - "ansible": {}, - "terraform": {}, - "tofu": {}, - "bash": {}, - "powershell": {}, - "python": {}, - } + Config.Apps = map[string]App{} loadConfigFile(configPath) loadConfigEnvironment() @@ -811,16 +804,26 @@ func (conf *ConfigType) GenerateSecrets() { conf.AccessKeyEncryption = base64.StdEncoding.EncodeToString(accessKeyEncryption) } +var appCommands = map[string]string{ + "ansible": "ansible-playbook", + "terraform": "terraform", + "tofu": "tofu", + "bash": "bash", +} + +var appPriorities = map[string]int{ + "ansible": 1000, + "terraform": 900, + "tofu": 800, + "bash": 700, + "powershell": 600, + "python": 500, +} + func LookupDefaultApps() { - appCommands := map[string]string{ - "ansible": "ansible-playbook", - "terraform": "terraform", - "tofu": "tofu", - "bash": "bash", - } - for app, cmd := range appCommands { - if _, ok := Config.Apps[app]; ok { + for appID, cmd := range appCommands { + if _, ok := Config.Apps[appID]; ok { continue } @@ -834,10 +837,18 @@ func LookupDefaultApps() { Config.Apps = make(map[string]App) } - Config.Apps[app] = App{ + Config.Apps[appID] = App{ Active: true, } } + + for k, v := range appPriorities { + app, _ := Config.Apps[k] + if app.Priority <= 0 { + app.Priority = v + } + Config.Apps[k] = app + } } func PrintDebug() { diff --git a/web/src/components/AppForm.vue b/web/src/components/AppForm.vue index ed2625472..79dd47e83 100644 --- a/web/src/components/AppForm.vue +++ b/web/src/components/AppForm.vue @@ -23,27 +23,28 @@ + +