From f18a023bb7c158f3577be0dec7fe9464618a4f84 Mon Sep 17 00:00:00 2001 From: Randall Winkhart Date: Thu, 16 May 2024 17:14:42 -0400 Subject: [PATCH] Implement device ID server registration and server-side init --- libmuttonserver.go | 9 +++++++++ src/cli/init.go | 14 ++++++++------ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/libmuttonserver.go b/libmuttonserver.go index 88b93c8..344212c 100644 --- a/libmuttonserver.go +++ b/libmuttonserver.go @@ -17,11 +17,20 @@ func main() { switch args[1] { case "fetch": + // print all information needed for syncing to stdout for interpretation by the client sync.GetRemoteDataFromServer() case "shear": + // shear an entry from the server and add it to the deletions directory deviceIDTargetLocation := strings.Split(args[2], "\x1d") targetLocationIncomplete := strings.ReplaceAll(strings.ReplaceAll(deviceIDTargetLocation[1], "\x1f", " "), "\x1e", backend.PathSeparator) sync.Shear(targetLocationIncomplete, deviceIDTargetLocation[0]) + case "register": + // register a new device ID + os.Create(backend.ConfigDir + backend.PathSeparator + "devices" + backend.PathSeparator + args[2]) + case "init": + // create the necessary directories for libmuttonserver to function TODO consider clearing out old directories first + backend.DirInit() + os.MkdirAll(backend.ConfigDir+backend.PathSeparator+"deletions", 0700) default: fmt.Println(backend.AnsiError + "Invalid argument" + backend.AnsiReset) // TODO add server help menu } diff --git a/src/cli/init.go b/src/cli/init.go index e1bdde4..3477689 100644 --- a/src/cli/init.go +++ b/src/cli/init.go @@ -3,6 +3,7 @@ package cli import ( "fmt" "github.com/rwinkhart/MUTN/src/backend" + "github.com/rwinkhart/MUTN/src/sync" "math/rand" "os" ) @@ -30,12 +31,6 @@ func TempInitCli() { // SSH info configSSH := inputBinary("Configure SSH settings (for synchronization)?") if configSSH { - // client device ID - deviceIDPrefix, _ := os.Hostname() - deviceIDSuffix := backend.StringGen(rand.Intn(48)+48, true, 0.2) - deviceID := deviceIDPrefix + "-" + deviceIDSuffix - os.Create(backend.ConfigDir + backend.PathSeparator + "devices" + backend.PathSeparator + deviceID) // TODO remove existing device ID file if it exists, copy device ID to server - // necessary SSH info sshUser := input("Remote SSH username:") sshIP := input("Remote SSH IP address:") @@ -44,6 +39,13 @@ func TempInitCli() { // write config file backend.TempInit(map[string]string{"textEditor": textEditor, "gpgID": gpgID, "sshUser": sshUser, "sshIP": sshIP, "sshPort": sshPort, "sshIdentity": sshIdentity}) + + // client device ID (perform after writing config files, as sync.GetSSHOutput must be able to read it) TODO move to backend + deviceIDPrefix, _ := os.Hostname() + deviceIDSuffix := backend.StringGen(rand.Intn(48)+48, false, 0) // TODO consider using complex string generator and removing unsafe characters manually + deviceID := deviceIDPrefix + "-" + deviceIDSuffix + os.Create(backend.ConfigDir + backend.PathSeparator + "devices" + backend.PathSeparator + deviceID) // TODO remove existing device ID file if it exists (from both client and server) + sync.GetSSHOutput("libmuttonserver register "+deviceID, false) // register device ID with server } else { // write config file backend.TempInit(map[string]string{"textEditor": textEditor, "gpgID": gpgID})