You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

85 lines
1.9 KiB

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
}