package config import ( "fmt" "os" "encoding/csv" "strings" "io" "github.com/joho/godotenv" ) type ConfigEntries struct { SlackAuthToken string SlackAppToken string Actions []ActionScript } type ActionScript struct { Name string DisplayName string Path string } var Config ConfigEntries // var Actions []ActionScript func init() { fmt.Println("Initializing App Config settings") // TODO: Add if defined app will read from .env godotenv.Load(".env") Config.SlackAuthToken = os.Getenv("SLACK_AUTH_TOKEN") Config.SlackAppToken = os.Getenv("SLACK_APP_TOKEN") actionsLoaded := initalizeDefinedActions() fmt.Println("Finished loading config. Actions found:", actionsLoaded) fmt.Println("Actions:", Config.Actions) } // Each action is defined on an env variable named `BOT_ACTION_1` `BOT_ACTION_2` // the index starts with 1 and each must contain three comma separated values // `Name,Display Name,Path` // For example: // `poweron,Encender Server,/some/script.sh` func initalizeDefinedActions() int { fmt.Println("initalizeDefinedActions") var count = 1 var value string var exists bool for { envVarName := fmt.Sprintf("BOT_ACTION_%d", count) fmt.Println("Checking for env var:", envVarName) value, exists = os.LookupEnv(envVarName) if !exists { fmt.Println("Not fonud, giving up") break } fmt.Println("Action found:", value) action := actionStringToActionScript(value) // Actions = append(Actions, action) Config.Actions = append(Config.Actions, action) count++ } return count } func actionStringToActionScript(actionString string) ActionScript{ var action ActionScript var csvArr []string var err error r := csv.NewReader(strings.NewReader(actionString)) for { csvArr, err = r.Read() if err == io.EOF { break } if err != nil { // log.Fatal(err) } else { action.Name = csvArr[0] action.DisplayName = csvArr[1] action.Path = csvArr[2] } } return action }