Added support for global config files

This commit is contained in:
Nicholas Novak 2023-03-18 11:34:22 -07:00
parent 51b7e0569c
commit 582eaf6e48
3 changed files with 40 additions and 5 deletions

5
go.mod
View File

@ -4,4 +4,7 @@ go 1.20
require github.com/arran4/golang-ical v0.0.0-20230213232137-07c6aad5e4f0
require github.com/BurntSushi/toml v1.2.1
require (
github.com/BurntSushi/toml v1.2.1
github.com/mitchellh/go-homedir v1.1.0
)

2
go.sum
View File

@ -9,6 +9,8 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=

40
main.go
View File

@ -1,7 +1,9 @@
package main
import (
"errors"
"fmt"
"io/fs"
"log"
"net/http"
"os"
@ -12,6 +14,7 @@ import (
"github.com/NickyBoy89/assign-notify/selection"
"github.com/NickyBoy89/assign-notify/timeline"
ics "github.com/arran4/golang-ical"
"github.com/mitchellh/go-homedir"
)
func ConstructCalendarUrl(
@ -29,7 +32,11 @@ func ConstructCalendarUrl(
)
}
const ConfigFileName = "config.toml"
// ConfigFileLocations is a list of every place that the config file could be located
// The items are explored in-order, and tildes are expanded to the user's home directory
var ConfigFileLocations = []string{
"~/.config/assign-notify/config.toml",
}
type Config struct {
MoodleRoot string `toml:"moodle_root"`
@ -39,14 +46,37 @@ type Config struct {
func main() {
// Load the config
var conf Config
confFile, err := os.Open(ConfigFileName)
var configFileLocation string
for _, path := range ConfigFileLocations {
location, err := homedir.Expand(path)
if err != nil {
log.Fatalf("Unable to open config %s: %s", ConfigFileName, err)
log.Fatalf("Unable to get home directory: %s", err)
}
if _, err := os.Stat(location); err == nil {
configFileLocation = location
} else {
// If there actually was an error, and the file wasn't just missing
// Otherwise, check the next file in the list
if !errors.Is(err, fs.ErrNotExist) {
log.Fatalf("Error accessing config file at %s: %s", location, err)
}
}
}
// No configuration was found
if configFileLocation == "" {
log.Fatalf("No configuration file found, looked in: %s", ConfigFileLocations)
}
var conf Config
confFile, err := os.Open(configFileLocation)
if err != nil {
log.Fatalf("Unable to open config %s: %s", configFileLocation, err)
}
if _, err := toml.NewDecoder(confFile).Decode(&conf); err != nil {
log.Fatalf("Error decoding %s: %s", ConfigFileName, err)
log.Fatalf("Error decoding %s: %s", configFileLocation, err)
}
confFile.Close()