From 71f1e44653cc44b56d92917aef8300c1d3e09545 Mon Sep 17 00:00:00 2001 From: Hailey Date: Sun, 14 Apr 2024 22:21:47 -0700 Subject: [PATCH] add jwt struct --- .../expo-bluesky-oauth-client/ios/JWK.swift | 56 ++++--- .../ios/JWTHeader.swift | 154 ++++++++++++++++++ 2 files changed, 185 insertions(+), 25 deletions(-) create mode 100644 modules/expo-bluesky-oauth-client/ios/JWTHeader.swift diff --git a/modules/expo-bluesky-oauth-client/ios/JWK.swift b/modules/expo-bluesky-oauth-client/ios/JWK.swift index 879d37a401..41d9522aa0 100644 --- a/modules/expo-bluesky-oauth-client/ios/JWK.swift +++ b/modules/expo-bluesky-oauth-client/ios/JWK.swift @@ -1,29 +1,35 @@ -struct JWK { - let kty: String - let use: String - let crv: String - let kid: String - let x: String - let y: String +import ExpoModulesCore + +struct JWK : Record { + @Field + var alg: String + @Field + var kty: String + @Field + var crv: String? + @Field + var x: String? + @Field + var y: String? + @Field + var e: String? + @Field + var n: String? + @Field var d: String? - let alg: String + @Field + var use: String? + @Field + var kid: String? - func toJson() -> String { - var dict: [String: Any] = [ - "kty": kty, - "use": use, - "crv": crv, - "kid": kid, - "x": x, - "y": y, - "alg": alg, - ] - - if let d = d { - dict["d"] = d - } - - let jsonData = try! JSONSerialization.data(withJSONObject: dict, options: []) - return String(data: jsonData, encoding: .utf8)! + func toField() -> Field { + return Field(wrappedValue: self) } } + +struct JWKPair : Record { + @Field + var privateKey: JWK + @Field + var publicKey: JWK +} diff --git a/modules/expo-bluesky-oauth-client/ios/JWTHeader.swift b/modules/expo-bluesky-oauth-client/ios/JWTHeader.swift new file mode 100644 index 0000000000..c80ce57f1e --- /dev/null +++ b/modules/expo-bluesky-oauth-client/ios/JWTHeader.swift @@ -0,0 +1,154 @@ +import ExpoModulesCore + +struct JWTHeader : Record { + @Field + var alg: String = "ES256" + @Field + var jku: String? + @Field + var jwk: JWK + @Field + var kid: String? + @Field + var x5u: String? + @Field + var x5c: String? + @Field + var x5t: String? + @Field + var typ: String? + @Field + var cty: String? + @Field + var crit: String? +} + +struct JWTPayload : Record { + @Field + var iss: String? + @Field + var aud: String? + @Field + var sub: String? + @Field + var exp: Int? + @Field + var nbr: Int? + @Field + var iat: Int? + @Field + var jti: String? + @Field + var htm: String? + @Field + var htu: String? + @Field + var ath: String? + @Field + var acr: String? + @Field + var azp: String? + @Field + var amr: String? + @Field + var cnf: JWTPayloadCNF? + @Field + var client_id: String? + @Field + var scope: String? + @Field + var nonce: String? + @Field + var at_hash: String? + @Field + var c_hash: String? + @Field + var s_hash: String? + @Field + var auth_time: Int? + @Field + var name: String? + @Field + var family_name: String? + @Field + var given_name: String? + @Field + var middle_name: String? + @Field + var nickname: String? + @Field + var preferred_username: String? + @Field + var gender: String? + @Field + var picture: String? + @Field + var profile: String? + @Field + var website: String? + @Field + var birthdate: String? + @Field + var zoneinfo: String? + @Field + var locale: String? + @Field + var updated_at: Int? + @Field + var email: String? + @Field + var email_verified: String? + @Field + var phone_number: String? + @Field + var phone_number_verified: Bool? + @Field + var address: JWTPayloadAddress? + @Field + var authorization_details: JWTPayloadAuthorizationDetails? +} + +struct JWTPayloadCNF : Record { + @Field + var kid: String? + @Field + var jwk: JWK? + @Field + var jwe: String? + @Field + var jku: String? + @Field + var jkt: String? + @Field + var osc: String? +} + +struct JWTPayloadAddress : Record { + @Field + var formatted: String? + @Field + var street_address: String? + @Field + var locality: String? + @Field + var region: String? + @Field + var postal_code: String? + @Field + var country: String? +} + +struct JWTPayloadAuthorizationDetails : Record { + @Field + var type: String + @Field + var locations: [String]? + @Field + var actions: [String]? + @Field + var datatypes: [String]? + @Field + var identifier: String? + @Field + var privileges: [String]? +}