75 lines
2.1 KiB
Swift
75 lines
2.1 KiB
Swift
import ArgumentParser
|
|
import CliClient
|
|
import CustomDump
|
|
import Dependencies
|
|
import DotEnv
|
|
import Foundation
|
|
import Logging
|
|
import Models
|
|
|
|
extension Application {
|
|
|
|
struct Debug: AsyncParsableCommand {
|
|
|
|
static let configuration: CommandConfiguration = .init(
|
|
commandName: "debug",
|
|
abstract: "Debug the environment variables and command line arguments."
|
|
)
|
|
|
|
@OptionGroup
|
|
var options: SharedOptions
|
|
|
|
@Flag(
|
|
name: [.customLong("show-password")],
|
|
help: "Don't redact the password from the console."
|
|
)
|
|
var showPassword: Bool = false
|
|
|
|
mutating func run() async throws {
|
|
@Dependency(\.cliClient) var client
|
|
let logger = Logger(label: "debug-command")
|
|
|
|
print("--------------------------")
|
|
print("Running debug command...")
|
|
if let envFile = options.envFile {
|
|
print("Reading env file: \(envFile)")
|
|
print("--------------------------")
|
|
} else {
|
|
print("No env file set.")
|
|
print("--------------------------")
|
|
}
|
|
|
|
print("Loading EnvVars")
|
|
print("--------------------------")
|
|
let envVars = try await client.makeEnvVars(options.envVarsRequest(logger: logger))
|
|
printEnvVars(envVars: envVars, showPassword: showPassword)
|
|
print("--------------------------")
|
|
|
|
if let logLevel = options.logLevel {
|
|
print("Log Level option: \(logLevel)")
|
|
print("--------------------------")
|
|
} else {
|
|
print("Log Level option: nil")
|
|
print("--------------------------")
|
|
}
|
|
}
|
|
|
|
private func printEnvVars(envVars: EnvVars, showPassword: Bool) {
|
|
// show the proper password to show depending on if it exists
|
|
// and if we should redact it or not.
|
|
var passwordString: String?
|
|
switch (showPassword, envVars.password) {
|
|
case (true, .none), (_, .none):
|
|
break
|
|
case (true, let .some(password)):
|
|
passwordString = password
|
|
case (false, .some):
|
|
passwordString = "<redacted>"
|
|
}
|
|
var envVars = envVars
|
|
envVars.password = passwordString
|
|
customDump(envVars)
|
|
}
|
|
}
|
|
}
|