Add method to parse configuration from [String]
With an optional original URL. Helps testing. Take the chance to also disambiguate method overloads.
This commit is contained in:
parent
0b04f2bb51
commit
c1065751b6
|
@ -91,7 +91,7 @@ class IssueReporter: NSObject {
|
||||||
}
|
}
|
||||||
if let url = configurationURL {
|
if let url = configurationURL {
|
||||||
do {
|
do {
|
||||||
let parsedFile = try TunnelKitProvider.Configuration.parsed(from: url, returnsStripped: true)
|
let parsedFile = try TunnelKitProvider.Configuration.parsed(fromURL: url, returnsStripped: true)
|
||||||
if let attachment = parsedFile.strippedLines?.joined(separator: "\n").data(using: .utf8) {
|
if let attachment = parsedFile.strippedLines?.joined(separator: "\n").data(using: .utf8) {
|
||||||
vc.addAttachmentData(attachment, mimeType: AppConstants.IssueReporter.MIME.configuration, fileName: AppConstants.IssueReporter.Filenames.configuration)
|
vc.addAttachmentData(attachment, mimeType: AppConstants.IssueReporter.MIME.configuration, fileName: AppConstants.IssueReporter.Filenames.configuration)
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,7 @@ extension ParsedFile {
|
||||||
let file: ParsedFile
|
let file: ParsedFile
|
||||||
log.debug("Parsing configuration URL: \(url)")
|
log.debug("Parsing configuration URL: \(url)")
|
||||||
do {
|
do {
|
||||||
file = try TunnelKitProvider.Configuration.parsed(from: url)
|
file = try TunnelKitProvider.Configuration.parsed(fromURL: url)
|
||||||
} catch let e {
|
} catch let e {
|
||||||
let message = localizedMessage(forError: e)
|
let message = localizedMessage(forError: e)
|
||||||
alertImportError(url: url, in: viewController, withMessage: message)
|
alertImportError(url: url, in: viewController, withMessage: message)
|
||||||
|
|
|
@ -123,7 +123,7 @@ class ConfigurationViewController: UIViewController, TableModelHost {
|
||||||
}
|
}
|
||||||
let parsedFile: ParsedFile
|
let parsedFile: ParsedFile
|
||||||
do {
|
do {
|
||||||
parsedFile = try TunnelKitProvider.Configuration.parsed(from: originalURL)
|
parsedFile = try TunnelKitProvider.Configuration.parsed(fromURL: originalURL)
|
||||||
} catch let e {
|
} catch let e {
|
||||||
log.error("Could not parse original configuration: \(e)")
|
log.error("Could not parse original configuration: \(e)")
|
||||||
return
|
return
|
||||||
|
|
|
@ -88,7 +88,7 @@ class WizardHostViewController: UITableViewController, TableModelHost {
|
||||||
// MARK: Actions
|
// MARK: Actions
|
||||||
|
|
||||||
private func useSuggestedTitle() {
|
private func useSuggestedTitle() {
|
||||||
cellTitle?.field.text = parsedFile?.url.normalizedFilename
|
cellTitle?.field.text = parsedFile?.url?.normalizedFilename
|
||||||
}
|
}
|
||||||
|
|
||||||
@IBAction private func next() {
|
@IBAction private func next() {
|
||||||
|
|
|
@ -30,7 +30,7 @@ import SwiftyBeaver
|
||||||
private let log = SwiftyBeaver.self
|
private let log = SwiftyBeaver.self
|
||||||
|
|
||||||
struct ParsedFile {
|
struct ParsedFile {
|
||||||
let url: URL
|
let url: URL?
|
||||||
|
|
||||||
let hostname: String
|
let hostname: String
|
||||||
|
|
||||||
|
@ -77,8 +77,12 @@ extension TunnelKitProvider.Configuration {
|
||||||
static let externalFiles = Utils.regex("^(ca|cert|key|tls-auth|tls-crypt) ")
|
static let externalFiles = Utils.regex("^(ca|cert|key|tls-auth|tls-crypt) ")
|
||||||
}
|
}
|
||||||
|
|
||||||
static func parsed(from url: URL, returnsStripped: Bool = false) throws -> ParsedFile {
|
static func parsed(fromURL url: URL, returnsStripped: Bool = false) throws -> ParsedFile {
|
||||||
let lines = try String(contentsOf: url).trimmedLines()
|
let lines = try String(contentsOf: url).trimmedLines()
|
||||||
|
return try parsed(fromLines: lines, originalURL: url, returnsStripped: returnsStripped)
|
||||||
|
}
|
||||||
|
|
||||||
|
static func parsed(fromLines lines: [String], originalURL: URL? = nil, returnsStripped: Bool = false) throws -> ParsedFile {
|
||||||
var strippedLines: [String]? = returnsStripped ? [] : nil
|
var strippedLines: [String]? = returnsStripped ? [] : nil
|
||||||
var warning: ApplicationError? = nil
|
var warning: ApplicationError? = nil
|
||||||
|
|
||||||
|
@ -343,7 +347,7 @@ extension TunnelKitProvider.Configuration {
|
||||||
builder.endpointProtocols = endpointProtocols
|
builder.endpointProtocols = endpointProtocols
|
||||||
|
|
||||||
return ParsedFile(
|
return ParsedFile(
|
||||||
url: url,
|
url: originalURL,
|
||||||
hostname: hostname,
|
hostname: hostname,
|
||||||
configuration: builder.build(),
|
configuration: builder.build(),
|
||||||
strippedLines: strippedLines,
|
strippedLines: strippedLines,
|
||||||
|
|
|
@ -39,7 +39,7 @@ class FileConfigurationTests: XCTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
func testPIA() throws {
|
func testPIA() throws {
|
||||||
let file = try TunnelKitProvider.Configuration.parsed(from: url(withName: "pia-hungary"))
|
let file = try TunnelKitProvider.Configuration.parsed(fromURL: url(withName: "pia-hungary"))
|
||||||
XCTAssertEqual(file.hostname, "hungary.privateinternetaccess.com")
|
XCTAssertEqual(file.hostname, "hungary.privateinternetaccess.com")
|
||||||
XCTAssertEqual(file.configuration.sessionConfiguration.cipher, .aes128cbc)
|
XCTAssertEqual(file.configuration.sessionConfiguration.cipher, .aes128cbc)
|
||||||
XCTAssertEqual(file.configuration.sessionConfiguration.digest, .sha1)
|
XCTAssertEqual(file.configuration.sessionConfiguration.digest, .sha1)
|
||||||
|
@ -50,7 +50,7 @@ class FileConfigurationTests: XCTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
func testStripped() throws {
|
func testStripped() throws {
|
||||||
let lines = try TunnelKitProvider.Configuration.parsed(from: url(withName: "pia-hungary"), returnsStripped: true).strippedLines!
|
let lines = try TunnelKitProvider.Configuration.parsed(fromURL: url(withName: "pia-hungary"), returnsStripped: true).strippedLines!
|
||||||
let stripped = lines.joined(separator: "\n")
|
let stripped = lines.joined(separator: "\n")
|
||||||
print(stripped)
|
print(stripped)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue