feat: Integrates vault-client into hpa-executable.

This commit is contained in:
2024-12-16 10:57:14 -05:00
parent da810d0a45
commit 1302b15ee2
4 changed files with 44 additions and 25 deletions

View File

@@ -31,6 +31,7 @@ let package = Package(
"ConfigurationClient",
"FileClient",
"PlaybookClient",
"VaultClient",
.product(name: "ArgumentParser", package: "swift-argument-parser"),
.product(name: "CliDoc", package: "swift-cli-doc"),
.product(name: "Dependencies", package: "swift-dependencies"),

View File

@@ -1,6 +1,7 @@
import ArgumentParser
import CliClient
import Dependencies
import VaultClient
struct DecryptCommand: AsyncParsableCommand {
@@ -11,25 +12,21 @@ struct DecryptCommand: AsyncParsableCommand {
abstract: createAbstract("Decrypt a vault file.")
)
@OptionGroup var options: VaultOptions
@Option(
name: .shortAndLong,
help: "Output file."
)
var output: String?
@OptionGroup var options: VaultOptions
mutating func run() async throws {
@Dependency(\.cliClient) var cliClient
@Dependency(\.vaultClient) var vaultClient
var args = ["decrypt"]
if let output {
args.append(contentsOf: ["--output", output])
}
try await cliClient.runVaultCommand(
options.vaultOptions(arguments: args, configuration: nil),
logging: options.loggingOptions(commandName: Self.commandName)
)
try await vaultClient.run(options.runOptions(
commandName: Self.commandName,
route: .decrypt,
outputFilePath: output
))
}
}

View File

@@ -1,6 +1,7 @@
import ArgumentParser
import CliClient
import Dependencies
import VaultClient
struct EncryptCommand: AsyncParsableCommand {
@@ -11,24 +12,21 @@ struct EncryptCommand: AsyncParsableCommand {
abstract: createAbstract("Encrypt a vault file.")
)
@OptionGroup var options: VaultOptions
@Option(
name: .shortAndLong,
help: "Output file."
)
var output: String?
mutating func run() async throws {
@Dependency(\.cliClient) var cliClient
@OptionGroup var options: VaultOptions
var args = ["encrypt"]
if let output {
args.append(contentsOf: ["--output", output])
}
try await cliClient.runVaultCommand(
options.vaultOptions(arguments: args, configuration: nil),
logging: options.loggingOptions(commandName: Self.commandName)
)
mutating func run() async throws {
@Dependency(\.vaultClient) var vaultClient
try await vaultClient.run(options.runOptions(
commandName: Self.commandName,
route: .encrypt,
outputFilePath: output
))
}
}

View File

@@ -1,5 +1,6 @@
import ArgumentParser
import CliClient
import VaultClient
// Holds the common options for vault commands, as they all share the
// same structure.
@@ -18,7 +19,7 @@ struct VaultOptions: ParsableArguments {
@Argument(
help: "Extra arguments to pass to the vault command."
)
var extraArgs: [String] = []
var extraOptions: [String] = []
subscript<T>(dynamicMember keyPath: WritableKeyPath<BasicGlobalOptions, T>) -> T {
get { globals[keyPath: keyPath] }
@@ -36,3 +37,25 @@ extension VaultOptions {
globals.loggingOptions(commandName: commandName)
}
}
extension VaultOptions {
func runOptions(
commandName: String,
route: VaultClient.RunOptions.Route,
outputFilePath: String? = nil
) -> VaultClient.RunOptions {
.init(
route,
extraOptions: extraOptions,
loggingOptions: .init(
commandName: commandName,
logLevel: .init(globals: globals, quietOnlyPlaybook: false)
),
outputFilePath: outputFilePath,
quiet: globals.quiet,
shell: globals.shell,
vaultFilePath: file
)
}
}