From e06764a6891f574e41e91c5425c9147cfc5272c7 Mon Sep 17 00:00:00 2001 From: Louis Dalibard Date: Sun, 28 Apr 2024 22:08:34 +0200 Subject: [PATCH] feat: add config --- config/config.go | 52 +++++++++++++++++++++++++++++++++++++++++++----- go.mod | 2 ++ go.sum | 6 ++++++ main.go | 1 + 4 files changed, 56 insertions(+), 5 deletions(-) diff --git a/config/config.go b/config/config.go index 8a29ae8..3031619 100644 --- a/config/config.go +++ b/config/config.go @@ -1,13 +1,55 @@ package config -import "himitsu/totp" +import ( + "himitsu/totp" + "os" + "path/filepath" + + "github.com/kirsle/configdir" + "gopkg.in/yaml.v3" +) const Version = "v0.0.1" -var Config = []totp.TOTP{ +var DefaultConfig = []totp.TOTP{ { - Label: "Test", - Secret: "Test", - Account: "Test", + Label: "Label", + Secret: "Secret", + Account: "Account", }, } +var Config []totp.TOTP + +func Init() { + configPath := configdir.LocalConfig("ontake", "himitsu") + err := configdir.MakePath(configPath) // Ensure it exists. + if err != nil { + panic(err) + } + + configFile := filepath.Join(configPath, "totp.yml") + + // Does the file not exist? + if _, err = os.Stat(configFile); os.IsNotExist(err) { + // Create the new config file. + fh, err := os.Create(configFile) + if err != nil { + panic(err) + } + defer fh.Close() + + encoder := yaml.NewEncoder(fh) + encoder.Encode(&DefaultConfig) + Config = DefaultConfig + } else { + // Load the existing file. + fh, err := os.Open(configFile) + if err != nil { + panic(err) + } + defer fh.Close() + + decoder := yaml.NewDecoder(fh) + decoder.Decode(&Config) + } +} diff --git a/go.mod b/go.mod index b3b3e0d..529e14f 100644 --- a/go.mod +++ b/go.mod @@ -4,9 +4,11 @@ go 1.22.2 require ( github.com/charmbracelet/bubbletea v0.25.0 + github.com/kirsle/configdir v0.0.0-20170128060238-e45d2f54772f github.com/lucasb-eyer/go-colorful v1.2.0 github.com/muesli/termenv v0.15.2 github.com/pquerna/otp v1.4.0 + gopkg.in/yaml.v3 v3.0.1 ) require ( diff --git a/go.sum b/go.sum index fffe4f6..fbcb176 100644 --- a/go.sum +++ b/go.sum @@ -8,6 +8,8 @@ github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 h1:q2hJAaP1k2 github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81/go.mod h1:YynlIjWYF8myEu6sdkwKIvGQq+cOckRm6So2avqoYAk= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/kirsle/configdir v0.0.0-20170128060238-e45d2f54772f h1:dKccXx7xA56UNqOcFIbuqFjAWPVtP688j5QMgmo6OHU= +github.com/kirsle/configdir v0.0.0-20170128060238-e45d2f54772f/go.mod h1:4rEELDSfUAlBSyUjPG0JnaNGjf13JySHFeRdD/3dLP0= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98= @@ -46,3 +48,7 @@ golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/text v0.3.8 h1:nAL+RVCQ9uMn3vJZbV+MRnydTJFPf8qqY42YiA6MrqY= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/main.go b/main.go index a567e9f..e0365e7 100644 --- a/main.go +++ b/main.go @@ -11,6 +11,7 @@ import ( ) func main() { + config.Init() p := tea.NewProgram(initialModel()) if _, err := p.Run(); err != nil { log.Fatal(err)