Add skeleton remove-ca command
This commit is contained in:
parent
a475c9e39a
commit
ef3c94f6bc
|
@ -7,6 +7,5 @@ A description of this package.
|
||||||
* `install-ca` command
|
* `install-ca` command
|
||||||
* `remove-ca` command
|
* `remove-ca` command
|
||||||
* Filter for os types
|
* Filter for os types
|
||||||
* Find out why the argument parsing errors are not printed correctly
|
|
||||||
* `--dry-run` option
|
* `--dry-run` option
|
||||||
* `remove` command that removes simulators
|
* `remove` command that removes simulators
|
||||||
|
|
|
@ -31,7 +31,11 @@ struct CommandLineOptions {
|
||||||
private let parser: ArgumentParser
|
private let parser: ArgumentParser
|
||||||
private(set) var subCommand: SubCommand
|
private(set) var subCommand: SubCommand
|
||||||
|
|
||||||
private static let allCommands: [Command] = [ListDevicesCommand(), InstallCACommand()]
|
private static let allCommands: [Command] = [
|
||||||
|
ListDevicesCommand(),
|
||||||
|
InstallCACommand(),
|
||||||
|
RemoveCACommand()
|
||||||
|
]
|
||||||
|
|
||||||
static func parse(commandName: String, arguments: [String]) throws -> CommandLineOptions {
|
static func parse(commandName: String, arguments: [String]) throws -> CommandLineOptions {
|
||||||
let parser = ArgumentParser(
|
let parser = ArgumentParser(
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
//
|
||||||
|
// Copyright © 2019 Simon Kågedal Reimer. See LICENSE.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import SPMUtility
|
||||||
|
|
||||||
|
class RemoveCACommand: Command {
|
||||||
|
private struct Options {
|
||||||
|
var dryRun: Bool = false
|
||||||
|
}
|
||||||
|
let name = "remove-ca"
|
||||||
|
let overview = "Remove all Certificate Authorities from specified devices"
|
||||||
|
|
||||||
|
private let binder = ArgumentBinder<Options>()
|
||||||
|
private var options = Options()
|
||||||
|
|
||||||
|
private let filteringBinder = ArgumentBinder<FilteringOptions>()
|
||||||
|
private var filteringOptions = FilteringOptions()
|
||||||
|
|
||||||
|
func addOptions(to parser: ArgumentParser) {
|
||||||
|
binder.bind(option: parser.add(
|
||||||
|
option: "--dry-run",
|
||||||
|
kind: Bool.self,
|
||||||
|
usage: "Don't actually remove any CA:s"
|
||||||
|
), to: { options, dryRun in
|
||||||
|
options.dryRun = dryRun
|
||||||
|
})
|
||||||
|
|
||||||
|
filteringBinder.bind(to: &filteringOptions, parser: parser)
|
||||||
|
}
|
||||||
|
|
||||||
|
func fillParseResult(_ parseResult: ArgumentParser.Result) throws {
|
||||||
|
try binder.fill(parseResult: parseResult, into: &options)
|
||||||
|
try filteringBinder.fill(parseResult: parseResult, into: &filteringOptions)
|
||||||
|
}
|
||||||
|
|
||||||
|
func run() throws {
|
||||||
|
print(filteringOptions)
|
||||||
|
for device in try Simctl.flatListDevices().filter(using: filteringOptions) {
|
||||||
|
let trustStore = TrustStore(uuid: device.udid)
|
||||||
|
if trustStore.exists {
|
||||||
|
try removeCertificates(in: trustStore, deviceName: device.name, dry: options.dryRun)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private func removeCertificates(in trustStore: TrustStore, deviceName: String, dry: Bool) throws {
|
||||||
|
for row in try trustStore.open().rows() {
|
||||||
|
let certificate = try row.validatedCertificate()
|
||||||
|
let name = certificate.subjectSummary ?? "<unknown certificate>"
|
||||||
|
if dry {
|
||||||
|
print(" - Would remove certificate \(name) from \(deviceName)")
|
||||||
|
} else {
|
||||||
|
print(" - REMOVING certificate \(name) from \(deviceName)")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue