From dc262c87e8a664f644be51d9215808b2eb84cd66 Mon Sep 17 00:00:00 2001 From: Randall Winkhart Date: Sun, 13 Apr 2025 17:55:57 -0400 Subject: [PATCH] Implement serving passphrase from daemon --- daemon/2server.go | 9 +++------ daemon/2serverUNIXGeneric.go | 10 +++++++++- daemon/2serverWindows.go | 10 +++++++++- daemon/3client.go | 12 ++++++++++++ example.go | 9 ++------- 5 files changed, 35 insertions(+), 15 deletions(-) create mode 100644 daemon/3client.go diff --git a/daemon/2server.go b/daemon/2server.go index dd7b077..aefdd02 100644 --- a/daemon/2server.go +++ b/daemon/2server.go @@ -2,12 +2,12 @@ package daemon import ( "crypto/sha256" - "errors" "io" "os" ) var daemonHash []byte +var passphrase string // RCWService provides an RPC method. type RCWService struct{} @@ -15,11 +15,8 @@ type RCWService struct{} // GetPass is the RPC method. // For now (as a test/example), it returns "hello" if the input is "hi". func (h *RCWService) GetPass(request string, reply *string) error { - if request == "hi" { - *reply = "hello" - return nil - } - return errors.New("unexpected input, expected \"hi\"") + *reply = passphrase + return nil } // getFileHash returns the SHA256 hash of the file at the given path. diff --git a/daemon/2serverUNIXGeneric.go b/daemon/2serverUNIXGeneric.go index b1b433d..bfcd814 100644 --- a/daemon/2serverUNIXGeneric.go +++ b/daemon/2serverUNIXGeneric.go @@ -15,7 +15,15 @@ import ( ) // Run should be called to start an RPC server. -func Run() { +func Start(inputPassphrase string) { + // ensure daemon is not already running + if daemonIsOpen() { + return + } + + // store passphrase to be referenced by GetPass method + passphrase = inputPassphrase + // register RCWService with the RPC package if err := rpc.Register(&RCWService{}); err != nil { log.Fatalf("Error registering RPC service: %v", err) diff --git a/daemon/2serverWindows.go b/daemon/2serverWindows.go index 7df12e8..dcb1800 100644 --- a/daemon/2serverWindows.go +++ b/daemon/2serverWindows.go @@ -20,7 +20,15 @@ const ( ) // Run should be called to start an RPC server using Windows named pipes -func Run() { +func Start(inputPassphrase string) { + // ensure daemon is not already running + if daemonIsOpen() { + return + } + + // store passphrase to be referenced by GetPass method + passphrase = inputPassphrase + // register RCWService with the RPC package if err := rpc.Register(&RCWService{}); err != nil { log.Fatalf("Error registering RPC service: %v", err) diff --git a/daemon/3client.go b/daemon/3client.go new file mode 100644 index 0000000..6701e03 --- /dev/null +++ b/daemon/3client.go @@ -0,0 +1,12 @@ +package daemon + +import "os" + +func daemonIsOpen() bool { + // check if socketPath exists and is a file + fileInfo, err := os.Stat(socketPath) + if err != nil { + return false + } + return !fileInfo.IsDir() +} diff --git a/example.go b/example.go index 5c5c2e0..8b01558 100644 --- a/example.go +++ b/example.go @@ -8,13 +8,8 @@ import ( func main() { if len(os.Args) > 1 { - switch os.Args[1] { - case "client": - fmt.Println("RPC Reply: " + daemon.Call()) - default: - daemon.Run() - } + daemon.Start(os.Args[1]) } else { - daemon.Run() + fmt.Println(daemon.Call()) } }