Răsfoiți Sursa

Clean up Base64 encoding

# Conflicts:
#	Sources/HttpParser.swift
#	XCode/Sources/String+BASE64.swift
Maz Jaleel 7 ani în urmă
părinte
comite
b99669ec16
2 a modificat fișierele cu 3 adăugiri și 35 ștergeri
  1. 2 32
      XCode/Sources/String+BASE64.swift
  2. 1 3
      XCode/Sources/WebSockets.swift

+ 2 - 32
XCode/Sources/String+BASE64.swift

@@ -9,37 +9,7 @@ import Foundation
 
 extension String {
     
-    private static let CODES = [UInt8]("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".utf8)
-    
-    public static func toBase64(_ data: [UInt8]) -> String? {
-        
-        // Based on: https://en.wikipedia.org/wiki/Base64#Sample_Implementation_in_Java
-        
-        var result = [UInt8]()
-        var tmp: UInt8
-        for index in stride(from: 0, to: data.count, by: 3) {
-            let byte = data[index]
-            tmp = (byte & 0xFC) >> 2
-            result.append(CODES[Int(tmp)])
-            tmp = (byte & 0x03) << 4
-            if index + 1 < data.count {
-                tmp |= (data[index + 1] & 0xF0) >> 4
-                result.append(CODES[Int(tmp)])
-                tmp = (data[index + 1] & 0x0F) << 2
-                if index + 2 < data.count {
-                    tmp |= (data[index + 2] & 0xC0) >> 6
-                    result.append(CODES[Int(tmp)])
-                    tmp = data[index + 2] & 0x3F
-                    result.append(CODES[Int(tmp)])
-                } else {
-                    result.append(CODES[Int(tmp)])
-                    result.append(contentsOf: [UInt8]("=".utf8))
-                }
-            } else {
-                result.append(CODES[Int(tmp)])
-                result.append(contentsOf: [UInt8]("==".utf8))
-            }
-        }
-        return String(bytes: result, encoding: .utf8)
+    public static func toBase64(_ data: [UInt8]) -> String {
+        return Data(data).base64EncodedString()
     }
 }

+ 1 - 3
XCode/Sources/WebSockets.swift

@@ -139,9 +139,7 @@ public func websocket(
             
             disconnected?(session)
         }
-        guard let secWebSocketAccept = String.toBase64((secWebSocketKey + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11").sha1()) else {
-            return HttpResponse.internalServerError
-        }
+        let secWebSocketAccept = String.toBase64((secWebSocketKey + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11").sha1())
         let headers = ["Upgrade": "WebSocket", "Connection": "Upgrade", "Sec-WebSocket-Accept": secWebSocketAccept]
         return HttpResponse.switchProtocols(headers, protocolSessionClosure)
     }