61 lines
1.1 KiB
Go
61 lines
1.1 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/ngn13/website/api/util"
|
|
)
|
|
|
|
type Option struct {
|
|
Name string
|
|
Value string
|
|
Required bool
|
|
}
|
|
|
|
func (o *Option) Env() string {
|
|
return strings.ToUpper(fmt.Sprintf("API_%s", o.Name))
|
|
}
|
|
|
|
var options []Option = []Option{
|
|
{Name: "password", Value: "", Required: true},
|
|
{Name: "frontend_url", Value: "http://localhost:5173/", Required: true},
|
|
}
|
|
|
|
func Load() bool {
|
|
var val string
|
|
|
|
for i := range options {
|
|
if val = os.Getenv(options[i].Env()); val == "" {
|
|
continue
|
|
}
|
|
|
|
options[i].Value = val
|
|
options[i].Required = false
|
|
}
|
|
|
|
for i := range options {
|
|
if options[i].Required && options[i].Value == "" {
|
|
util.Fail("please specify the required config option \"%s\" (\"%s\")", options[i].Name, options[i].Env())
|
|
return false
|
|
}
|
|
|
|
if options[i].Required && options[i].Value != "" {
|
|
util.Fail("using the default value \"%s\" for required config option \"%s\" (\"%s\")", options[i].Value, options[i].Name, options[i].Env())
|
|
}
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
func Get(name string) string {
|
|
for i := range options {
|
|
if options[i].Name != name {
|
|
continue
|
|
}
|
|
return options[i].Value
|
|
}
|
|
return ""
|
|
}
|