From 40aff006656d1fa60a5cb1456736bc019693e3df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Helge=20He=C3=9F?= Date: Thu, 12 Dec 2024 15:16:11 +0100 Subject: [PATCH] Add support for "base64url" encoding A patched base64 that exchanges `+`/`-` and `/`/`_` for use in URLs. --- Sources/MacroCore/Buffer/BufferStrings.swift | 26 +++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/Sources/MacroCore/Buffer/BufferStrings.swift b/Sources/MacroCore/Buffer/BufferStrings.swift index f57299f..d3b07d6 100644 --- a/Sources/MacroCore/Buffer/BufferStrings.swift +++ b/Sources/MacroCore/Buffer/BufferStrings.swift @@ -156,6 +156,15 @@ public extension Buffer { } return Buffer(data) + case "base64url": + return try Self.from(String(string.map { + switch $0 { + case "-" : return "+" + case "_" : return "/" + default : return $0 + } + }), encoding) + default: return try from(string, .encodingWithName(encoding)) } @@ -178,7 +187,7 @@ public extension Buffer { @inlinable static func isEncoding(_ encoding: String) -> Bool { switch encoding { - case "hex", "base64": return true + case "hex", "base64", "base64url": return true default: return String.Encoding.isEncoding(encoding) } } @@ -223,8 +232,19 @@ public extension Buffer { @inlinable func toString(_ encoding: String) throws -> String { switch encoding { - case "hex" : return hexEncodedString() - case "base64" : return data.base64EncodedString() + case "hex" : return hexEncodedString() + case "base64" : return data.base64EncodedString() + case "base64url" : + var b64 = data.base64EncodedString() + if let eqIdx = b64.firstIndex(of: "=") { b64 = String(b64[..