mirror of
https://github.com/renorris/openfsd
synced 2026-03-22 14:35:36 +08:00
80 lines
1.8 KiB
Go
80 lines
1.8 KiB
Go
package db
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"encoding/hex"
|
|
"errors"
|
|
"io"
|
|
)
|
|
|
|
type ConfigRepository interface {
|
|
// Set sets a value for a given key
|
|
Set(key string, value string) (err error)
|
|
|
|
// SetIfNotExists sets a value for a given key if it does not already exist
|
|
SetIfNotExists(key string, value string) (err error)
|
|
|
|
// Get gets a value for a given key.
|
|
//
|
|
// Returns ErrConfigKeyNotFound if no key/value pair is found.
|
|
Get(key string) (value string, err error)
|
|
}
|
|
|
|
const (
|
|
ConfigJwtSecretKey = "JWT_SECRET_KEY"
|
|
|
|
ConfigFsdServerHostname = "FSD_SERVER_HOSTNAME"
|
|
ConfigFsdServerIdent = "FSD_SERVER_IDENT"
|
|
ConfigFsdServerLocation = "FSD_SERVER_LOCATION"
|
|
|
|
ConfigApiServerBaseURL = "API_SERVER_BASE_URL"
|
|
|
|
ConfigWelcomeMessage = "WELCOME_MESSAGE"
|
|
)
|
|
|
|
var ErrConfigKeyNotFound = errors.New("config: key not found")
|
|
|
|
const secretKeyBits = 256
|
|
|
|
func GenerateJwtSecretKey() (key [secretKeyBits / 8]byte, err error) {
|
|
secretKey := make([]byte, (secretKeyBits/8)/2)
|
|
if _, err = io.ReadFull(rand.Reader, secretKey); err != nil {
|
|
return
|
|
}
|
|
|
|
hex.Encode(key[:], secretKey)
|
|
|
|
return
|
|
}
|
|
|
|
// GetWelcomeMessage returns any configured welcome message.
|
|
// Returns an empty string if no message is found.
|
|
func GetWelcomeMessage(r *ConfigRepository) (msg string) {
|
|
msg, _ = (*r).Get(ConfigWelcomeMessage)
|
|
return
|
|
}
|
|
|
|
func InitDefaultConfig(r *ConfigRepository) (err error) {
|
|
secretKey, err := GenerateJwtSecretKey()
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
defaultConfig := map[string]string{
|
|
ConfigJwtSecretKey: string(secretKey[:]),
|
|
ConfigWelcomeMessage: "Connected to openfsd",
|
|
ConfigFsdServerHostname: "localhost",
|
|
ConfigFsdServerIdent: "OPENFSD",
|
|
ConfigFsdServerLocation: "Earth",
|
|
ConfigApiServerBaseURL: "http://localhost",
|
|
}
|
|
|
|
for k, v := range defaultConfig {
|
|
if err = (*r).SetIfNotExists(k, v); err != nil {
|
|
return
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|