pgm/data/data.go
2020-10-30 20:12:51 -05:00

97 lines
2.3 KiB
Go

package data
import (
"fmt"
"github.com/spf13/viper"
"log"
"os"
"pgm/logger"
)
// Simple ini file for connecting to databases.
type HostDetails struct {
Secret string `json:"secret"`
Hostname string `json:"hostname"`
DatabaseName string `json:"databaseName"`
Username string `json:"username"`
}
func ReadHosts() []string {
var pgee []string
var homeDir string
homeDir, err := os.UserHomeDir()
if err != nil {
log.Fatal(err)
}
file, err := os.Open(homeDir + "/.pgm/hosts")
if err != nil {
logged := logger.Logger("failed opening directory: %s" + err.Error())
if logged == true {
fmt.Println("failed to load hosts, failure was logged")
}
}
defer file.Close()
pgee, err = file.Readdirnames(0) // 0 to read all files and folders
if err != nil {
log.Fatal(err)
}
return pgee
}
// handles interacting with the ini file.
func ViperPgmConfig(k string, a string) (bool, string) {
var h string
var s string
h, err := os.UserHomeDir()
if err != nil {
logger.Logger("[ERROR] could not set home directory: " + err.Error())
os.Exit(0)
}
viper.SetConfigName(".pgm")
viper.SetConfigType("yaml")
viper.AddConfigPath(h)
err = viper.ReadInConfig() // Find and read the ini file
if err != nil { // Handle errors reading the ini file
logger.Logger("[ERROR] failed to load viper ini: " + err.Error())
fmt.Println("error occurred and was logged.")
os.Exit(1)
}
// r returns values, may add an action to update or set values later if it makes sense
switch a {
case "r":
if viper.IsSet(k) {
s = viper.GetString(k)
logger.Logger("[LOG] got value from .pgm.yaml: key = " + k + ", value = " + s)
return true, s
}
return false, ""
default:
logger.Logger("[LOG] invalid action passed to Viper return key. use \"r\" for return")
return false, ""
}
return false, ""
}
func ViperScrConfig(filename string, defaults map[string]interface{}) (*viper.Viper, error){
v := viper.New()
for key, value := range defaults {
v.SetDefault(key, value)
}
v.SetConfigName(filename)
v.AddConfigPath( "/home/jms/.pgm/scn")
v.AutomaticEnv()
err := v.ReadInConfig()
return v, err
}
type ViewCfg struct {
q string `mapstructure:"query"`
c int `mapstructure:"column"`
datatypes string `mapstructure:"datatypes"`
uiT bool `mapstructure:"uiType"`
t string `mapstructure:"title"`
}