From bd34c2b25595e0c600ea6632a98af024eb339731 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Fri, 13 May 2022 00:24:54 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=91=8C=20Improved=20nginx=20file=20parsin?= =?UTF-8?q?g?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 4 ++-- .../Parsers/NginxConfigurationTest.swift | 16 ++++++++-------- .../Nginx/NginxConfiguration.swift | 19 +++++++++++++++---- .../ProxyScanner/ValetProxyScanner.swift | 8 ++------ .../Integrations/Valet/Sites/ValetSite.swift | 4 ++-- 5 files changed, 29 insertions(+), 22 deletions(-) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index a5073a5..0935573 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -1520,7 +1520,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 785; + CURRENT_PROJECT_VERSION = 786; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; @@ -1546,7 +1546,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 785; + CURRENT_PROJECT_VERSION = 786; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; diff --git a/phpmon-tests/Parsers/NginxConfigurationTest.swift b/phpmon-tests/Parsers/NginxConfigurationTest.swift index a189e50..15a73af 100644 --- a/phpmon-tests/Parsers/NginxConfigurationTest.swift +++ b/phpmon-tests/Parsers/NginxConfigurationTest.swift @@ -37,43 +37,43 @@ class NginxConfigurationTest: XCTestCase { func testCanDetermineSiteNameAndTld() throws { XCTAssertEqual( "nginx-site", - NginxConfiguration(filePath: NginxConfigurationTest.regularUrl.path).domain + NginxConfiguration.from(filePath: NginxConfigurationTest.regularUrl.path)?.domain ) XCTAssertEqual( "test", - NginxConfiguration(filePath: NginxConfigurationTest.regularUrl.path).tld + NginxConfiguration.from(filePath: NginxConfigurationTest.regularUrl.path)?.tld ) } func testCanDetermineIsolation() throws { XCTAssertNil( - NginxConfiguration(filePath: NginxConfigurationTest.regularUrl.path).isolatedVersion + NginxConfiguration.from(filePath: NginxConfigurationTest.regularUrl.path)?.isolatedVersion ) XCTAssertEqual( "8.1", - NginxConfiguration(filePath: NginxConfigurationTest.isolatedUrl.path).isolatedVersion + NginxConfiguration.from(filePath: NginxConfigurationTest.isolatedUrl.path)?.isolatedVersion ) } func testCanDetermineProxy() throws { - let proxied = NginxConfiguration(filePath: NginxConfigurationTest.proxyUrl.path) + let proxied = NginxConfiguration.from(filePath: NginxConfigurationTest.proxyUrl.path)! XCTAssertTrue(proxied.contents.contains("# valet stub: proxy.valet.conf")) XCTAssertEqual("http://127.0.0.1:90", proxied.proxy) - let normal = NginxConfiguration(filePath: NginxConfigurationTest.regularUrl.path) + let normal = NginxConfiguration.from(filePath: NginxConfigurationTest.regularUrl.path)! XCTAssertFalse(normal.contents.contains("# valet stub: proxy.valet.conf")) XCTAssertEqual(nil, normal.proxy) } func testCanDetermineSecuredProxy() throws { - let proxied = NginxConfiguration(filePath: NginxConfigurationTest.secureProxyUrl.path) + let proxied = NginxConfiguration.from(filePath: NginxConfigurationTest.secureProxyUrl.path)! XCTAssertTrue(proxied.contents.contains("# valet stub: secure.proxy.valet.conf")) XCTAssertEqual("http://127.0.0.1:90", proxied.proxy) } func testCanDetermineProxyWithCustomTld() throws { - let proxied = NginxConfiguration(filePath: NginxConfigurationTest.customTldProxyUrl.path) + let proxied = NginxConfiguration.from(filePath: NginxConfigurationTest.customTldProxyUrl.path)! XCTAssertTrue(proxied.contents.contains("# valet stub: secure.proxy.valet.conf")) XCTAssertEqual("http://localhost:8080", proxied.proxy) } diff --git a/phpmon/Domain/Integrations/Nginx/NginxConfiguration.swift b/phpmon/Domain/Integrations/Nginx/NginxConfiguration.swift index a02b723..e27270b 100644 --- a/phpmon/Domain/Integrations/Nginx/NginxConfiguration.swift +++ b/phpmon/Domain/Integrations/Nginx/NginxConfiguration.swift @@ -19,19 +19,30 @@ class NginxConfiguration { /** The TLD of the domain, usually derived from the name of the file. */ var tld: String - init(filePath: String) { + static func from(filePath: String) -> NginxConfiguration? { let path = filePath.replacingOccurrences( of: "~", with: "/Users/\(Paths.whoami)" ) - self.contents = try! String(contentsOfFile: path) + do { + let fileContents = try String(contentsOfFile: path) + return NginxConfiguration.init( + path: path, + contents: fileContents + ) + } catch { + Log.warn("Could not read the nginx configuration file at: `\(filePath)`") + return nil + } + } + init(path: String, contents: String) { let domain = String(path.split(separator: "/").last!) let tld = String(domain.split(separator: ".").last!) - self.domain = domain - .replacingOccurrences(of: ".\(tld)", with: "") + self.contents = contents + self.domain = domain.replacingOccurrences(of: ".\(tld)", with: "") self.tld = tld } diff --git a/phpmon/Domain/Integrations/Valet/Proxies/ProxyScanner/ValetProxyScanner.swift b/phpmon/Domain/Integrations/Valet/Proxies/ProxyScanner/ValetProxyScanner.swift index 4db47b1..1941822 100644 --- a/phpmon/Domain/Integrations/Valet/Proxies/ProxyScanner/ValetProxyScanner.swift +++ b/phpmon/Domain/Integrations/Valet/Proxies/ProxyScanner/ValetProxyScanner.swift @@ -13,12 +13,8 @@ class ValetProxyScanner: ProxyScanner { return try! FileManager .default .contentsOfDirectory(atPath: directoryPath) - .filter { - // Skip .DS_Store files - return $0 != ".DS_Store" - } - .map { - return NginxConfiguration.init(filePath: "\(directoryPath)/\($0)") + .compactMap { + return NginxConfiguration.from(filePath: "\(directoryPath)/\($0)") } .filter { return $0.proxy != nil diff --git a/phpmon/Domain/Integrations/Valet/Sites/ValetSite.swift b/phpmon/Domain/Integrations/Valet/Sites/ValetSite.swift index c3883bc..951ae04 100644 --- a/phpmon/Domain/Integrations/Valet/Sites/ValetSite.swift +++ b/phpmon/Domain/Integrations/Valet/Sites/ValetSite.swift @@ -226,8 +226,8 @@ class ValetSite: DomainListable { public static func isolatedVersion(_ filePath: String) -> String? { if Filesystem.fileExists(filePath) { return NginxConfiguration - .init(filePath: filePath) - .isolatedVersion + .from(filePath: filePath)? + .isolatedVersion ?? nil } return nil