diff --git a/Package.swift b/Package.swift index 716de82..8347ac5 100644 --- a/Package.swift +++ b/Package.swift @@ -6,7 +6,7 @@ import PackageDescription let package = Package( name: "swift-ejson", platforms: [ - .macOS(.v10_15), + .macOS(.v11), .iOS(.v13), .tvOS(.v13), .watchOS(.v6) diff --git a/Sources/ejson/main.swift b/Sources/ejson/main.swift index a8cca75..9eacda2 100644 --- a/Sources/ejson/main.swift +++ b/Sources/ejson/main.swift @@ -148,6 +148,7 @@ func encryptCommand(args: [String]) { func decryptCommand(args: [String]) { var keyDir = getKeyDir() var file: String? + var keyFromStdin = false var i = 0 // Parse options @@ -160,6 +161,9 @@ func decryptCommand(args: [String]) { } keyDir = args[i] i += 1 + } else if arg == "--key-from-stdin" { + keyFromStdin = true + i += 1 } else if file == nil { file = arg i += 1 @@ -179,7 +183,17 @@ func decryptCommand(args: [String]) { let publicKey = try ejson.extractPublicKey(from: filePath) // Load private key - let privateKey = try loadPrivateKey(publicKey: publicKey, keyDir: keyDir) + let privateKey: String + if keyFromStdin { + // Read private key from stdin + guard let stdinData = try? FileHandle.standardInput.readToEnd(), + let stdinString = String(data: stdinData, encoding: .utf8) else { + exitWithError("Failed to read private key from stdin") + } + privateKey = stdinString.trimmingCharacters(in: .whitespacesAndNewlines) + } else { + privateKey = try loadPrivateKey(publicKey: publicKey, keyDir: keyDir) + } // Decrypt the file let decrypted = try ejson.decryptFile(at: filePath, privateKey: privateKey) @@ -211,12 +225,16 @@ func printUsage() { Keygen Options: -w Write private key to keydir and print only public key + Decrypt Options: + --key-from-stdin Read private key from stdin instead of keydir + Examples: ejson keygen ejson keygen -w ejson encrypt secrets.ejson ejson decrypt secrets.ejson ejson -keydir ~/.ejson/keys decrypt secrets.ejson + echo "your_private_key" | ejson decrypt --key-from-stdin secrets.ejson """) }