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
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
|
|
}
|
|
|