traefik-certs-dumper/dumper/file/file.go
2019-04-21 20:07:29 +02:00

64 lines
1.2 KiB
Go

package file
import (
"encoding/json"
"log"
"os"
"github.com/ldez/traefik-certs-dumper/v2/dumper"
"github.com/rjeczalik/notify"
)
// Dump Dumps "acme.json" file to certificates.
func Dump(config *Config, baseConfig *dumper.BaseConfig) error {
if config.Watch {
return watch(config.AcmeFile, baseConfig)
}
data, err := readFile(config.AcmeFile)
if err != nil {
return err
}
return dumper.Dump(data, baseConfig)
}
func watch(acmeFile string, baseConfig *dumper.BaseConfig) error {
events := make(chan notify.EventInfo, 1)
if err := notify.Watch(acmeFile, events, notify.Create, notify.Write, notify.Remove); err != nil {
return err
}
defer notify.Stop(events)
for {
// wait for filesystem event
<-events
data, err := readFile(acmeFile)
if err != nil {
return err
}
if err := dumper.Dump(data, baseConfig); err != nil {
return err
}
log.Println("Dumped new certificate data.")
}
}
func readFile(acmeFile string) (*dumper.StoredData, error) {
source, err := os.Open(acmeFile)
if err != nil {
return nil, err
}
data := &dumper.StoredData{}
if err = json.NewDecoder(source).Decode(data); err != nil {
return nil, err
}
return data, nil
}