Cleanup - maybe working...

This commit is contained in:
jdl
2026-06-09 20:17:21 +02:00
parent 96e7916721
commit b0ff07aad6
12 changed files with 66 additions and 35 deletions

View File

@@ -5,8 +5,11 @@ import (
"log"
"os"
"path/filepath"
"strings"
"vppn/peer"
"git.crumpington.com/lib/go/flock"
)
func main() {
@@ -14,24 +17,34 @@ func main() {
name := flag.String("name", "", "network name (required)")
hub := flag.String("hub", "", "hub base URL (required)")
apiKey := flag.String("api-key", "", "API key (required)")
flag.Parse()
if *name == "" || *hub == "" || *apiKey == "" {
if *name == "" || *hub == "" {
flag.Usage()
os.Exit(1)
}
// TODO: Acquire flock on lock file.
apiKey, err := loadAPIKey(*name)
if err != nil {
log.Fatalf("api key: %v", err)
}
statePath := networkStatePath(*name)
// Directory existence is guaranteed by the apikey file read above.
lockFile, err := flock.TryLock(vppnPath(*name, "lock"))
if err != nil {
log.Fatalf("lock: %v", err)
}
if lockFile == nil {
log.Fatalf("already running for network %q", *name)
}
defer flock.Unlock(lockFile)
state, err := peer.LoadOrInit(statePath, *hub, *apiKey)
state, err := peer.LoadOrInit(vppnPath(*name, "state.json"), *hub, apiKey)
if err != nil {
log.Fatalf("init: %v", err)
}
app, err := peer.New(state, *hub, *apiKey, *name)
app, err := peer.New(state, *hub, apiKey, *name)
if err != nil {
log.Fatalf("start: %v", err)
}
@@ -41,10 +54,18 @@ func main() {
}
}
func networkStatePath(name string) string {
func loadAPIKey(name string) (string, error) {
data, err := os.ReadFile(vppnPath(name, "apikey"))
if err != nil {
return "", err
}
return strings.TrimSpace(string(data)), nil
}
func vppnPath(name, file string) string {
home, err := os.UserHomeDir()
if err != nil {
return filepath.Join(".vppn", name, "state.json")
return filepath.Join(".vppn", name, file)
}
return filepath.Join(home, ".vppn", name, "state.json")
return filepath.Join(home, ".vppn", name, file)
}