Skip to content
This repository was archived by the owner on Feb 28, 2024. It is now read-only.

Commit 778815e

Browse files
committed
Fixed SBS encoding issue
1 parent 011b833 commit 778815e

File tree

1 file changed

+12
-4
lines changed
  • MastercardOAuth1Signer/MastercardOAuth1Signer

1 file changed

+12
-4
lines changed

MastercardOAuth1Signer/MastercardOAuth1Signer/OAuth.swift

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,12 @@ private extension OAuth {
5353
}
5454

5555
static func signatureBaseString(httpMethod: String, baseUri: String, paramString: String) -> String {
56-
let escapedBaseUri = baseUri.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) ?? ""
56+
57+
let generalDelimitersToEncode = ":#[]@/?" //added custom char set because default one doesn't include +
58+
let subDelimitersToEncode = "!$&'()*+,;="
59+
var allowedCharacterSet = CharacterSet.urlQueryAllowed
60+
allowedCharacterSet.remove(charactersIn: "\(generalDelimitersToEncode)\(subDelimitersToEncode)")
61+
let escapedBaseUri = baseUri.addingPercentEncoding(withAllowedCharacters: allowedCharacterSet) ?? ""
5762

5863
return httpMethod.uppercased()
5964
+ "&"
@@ -70,7 +75,7 @@ private extension OAuth {
7075
let validChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
7176
return randomBytes.map { randomByte in
7277
return validChars[Int(randomByte % UInt8(validChars.count))]
73-
}.joined()
78+
}.joined()
7479
}
7580

7681
static func oauthParameters(withKey consumerKey: String, payload: String?) -> [String: String] {
@@ -90,12 +95,15 @@ private extension OAuth {
9095
oauthParameters: [String: String]) -> String {
9196

9297
var allParameters = [(key: String, values: [String])]()
98+
99+
let sortedOauthParams = oauthParameters.sorted { $0.0 < $1.0 }.map { (key: $0.key, values: [$0.value])}
100+
allParameters += sortedOauthParams
101+
93102
if let queryParams = queryParameters {
94103
allParameters += queryParams.sorted { $0.0 < $1.0 }.map {(key: $0.0, values: Array($0.value)) }
95104
}
96105

97-
let sortedOauthParams = oauthParameters.sorted { $0.0 < $1.0 }.map { (key: $0.key, values: [$0.value])}
98-
allParameters += sortedOauthParams
106+
allParameters = allParameters.sorted { $0.0 < $1.0 }.map {(key: $0.0, values: Array($0.values)) }
99107

100108
var paramString = allParameters.reduce(into: "") { combined, keyPair in
101109
keyPair.values.sorted().forEach { value in

0 commit comments

Comments
 (0)