Skip to content

Commit

Permalink
refactor: Move encoding to compact encoder
Browse files Browse the repository at this point in the history
  • Loading branch information
kylef committed Oct 13, 2017
1 parent 087e6e7 commit f60df5b
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 9 deletions.
8 changes: 8 additions & 0 deletions Sources/JWT/CompactJSONEncoder.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,12 @@ class CompactJSONEncoder: JSONEncoder {
func encodeString<T: Encodable>(_ value: T) throws -> String {
return base64encode(try super.encode(value))
}

func encodeString(_ value: [String: Any]) -> String? {
if let data = try? JSONSerialization.data(withJSONObject: value) {
return base64encode(data)
}

return nil
}
}
10 changes: 1 addition & 9 deletions Sources/JWT/Encode.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,22 +8,14 @@ import Foundation
public func encode(claims: ClaimSet, algorithm: Algorithm, headers: [String: String]? = nil) -> String {
let encoder = CompactJSONEncoder()

func encodeJSON(_ payload: [String: Any]) -> String? {
if let data = try? JSONSerialization.data(withJSONObject: payload) {
return base64encode(data)
}

return nil
}

var headers = headers ?? [:]
if !headers.keys.contains("typ") {
headers["typ"] = "JWT"
}
headers["alg"] = algorithm.description

let header = try! encoder.encodeString(headers)
let payload = encodeJSON(claims.claims)!
let payload = encoder.encodeString(claims.claims)!
let signingInput = "\(header).\(payload)"
let signature = algorithm.sign(signingInput)
return "\(signingInput).\(signature)"
Expand Down

0 comments on commit f60df5b

Please sign in to comment.