diff --git a/auth/auth.go b/auth/auth.go new file mode 100644 index 0000000..fc47c39 --- /dev/null +++ b/auth/auth.go @@ -0,0 +1,15 @@ +package auth + +import ( + "errors" + + "github.com/gin-gonic/gin" +) + +func GetIDFromAuth(c *gin.Context) (string, error) { + auth := c.GetHeader("Authorization") + if len(auth) > 7 && auth[:7] == "Bearer " { + return auth[7:], nil + } + return "", errors.New("authorization token missing") +} diff --git a/cfg/cfg.go b/cfg/cfg.go new file mode 100644 index 0000000..5cac4ee --- /dev/null +++ b/cfg/cfg.go @@ -0,0 +1,63 @@ +package cfg + +import ( + "fmt" + "os" + "path" + + "gopkg.in/yaml.v3" +) + +type Cfg struct { + Name string + Dir string +} + +// Initializes new config handler +// dir is config directory from working dir on +// name is filename, file extention is automatically added '.cfg' +// file is in yaml format +// if file exists it will read its content in to the driver +func NewCfgHandler(dir, name string) *Cfg { + return &Cfg{ + Dir: dir, + Name: name, + } +} + +func (c *Cfg) SaveCfg(data any) error { + if _, err := os.Stat(c.Dir); err != nil { + if err := os.MkdirAll(c.Dir, 0666); err != nil { + return err + } + } + f, err := os.Create(path.Join(c.Dir, c.Name) + ".cfg") + if err != nil { + return err + } + defer f.Close() + + encoder := yaml.NewEncoder(f) + encoder.SetIndent(2) + + if err := encoder.Encode(data); err != nil { + return err + } + encoder.Close() + + return nil +} + +func (c *Cfg) LoadCfg(data any) error { + p := path.Join(c.Dir, c.Name) + ".cfg" + if _, err := os.Stat(p); err != nil { + return fmt.Errorf("no configuration file: '%s' found", p) + } + + b, err := os.ReadFile(p) + if err != nil { + return err + } + + return yaml.Unmarshal(b, data) +}