Brian Picciano
8c3e6a2845
In a world where the daemon can manage more than one network, the Daemon is really responsible only for knowing which networks are currently joined, creating/joining/leaving networks, and routing incoming RPC requests to the correct network handler as needed. The new network package, with its Network interface, inherits most of the logic that Daemon used to have, leaving Daemon only the parts needed for the functionality just described. There's a lot of cleanup done here in order to really nail down the separation of concerns between the two, especially around directory creation.
59 lines
1.3 KiB
Go
59 lines
1.3 KiB
Go
package daecommon
|
|
|
|
import (
|
|
"isle/toolkit"
|
|
"os"
|
|
"path/filepath"
|
|
"sync"
|
|
|
|
"github.com/adrg/xdg"
|
|
)
|
|
|
|
// EnvVars are variables which are derived based on the environment which the
|
|
// process is running in.
|
|
type EnvVars struct {
|
|
StateDir toolkit.Dir
|
|
RuntimeDir toolkit.Dir
|
|
}
|
|
|
|
// GetEnvVars will return the EnvVars of the current processes, as determined by
|
|
// the process's environment.
|
|
var GetEnvVars = sync.OnceValue(func() EnvVars {
|
|
// RUNTIME_DIRECTORY/STATE_DIRECTORY are used by the systemd service in
|
|
// conjunction with the RuntimeDirectory/StateDirectory directives.
|
|
|
|
var (
|
|
res EnvVars
|
|
|
|
stateDirPath = envOr(
|
|
"STATE_DIRECTORY",
|
|
func() string { return filepath.Join(xdg.StateHome, "isle") },
|
|
)
|
|
|
|
runtimeDirPath = envOr(
|
|
"RUNTIME_DIRECTORY",
|
|
func() string { return filepath.Join(xdg.RuntimeDir, "isle") },
|
|
)
|
|
)
|
|
|
|
h := new(toolkit.MkDirHelper)
|
|
res.StateDir, _ = h.Maybe(toolkit.MkDir(stateDirPath, true))
|
|
res.RuntimeDir, _ = h.Maybe(toolkit.MkDir(runtimeDirPath, true))
|
|
|
|
if err := h.Err(); err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return res
|
|
})
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Jigs
|
|
|
|
func envOr(name string, fallback func() string) string {
|
|
if v := os.Getenv(name); v != "" {
|
|
return v
|
|
}
|
|
return fallback()
|
|
}
|