From 8dc5890cda1c15adb6f6dd44a0438f3b52e82002 Mon Sep 17 00:00:00 2001 From: Marcus Rohrmoser Date: Fri, 4 Mar 2022 09:40:30 +0100 Subject: [PATCH] be forgiving if Shaarli returns urls with ' ', replace them with '+' retroactively Resolves https://github.com/mro/ShaarliOS/issues/61 Thank you https://github.com/sounds2k --- swift4/ShaarliOS/ShaarliHtmlClient.swift | 8 +++++- swift4/ShaarliOSTests/ShaarliHtmlClientTest.swift | 30 +++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/swift4/ShaarliOS/ShaarliHtmlClient.swift b/swift4/ShaarliOS/ShaarliHtmlClient.swift index 4337d00..81e6adf 100644 --- a/swift4/ShaarliOS/ShaarliHtmlClient.swift +++ b/swift4/ShaarliOS/ShaarliHtmlClient.swift @@ -164,6 +164,12 @@ private let KEY_FORM_PRIDE = "privateLinkByDefault" private let KEY_FORM_CONT = "continent" private let KEY_FORM_CITY = "city" +// Some (all?) shaarlis return post urls in linkform lf_url +// containg a blank – which isn't allowed for urls. +func issue61(_ s : String?) -> URL { + URL(string:s?.replacingOccurrences(of:" ", with:"+") ?? "") ?? URLEmpty +} + // unreserved https://www.ietf.org/rfc/rfc3986.txt private let rfc3986_unreserved = [ "abcdefghijklmnopqrstuvwxyz", @@ -455,7 +461,7 @@ class ShaarliHtmlClient { ses, action, lifo, - URL(string:lifo[LF_URL] ?? "") ?? URLEmpty, + issue61(lifo[LF_URL]), lifo[LF_TIT] ?? "", lifo[LF_DSC] ?? "", tagsSplit(lifo[LF_TGS]), diff --git a/swift4/ShaarliOSTests/ShaarliHtmlClientTest.swift b/swift4/ShaarliOSTests/ShaarliHtmlClientTest.swift index b1102f9..70f0d42 100644 --- a/swift4/ShaarliOSTests/ShaarliHtmlClientTest.swift +++ b/swift4/ShaarliOSTests/ShaarliHtmlClientTest.swift @@ -60,6 +60,11 @@ class ShaarliHtmlClientTest: XCTestCase { XCTAssertNil(url1.scheme) } + func testIssue61() { + let ur = issue61("http://example.com?a=b c") + XCTAssertEqual("http://example.com?a=b+c", ur.absoluteString) + } + func testUrlCredential() { let cre = URLCredential(user:"", password:"", persistence:.permanent) XCTAssertEqual(true, cre.hasPassword) @@ -349,6 +354,31 @@ class ShaarliHtmlClientTest: XCTestCase { waitForExpectations(timeout: 3, handler: nil) } + func testPostUrlIssue61() { + let end = URL(string:"https://demo:demodemodemo@demo.mro.name/shaarli-v0.11.1/")! // credentials are public + let url0 = URL(string:"https://example.com?a=b+c")! + + let exp0 = self.expectation(description: "Reading") + let exp1 = self.expectation(description: "Posting") + + let srv = ShaarliHtmlClient(AGENT) + srv.get(end, nil, TO, url0) { (ses, act, frm, url, tit, dsc, tgs, pri, tim, seti, err0) in + XCTAssertEqual("", err0) + XCTAssertEqual("https://example.com?a=b+c", url.absoluteString) + // XCTAssertEqual("The Website Obesity Crisis", tit) + XCTAssertEqual("", dsc, "why is dsc empty?") + XCTAssertEqual([], tgs) + + exp0.fulfill() + + srv.add(ses, act, frm, url, tit, dsc, tgs, pri) { err1 in + XCTAssertEqual("", err1) + exp1.fulfill() + } + } + waitForExpectations(timeout: 3, handler: nil) + } + func testTime() { let cli = ShaarliHtmlClient(AGENT) let tz = TimeZone(secondsFromGMT:2*60*60)! -- 2.11.4.GIT