~ knotless Search/
↑↓ move↵ open⇧↵ all results
0
0
main
52 lines · 1.5 KB Raw History
package vaultmain

import (
	"cmp"
	"fmt"
	"path/filepath"
	"strings"

	"github.com/johnandersen777/socialweb-computer-kcp/internal/hostprocess"
	"github.com/johnandersen777/socialweb-computer-kcp/internal/vaultlayout"
)

const (
	envStateDir      = "SOCIALWEB_STATE_DIR"
	envKCPKubeconfig = "SOCIALWEB_KCP_KUBECONFIG"
	envKCPRootDir    = "SOCIALWEB_KCP_ROOT"
	envWorkspace     = "SOCIALWEB_ROOTVAULT_WORKSPACE"
	envServer        = "SOCIALWEB_ROOTVAULT_SERVER"
	envTLSCert       = "SOCIALWEB_TLS_CERT_FILE"
	envTLSKey        = "SOCIALWEB_TLS_KEY_FILE"
)

type Config struct {
	KCPKubeconfig string
	KCPRootDir    string
	Workspace     string
	Server        string

	TLSCert string
	TLSKey  string
}

func load(get func(string) string) (Config, error) {
	cfg := Config{
		KCPKubeconfig: strings.TrimSpace(get(envKCPKubeconfig)),
		KCPRootDir:    strings.TrimSpace(get(envKCPRootDir)),
		Workspace:     strings.TrimSpace(get(envWorkspace)),
		Server:        strings.TrimSpace(get(envServer)),
		TLSCert:       strings.TrimSpace(get(envTLSCert)),
		TLSKey:        strings.TrimSpace(get(envTLSKey)),
	}
	if cfg.KCPKubeconfig == "" {
		state := strings.TrimSpace(get(envStateDir))
		if state == "" {
			return Config{}, fmt.Errorf("neither %s nor %s is set: the root vault is an OpenBaoServer in kcp, read through the kcp front", envKCPKubeconfig, envStateDir)
		}
		cfg.KCPKubeconfig = filepath.Join(state, "kcp", "admin.kubeconfig")
	}
	cfg.Workspace = cmp.Or(cfg.Workspace, hostprocess.DefaultWorkspace)
	cfg.Server = cmp.Or(cfg.Server, vaultlayout.RootServerName)
	return cfg, nil
}