@algocare/react-native-code-push 12.6.4 → 13.0.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (296) hide show
  1. package/CodePush.podspec +6 -8
  2. package/README.md +343 -586
  3. package/android/app/build.gradle +2 -1
  4. package/android/app/proguard-rules.pro +14 -0
  5. package/android/app/src/debug/AndroidManifest.xml +9 -0
  6. package/android/app/src/main/AndroidManifest.xml +1 -2
  7. package/android/app/src/main/java/com/microsoft/codepush/react/CodePush.java +14 -139
  8. package/android/app/src/main/java/com/microsoft/codepush/react/CodePushConstants.java +0 -3
  9. package/android/app/src/main/java/com/microsoft/codepush/react/CodePushNativeModule.java +108 -63
  10. package/android/app/src/main/java/com/microsoft/codepush/react/CodePushUpdateManager.java +2 -33
  11. package/android/app/src/main/java/com/microsoft/codepush/react/CodePushUpdateUtils.java +13 -109
  12. package/android/build.gradle +3 -0
  13. package/app.plugin.js +1 -0
  14. package/bin/code-push.js +6 -0
  15. package/cli/commands/bundleCommand/bundleCodePush.ts +118 -0
  16. package/cli/commands/bundleCommand/index.ts +34 -0
  17. package/cli/commands/createHistoryCommand/createReleaseHistory.ts +37 -0
  18. package/cli/commands/createHistoryCommand/createReleaseHistoryList.ts +40 -0
  19. package/cli/commands/createHistoryCommand/index.ts +44 -0
  20. package/cli/commands/createPullRequestHistoryCommand/createPullRequestHistory.ts +33 -0
  21. package/cli/commands/createPullRequestHistoryCommand/index.ts +31 -0
  22. package/cli/commands/createPullRequestReleaseCommand/addToPullRequestRelease.ts +71 -0
  23. package/cli/commands/createPullRequestReleaseCommand/createPullRequestRelease.ts +75 -0
  24. package/cli/commands/createPullRequestReleaseCommand/index.ts +74 -0
  25. package/cli/commands/getPackageHashCommand/index.ts +45 -0
  26. package/cli/commands/initCommand/index.ts +14 -0
  27. package/cli/commands/initCommand/initAndroid.ts +91 -0
  28. package/cli/commands/initCommand/initIos.ts +123 -0
  29. package/cli/commands/initCommand/test/initAndroid.test.ts +128 -0
  30. package/cli/commands/initCommand/test/initIos.test.ts +99 -0
  31. package/cli/commands/releaseCommand/addToReleaseHistory.ts +57 -0
  32. package/cli/commands/releaseCommand/index.ts +90 -0
  33. package/cli/commands/releaseCommand/release.ts +105 -0
  34. package/cli/commands/removePullRequestHistoryCommand/index.ts +37 -0
  35. package/cli/commands/removePullRequestHistoryCommand/removePullRequestHistory.ts +28 -0
  36. package/cli/commands/showHistoryCommand/index.ts +31 -0
  37. package/cli/commands/updateHistoryCommand/index.ts +55 -0
  38. package/cli/commands/updateHistoryCommand/updateReleaseHistory.ts +42 -0
  39. package/cli/constant.ts +4 -0
  40. package/cli/dist/commands/bundleCommand/bundleCodePush.js +65 -0
  41. package/cli/dist/commands/bundleCommand/index.js +15 -0
  42. package/cli/dist/commands/createHistoryCommand/createReleaseHistory.js +25 -0
  43. package/cli/dist/commands/createHistoryCommand/createReleaseHistoryList.js +27 -0
  44. package/cli/dist/commands/createHistoryCommand/index.js +20 -0
  45. package/cli/dist/commands/createPullRequestHistoryCommand/createPullRequestHistory.js +23 -0
  46. package/cli/dist/commands/createPullRequestHistoryCommand/index.js +15 -0
  47. package/cli/dist/commands/createPullRequestReleaseCommand/addToPullRequestRelease.js +51 -0
  48. package/cli/dist/commands/createPullRequestReleaseCommand/createPullRequestRelease.js +39 -0
  49. package/cli/dist/commands/createPullRequestReleaseCommand/index.js +35 -0
  50. package/cli/dist/commands/getPackageHashCommand/index.js +26 -0
  51. package/cli/dist/commands/initCommand/index.js +12 -0
  52. package/cli/dist/commands/initCommand/initAndroid.js +73 -0
  53. package/cli/dist/commands/initCommand/initIos.js +108 -0
  54. package/cli/dist/commands/initCommand/test/initAndroid.test.js +113 -0
  55. package/cli/dist/commands/initCommand/test/initIos.test.js +95 -0
  56. package/cli/dist/commands/releaseCommand/addToReleaseHistory.js +35 -0
  57. package/cli/dist/commands/releaseCommand/index.js +45 -0
  58. package/cli/dist/commands/releaseCommand/release.js +62 -0
  59. package/cli/dist/commands/removePullRequestHistoryCommand/index.js +19 -0
  60. package/cli/dist/commands/removePullRequestHistoryCommand/removePullRequestHistory.js +18 -0
  61. package/cli/dist/commands/showHistoryCommand/index.js +15 -0
  62. package/cli/dist/commands/updateHistoryCommand/index.js +31 -0
  63. package/cli/dist/commands/updateHistoryCommand/updateReleaseHistory.js +28 -0
  64. package/cli/dist/constant.js +4 -0
  65. package/cli/dist/functions/getReactTempDir.js +10 -0
  66. package/cli/{functions → dist/functions}/makeCodePushBundle.js +5 -11
  67. package/cli/{functions → dist/functions}/prepareToBundleJS.js +2 -5
  68. package/cli/dist/functions/runExpoBundleCommand.js +35 -0
  69. package/cli/{functions → dist/functions}/runHermesEmitBinaryCommand.js +36 -71
  70. package/cli/{functions → dist/functions}/runReactNativeBundleCommand.js +19 -24
  71. package/cli/dist/index.js +54 -0
  72. package/cli/dist/utils/datetime.js +17 -0
  73. package/cli/dist/utils/file-utils.js +19 -0
  74. package/cli/dist/utils/fsUtils.js +44 -0
  75. package/cli/{utils → dist/utils}/hash-utils.js +19 -130
  76. package/cli/{utils → dist/utils}/promisfied-fs.js +5 -16
  77. package/cli/dist/utils/showLogo.js +21 -0
  78. package/cli/dist/utils/unzip.js +41 -0
  79. package/cli/{utils → dist/utils}/zip.js +15 -51
  80. package/cli/functions/{getReactTempDir.js → getReactTempDir.ts} +2 -6
  81. package/cli/functions/makeCodePushBundle.ts +26 -0
  82. package/cli/functions/prepareToBundleJS.ts +10 -0
  83. package/cli/functions/runExpoBundleCommand.ts +45 -0
  84. package/cli/functions/runHermesEmitBinaryCommand.ts +203 -0
  85. package/cli/functions/runReactNativeBundleCommand.ts +67 -0
  86. package/cli/index.ts +68 -0
  87. package/cli/package.json +35 -0
  88. package/cli/utils/datetime.ts +19 -0
  89. package/cli/utils/{file-utils.js → file-utils.ts} +4 -21
  90. package/cli/utils/fsUtils.ts +50 -0
  91. package/cli/utils/hash-utils.ts +143 -0
  92. package/cli/utils/promisfied-fs.ts +19 -0
  93. package/cli/utils/{showLogo.js → showLogo.ts} +4 -6
  94. package/cli/utils/unzip.ts +46 -0
  95. package/cli/utils/zip.ts +65 -0
  96. package/expo/plugin/withCodePush.js +14 -0
  97. package/expo/plugin/withCodePushAndroid.js +92 -0
  98. package/expo/plugin/withCodePushIos.js +143 -0
  99. package/ios/CodePush/CodePush.h +0 -16
  100. package/ios/CodePush/CodePush.m +30 -20
  101. package/ios/CodePush/CodePushConfig.m +1 -11
  102. package/ios/CodePush/CodePushPackage.m +12 -69
  103. package/ios/CodePush/CodePushUpdateUtils.m +1 -91
  104. package/ios/CodePush/SSZipArchive/Info.plist +26 -0
  105. package/ios/CodePush/SSZipArchive/README.md +1 -1
  106. package/ios/CodePush/SSZipArchive/SSZipArchive.h +129 -27
  107. package/ios/CodePush/SSZipArchive/SSZipArchive.m +1119 -314
  108. package/ios/CodePush/SSZipArchive/SSZipCommon.h +71 -0
  109. package/ios/CodePush/SSZipArchive/Supporting Files/PrivacyInfo.xcprivacy +23 -0
  110. package/ios/CodePush/SSZipArchive/include/ZipArchive.h +25 -0
  111. package/ios/CodePush/SSZipArchive/minizip/LICENSE +17 -0
  112. package/ios/CodePush/SSZipArchive/minizip/mz.h +273 -0
  113. package/ios/CodePush/SSZipArchive/minizip/mz_compat.c +1306 -0
  114. package/ios/CodePush/SSZipArchive/minizip/mz_compat.h +346 -0
  115. package/ios/CodePush/SSZipArchive/minizip/mz_crypt.c +187 -0
  116. package/ios/CodePush/SSZipArchive/minizip/mz_crypt.h +65 -0
  117. package/ios/CodePush/SSZipArchive/minizip/mz_crypt_apple.c +526 -0
  118. package/ios/CodePush/SSZipArchive/minizip/mz_os.c +348 -0
  119. package/ios/CodePush/SSZipArchive/minizip/mz_os.h +176 -0
  120. package/ios/CodePush/SSZipArchive/minizip/mz_os_posix.c +350 -0
  121. package/ios/CodePush/SSZipArchive/minizip/mz_strm.c +556 -0
  122. package/ios/CodePush/SSZipArchive/minizip/mz_strm.h +132 -0
  123. package/ios/CodePush/SSZipArchive/minizip/mz_strm_buf.c +383 -0
  124. package/ios/CodePush/SSZipArchive/minizip/mz_strm_buf.h +42 -0
  125. package/ios/CodePush/SSZipArchive/minizip/mz_strm_mem.c +269 -0
  126. package/ios/CodePush/SSZipArchive/minizip/mz_strm_mem.h +48 -0
  127. package/ios/CodePush/SSZipArchive/minizip/mz_strm_os.h +40 -0
  128. package/ios/CodePush/SSZipArchive/minizip/mz_strm_os_posix.c +203 -0
  129. package/ios/CodePush/SSZipArchive/minizip/mz_strm_pkcrypt.c +334 -0
  130. package/ios/CodePush/SSZipArchive/minizip/mz_strm_pkcrypt.h +46 -0
  131. package/ios/CodePush/SSZipArchive/minizip/mz_strm_split.c +429 -0
  132. package/ios/CodePush/SSZipArchive/minizip/mz_strm_split.h +43 -0
  133. package/ios/CodePush/SSZipArchive/minizip/mz_strm_wzaes.c +360 -0
  134. package/ios/CodePush/SSZipArchive/minizip/mz_strm_wzaes.h +46 -0
  135. package/ios/CodePush/SSZipArchive/minizip/mz_strm_zlib.c +389 -0
  136. package/ios/CodePush/SSZipArchive/minizip/mz_strm_zlib.h +43 -0
  137. package/ios/CodePush/SSZipArchive/minizip/mz_zip.c +2782 -0
  138. package/ios/CodePush/SSZipArchive/minizip/mz_zip.h +262 -0
  139. package/ios/CodePush/SSZipArchive/minizip/mz_zip_rw.c +1942 -0
  140. package/ios/CodePush/SSZipArchive/minizip/mz_zip_rw.h +285 -0
  141. package/ios/CodePush.xcodeproj/project.pbxproj +244 -453
  142. package/ios/PrivacyInfo.xcprivacy +31 -0
  143. package/package.json +68 -42
  144. package/react-native.config.js +1 -1
  145. package/{AlertAdapter.js → src/AlertAdapter.js} +5 -5
  146. package/src/CodePush.js +947 -0
  147. package/{package-mixins.js → src/package-mixins.js} +1 -1
  148. package/{versioning → src/versioning}/BaseVersioning.js +12 -1
  149. package/{versioning → src/versioning}/SemverVersioning.test.js +78 -0
  150. package/typings/react-native-code-push.d.ts +559 -495
  151. package/.claude/commands/release.md +0 -78
  152. package/.claude/skills/npm-release/SKILL.md +0 -89
  153. package/CLAUDE.md +0 -83
  154. package/CONTRIBUTING.md +0 -134
  155. package/CodePush.js +0 -972
  156. package/SECURITY.md +0 -41
  157. package/android/app/src/main/java/com/microsoft/codepush/react/CodePushBuilder.java +0 -37
  158. package/android/app/src/main/java/com/microsoft/codepush/react/CodePushInvalidPublicKeyException.java +0 -12
  159. package/android/app/src/main/java/com/microsoft/codepush/react/ReactInstanceHolder.java +0 -17
  160. package/android/codepush.gradle +0 -162
  161. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  162. package/android/gradle/wrapper/gradle-wrapper.properties +0 -5
  163. package/android/gradlew +0 -164
  164. package/android/gradlew.bat +0 -90
  165. package/babel.config.js +0 -3
  166. package/cli/commands/bundleCommand/bundleCodePush.js +0 -57
  167. package/cli/commands/bundleCommand/index.js +0 -55
  168. package/cli/commands/common.js +0 -245
  169. package/cli/commands/createHistoryCommand/createReleaseHistory.js +0 -42
  170. package/cli/commands/createHistoryCommand/createReleaseHistoryList.js +0 -52
  171. package/cli/commands/createHistoryCommand/index.js +0 -95
  172. package/cli/commands/createPullRequestHistoryCommand/createPullRequestHistory.js +0 -34
  173. package/cli/commands/createPullRequestHistoryCommand/index.js +0 -29
  174. package/cli/commands/createPullRequestReleaseCommand/addToPullRequestRelease.js +0 -74
  175. package/cli/commands/createPullRequestReleaseCommand/createPullRequestRelease.js +0 -91
  176. package/cli/commands/createPullRequestReleaseCommand/index.js +0 -68
  177. package/cli/commands/getPackageHashCommand/index.js +0 -42
  178. package/cli/commands/releaseCommand/addToReleaseHistory.js +0 -85
  179. package/cli/commands/releaseCommand/index.js +0 -151
  180. package/cli/commands/releaseCommand/release.js +0 -121
  181. package/cli/commands/removePullRequestHistoryCommand/index.js +0 -28
  182. package/cli/commands/removePullRequestHistoryCommand/removePullRequestHistory.js +0 -23
  183. package/cli/commands/showHistoryCommand/index.js +0 -88
  184. package/cli/commands/updateHistoryCommand/index.js +0 -123
  185. package/cli/commands/updateHistoryCommand/updateReleaseHistory.js +0 -69
  186. package/cli/constant.js +0 -8
  187. package/cli/index.js +0 -63
  188. package/cli/utils/datetime.js +0 -22
  189. package/cli/utils/fsUtils.js +0 -64
  190. package/cli/utils/version.js +0 -26
  191. package/code-push.config.example.supabase.ts +0 -114
  192. package/code-push.config.js +0 -229
  193. package/code-push.config.ts +0 -175
  194. package/docs/api-android.md +0 -83
  195. package/docs/api-ios.md +0 -31
  196. package/docs/api-js.md +0 -592
  197. package/docs/multi-deployment-testing-android.md +0 -148
  198. package/docs/multi-deployment-testing-ios.md +0 -59
  199. package/docs/setup-android.md +0 -482
  200. package/docs/setup-ios.md +0 -280
  201. package/eslint.config.mjs +0 -32
  202. package/ios/CodePush/Base64/Base64/MF_Base64Additions.h +0 -34
  203. package/ios/CodePush/Base64/Base64/MF_Base64Additions.m +0 -252
  204. package/ios/CodePush/Base64/README.md +0 -47
  205. package/ios/CodePush/JWT/Core/Algorithms/Base/JWTAlgorithm.h +0 -69
  206. package/ios/CodePush/JWT/Core/Algorithms/Base/JWTAlgorithmFactory.h +0 -16
  207. package/ios/CodePush/JWT/Core/Algorithms/Base/JWTAlgorithmFactory.m +0 -51
  208. package/ios/CodePush/JWT/Core/Algorithms/Base/JWTAlgorithmNone.h +0 -15
  209. package/ios/CodePush/JWT/Core/Algorithms/Base/JWTAlgorithmNone.m +0 -55
  210. package/ios/CodePush/JWT/Core/Algorithms/ESFamily/JWTAlgorithmESBase.h +0 -24
  211. package/ios/CodePush/JWT/Core/Algorithms/ESFamily/JWTAlgorithmESBase.m +0 -41
  212. package/ios/CodePush/JWT/Core/Algorithms/HSFamily/JWTAlgorithmHSBase.h +0 -28
  213. package/ios/CodePush/JWT/Core/Algorithms/HSFamily/JWTAlgorithmHSBase.m +0 -205
  214. package/ios/CodePush/JWT/Core/Algorithms/Holders/JWTAlgorithmDataHolder.h +0 -103
  215. package/ios/CodePush/JWT/Core/Algorithms/Holders/JWTAlgorithmDataHolder.m +0 -322
  216. package/ios/CodePush/JWT/Core/Algorithms/Holders/JWTAlgorithmDataHolderChain.h +0 -37
  217. package/ios/CodePush/JWT/Core/Algorithms/Holders/JWTAlgorithmDataHolderChain.m +0 -145
  218. package/ios/CodePush/JWT/Core/Algorithms/RSFamily/JWTAlgorithmRSBase.h +0 -35
  219. package/ios/CodePush/JWT/Core/Algorithms/RSFamily/JWTAlgorithmRSBase.m +0 -551
  220. package/ios/CodePush/JWT/Core/Algorithms/RSFamily/JWTRSAlgorithm.h +0 -23
  221. package/ios/CodePush/JWT/Core/Algorithms/RSFamily/RSKeys/JWTCryptoKey.h +0 -43
  222. package/ios/CodePush/JWT/Core/Algorithms/RSFamily/RSKeys/JWTCryptoKey.m +0 -230
  223. package/ios/CodePush/JWT/Core/Algorithms/RSFamily/RSKeys/JWTCryptoKeyExtractor.h +0 -31
  224. package/ios/CodePush/JWT/Core/Algorithms/RSFamily/RSKeys/JWTCryptoKeyExtractor.m +0 -113
  225. package/ios/CodePush/JWT/Core/Algorithms/RSFamily/RSKeys/JWTCryptoSecurity.h +0 -38
  226. package/ios/CodePush/JWT/Core/Algorithms/RSFamily/RSKeys/JWTCryptoSecurity.m +0 -500
  227. package/ios/CodePush/JWT/Core/ClaimSet/JWTClaim.h +0 -18
  228. package/ios/CodePush/JWT/Core/ClaimSet/JWTClaim.m +0 -214
  229. package/ios/CodePush/JWT/Core/ClaimSet/JWTClaimsSet.h +0 -23
  230. package/ios/CodePush/JWT/Core/ClaimSet/JWTClaimsSet.m +0 -29
  231. package/ios/CodePush/JWT/Core/ClaimSet/JWTClaimsSetSerializer.h +0 -19
  232. package/ios/CodePush/JWT/Core/ClaimSet/JWTClaimsSetSerializer.m +0 -68
  233. package/ios/CodePush/JWT/Core/ClaimSet/JWTClaimsSetVerifier.h +0 -18
  234. package/ios/CodePush/JWT/Core/ClaimSet/JWTClaimsSetVerifier.m +0 -72
  235. package/ios/CodePush/JWT/Core/Coding/JWTCoding+ResultTypes.h +0 -67
  236. package/ios/CodePush/JWT/Core/Coding/JWTCoding+ResultTypes.m +0 -111
  237. package/ios/CodePush/JWT/Core/Coding/JWTCoding+VersionOne.h +0 -119
  238. package/ios/CodePush/JWT/Core/Coding/JWTCoding+VersionOne.m +0 -307
  239. package/ios/CodePush/JWT/Core/Coding/JWTCoding+VersionThree.h +0 -94
  240. package/ios/CodePush/JWT/Core/Coding/JWTCoding+VersionThree.m +0 -619
  241. package/ios/CodePush/JWT/Core/Coding/JWTCoding+VersionTwo.h +0 -164
  242. package/ios/CodePush/JWT/Core/Coding/JWTCoding+VersionTwo.m +0 -514
  243. package/ios/CodePush/JWT/Core/Coding/JWTCoding.h +0 -24
  244. package/ios/CodePush/JWT/Core/Coding/JWTCoding.m +0 -11
  245. package/ios/CodePush/JWT/Core/FrameworkSupplement/JWT.h +0 -52
  246. package/ios/CodePush/JWT/Core/FrameworkSupplement/Map.modulemap +0 -5
  247. package/ios/CodePush/JWT/Core/Supplement/JWTBase64Coder.h +0 -28
  248. package/ios/CodePush/JWT/Core/Supplement/JWTBase64Coder.m +0 -70
  249. package/ios/CodePush/JWT/Core/Supplement/JWTDeprecations.h +0 -22
  250. package/ios/CodePush/JWT/Core/Supplement/JWTErrorDescription.h +0 -34
  251. package/ios/CodePush/JWT/Core/Supplement/JWTErrorDescription.m +0 -73
  252. package/ios/CodePush/JWT/LICENSE +0 -19
  253. package/ios/CodePush/JWT/README.md +0 -489
  254. package/ios/CodePush/SSZipArchive/Common.h +0 -81
  255. package/ios/CodePush/SSZipArchive/aes/aes.h +0 -198
  256. package/ios/CodePush/SSZipArchive/aes/aes_via_ace.h +0 -541
  257. package/ios/CodePush/SSZipArchive/aes/aescrypt.c +0 -294
  258. package/ios/CodePush/SSZipArchive/aes/aeskey.c +0 -548
  259. package/ios/CodePush/SSZipArchive/aes/aesopt.h +0 -739
  260. package/ios/CodePush/SSZipArchive/aes/aestab.c +0 -391
  261. package/ios/CodePush/SSZipArchive/aes/aestab.h +0 -173
  262. package/ios/CodePush/SSZipArchive/aes/brg_endian.h +0 -126
  263. package/ios/CodePush/SSZipArchive/aes/brg_types.h +0 -219
  264. package/ios/CodePush/SSZipArchive/aes/entropy.c +0 -54
  265. package/ios/CodePush/SSZipArchive/aes/entropy.h +0 -16
  266. package/ios/CodePush/SSZipArchive/aes/fileenc.c +0 -144
  267. package/ios/CodePush/SSZipArchive/aes/fileenc.h +0 -121
  268. package/ios/CodePush/SSZipArchive/aes/hmac.c +0 -145
  269. package/ios/CodePush/SSZipArchive/aes/hmac.h +0 -103
  270. package/ios/CodePush/SSZipArchive/aes/prng.c +0 -155
  271. package/ios/CodePush/SSZipArchive/aes/prng.h +0 -82
  272. package/ios/CodePush/SSZipArchive/aes/pwd2key.c +0 -103
  273. package/ios/CodePush/SSZipArchive/aes/pwd2key.h +0 -57
  274. package/ios/CodePush/SSZipArchive/aes/sha1.c +0 -258
  275. package/ios/CodePush/SSZipArchive/aes/sha1.h +0 -73
  276. package/ios/CodePush/SSZipArchive/minizip/crypt.h +0 -130
  277. package/ios/CodePush/SSZipArchive/minizip/ioapi.c +0 -369
  278. package/ios/CodePush/SSZipArchive/minizip/ioapi.h +0 -175
  279. package/ios/CodePush/SSZipArchive/minizip/mztools.c +0 -284
  280. package/ios/CodePush/SSZipArchive/minizip/mztools.h +0 -31
  281. package/ios/CodePush/SSZipArchive/minizip/unzip.c +0 -1839
  282. package/ios/CodePush/SSZipArchive/minizip/unzip.h +0 -248
  283. package/ios/CodePush/SSZipArchive/minizip/zip.c +0 -1910
  284. package/ios/CodePush/SSZipArchive/minizip/zip.h +0 -202
  285. package/scripts/generateBundledResourcesHash.js +0 -125
  286. package/scripts/getFilesInFolder.js +0 -19
  287. package/scripts/recordFilesBeforeBundleCommand.js +0 -41
  288. package/scripts/release.sh +0 -86
  289. package/tsconfig.json +0 -20
  290. package/tslint.json +0 -32
  291. /package/{logging.js → src/logging.js} +0 -0
  292. /package/{versioning → src/versioning}/BaseVersioning.test.js +0 -0
  293. /package/{versioning → src/versioning}/IncrementalVersioning.js +0 -0
  294. /package/{versioning → src/versioning}/IncrementalVersioning.test.js +0 -0
  295. /package/{versioning → src/versioning}/SemverVersioning.js +0 -0
  296. /package/{versioning → src/versioning}/index.js +0 -0
@@ -1,619 +0,0 @@
1
- //
2
- // JWTCoding+VersionThree.m
3
- // JWT
4
- //
5
- // Created by Lobanov Dmitry on 27.11.16.
6
- // Copyright © 2016 JWTIO. All rights reserved.
7
- //
8
-
9
- #import "JWTCoding+VersionThree.h"
10
- #import "JWTAlgorithmDataHolderChain.h"
11
- #import "JWTRSAlgorithm.h"
12
- #import "JWTCoding+ResultTypes.h"
13
- #import "JWTAlgorithmFactory.h"
14
- #import "JWTErrorDescription.h"
15
- #import "JWTBase64Coder.h"
16
- #import "JWTClaimsSetSerializer.h"
17
- #import "JWTClaimsSetVerifier.h"
18
-
19
- @implementation JWT (VersionThree)
20
- + (JWTEncodingBuilder *)encodeWithHolders:(NSArray *)holders {
21
- return [JWTEncodingBuilder createWithHolders:holders];
22
- }
23
- + (JWTEncodingBuilder *)encodeWithChain:(JWTAlgorithmDataHolderChain *)chain {
24
- return [JWTEncodingBuilder createWithChain:chain];
25
- }
26
- + (JWTDecodingBuilder *)decodeWithHolders:(NSArray *)holders {
27
- return [JWTDecodingBuilder createWithHolders:holders];
28
- }
29
- + (JWTDecodingBuilder *)decodeWithChain:(JWTAlgorithmDataHolderChain *)chain {
30
- return [JWTDecodingBuilder createWithChain:chain];
31
- }
32
- @end
33
-
34
- @interface JWTCodingBuilder ()
35
- #pragma mark - Internal
36
- @property (strong, nonatomic, readwrite) JWTAlgorithmDataHolderChain *internalChain;
37
- @property (copy, nonatomic, readwrite) NSNumber *internalOptions;
38
-
39
- #pragma mark - Fluent
40
- @property (copy, nonatomic, readwrite) JWTCodingBuilder *(^chain)(JWTAlgorithmDataHolderChain *chain);
41
- @property (copy, nonatomic, readwrite) JWTCodingBuilder *(^constructChain)(JWTAlgorithmDataHolderChain *(^block)());
42
- @property (copy, nonatomic, readwrite) JWTCodingBuilder *(^modifyChain)(JWTAlgorithmDataHolderChain *(^block)(JWTAlgorithmDataHolderChain * chain));
43
- @property (copy, nonatomic, readwrite) JWTCodingBuilder *(^options)(NSNumber *options);
44
- @property (copy, nonatomic, readwrite) JWTCodingBuilder *(^addHolder)(id<JWTAlgorithmDataHolderProtocol> holder);
45
- @property (copy, nonatomic, readwrite) JWTCodingBuilder *(^constructHolder)(id<JWTAlgorithmDataHolderProtocol>(^block)(id<JWTAlgorithmDataHolderProtocol> holder));
46
-
47
- @end
48
- @interface JWTCodingBuilder (Fluent_Setup)
49
- - (instancetype)chain:(JWTAlgorithmDataHolderChain *)chain;
50
- - (instancetype)options:(NSNumber *)options;
51
- - (instancetype)addHolder:(id<JWTAlgorithmDataHolderProtocol>)holder;
52
- - (void)setupFluent;
53
- @end
54
-
55
- @implementation JWTCodingBuilder (Fluent_Setup)
56
- - (instancetype)chain:(JWTAlgorithmDataHolderChain *)chain {
57
- self.internalChain = chain;
58
- return self;
59
- }
60
- - (instancetype)options:(NSNumber *)options {
61
- self.internalOptions = options;
62
- return self;
63
- }
64
- - (instancetype)addHolder:(id<JWTAlgorithmDataHolderProtocol>)holder {
65
- self.internalChain = [self.internalChain chainByAppendingHolder:holder];
66
- return self;
67
- }
68
- - (void)setupFluent {
69
- __weak typeof(self) weakSelf = self;
70
- self.chain = ^(JWTAlgorithmDataHolderChain *chain) {
71
- return [weakSelf chain:chain];
72
- };
73
-
74
- self.constructChain = ^(JWTAlgorithmDataHolderChain *(^block)()) {
75
- if (block) {
76
- JWTAlgorithmDataHolderChain *chain = block();
77
- return [weakSelf chain:chain];
78
- }
79
- return weakSelf;
80
- };
81
-
82
- self.modifyChain = ^(JWTAlgorithmDataHolderChain *(^block)(JWTAlgorithmDataHolderChain *chain)) {
83
- if (block) {
84
- JWTAlgorithmDataHolderChain *chain = block(weakSelf.internalChain);
85
- return [weakSelf chain:chain];
86
- }
87
- return weakSelf;
88
- };
89
-
90
-
91
- self.options = ^(NSNumber *options) {
92
- return [weakSelf options:options];
93
- };
94
-
95
- self.addHolder = ^(id<JWTAlgorithmDataHolderProtocol> holder) {
96
- return [weakSelf addHolder:holder];
97
- };
98
-
99
- self.constructHolder = ^(id<JWTAlgorithmDataHolderProtocol> (^block)(id<JWTAlgorithmDataHolderProtocol> holder)) {
100
- if (block) {
101
- [weakSelf addHolder:block([JWTAlgorithmBaseDataHolder new])];
102
- }
103
- return weakSelf;
104
- };
105
- }
106
- @end
107
-
108
- @implementation JWTCodingBuilder
109
- #pragma mark - Getters
110
- // Chain always exists
111
- - (JWTAlgorithmDataHolderChain *)internalChain {
112
- return _internalChain ?: (_internalChain = [JWTAlgorithmDataHolderChain new], _internalChain);
113
- }
114
- #pragma mark - Create
115
- - (instancetype)initWithChain:(JWTAlgorithmDataHolderChain *)chain {
116
- if (self = [super init]) {
117
- self.internalChain = chain;
118
- [self setupFluent];
119
- }
120
- return self;
121
- }
122
- + (instancetype)createWithHolders:(NSArray *)items {
123
- return [self createWithChain:[[JWTAlgorithmDataHolderChain alloc] initWithHolders:items]];
124
- }
125
- + (instancetype)createWithChain:(JWTAlgorithmDataHolderChain *)chain {
126
- return [[self alloc] initWithChain:chain];
127
- }
128
- + (instancetype)createWithEmptyChain {
129
- return [self createWithChain:nil];
130
- }
131
- @end
132
-
133
- @implementation JWTCodingBuilder (Sugar)
134
- - (instancetype)and {
135
- return self;
136
- }
137
- - (instancetype)with {
138
- return self;
139
- }
140
- @end
141
-
142
- @interface JWTEncodingBuilder ()
143
- #pragma mark - Internal
144
- @property (copy, nonatomic, readwrite) NSDictionary *internalPayload;
145
- @property (copy, nonatomic, readwrite) NSDictionary *internalHeaders;
146
- @property (strong, nonatomic, readwrite) JWTClaimsSet *internalClaimsSet;
147
- @property (copy, nonatomic, readwrite) NSDictionary *internalMixingClaimsPayload;
148
-
149
- #pragma mark - Fluent
150
- @property (copy, nonatomic, readwrite) JWTEncodingBuilder *(^payload)(NSDictionary *payload);
151
- @property (copy, nonatomic, readwrite) JWTEncodingBuilder *(^headers)(NSDictionary *headers);
152
- @property (copy, nonatomic, readwrite) JWTEncodingBuilder *(^claimsSet)(JWTClaimsSet *claimsSet);
153
- @end
154
-
155
- @interface JWTEncodingBuilder (Fluent_Setup)
156
- - (instancetype)payload:(NSDictionary *)payload;
157
- - (instancetype)headers:(NSDictionary *)headers;
158
- - (instancetype)claimsSet:(JWTClaimsSet *)claimsSet;
159
- @end
160
-
161
- @implementation JWTEncodingBuilder (Fluent_Setup)
162
-
163
- - (instancetype)payload:(NSDictionary *)payload {
164
- self.internalPayload = payload;
165
- return self;
166
- }
167
- - (instancetype)headers:(NSDictionary *)headers {
168
- self.internalHeaders = headers;
169
- return self;
170
- }
171
-
172
- - (instancetype)claimsSet:(JWTClaimsSet *)claimsSet {
173
- self.internalClaimsSet = claimsSet;
174
- return self;
175
- }
176
-
177
- - (void)setupFluent {
178
- [super setupFluent];
179
- __weak typeof(self) weakSelf = self;
180
- self.payload = ^(NSDictionary *payload) {
181
- return [weakSelf payload:payload];
182
- };
183
- self.headers = ^(NSDictionary *headers) {
184
- return [weakSelf headers:headers];
185
- };
186
- self.claimsSet = ^(JWTClaimsSet *claimsSet) {
187
- return [weakSelf claimsSet:claimsSet];
188
- };
189
- }
190
-
191
- @end
192
-
193
- @implementation JWTEncodingBuilder
194
- #pragma mark - Getters
195
- - (NSDictionary *)internalMixingClaimsPayload {
196
- NSMutableDictionary *dictionary = [@{} mutableCopy];
197
- if (_internalPayload) {
198
- [dictionary addEntriesFromDictionary:_internalPayload];
199
- }
200
-
201
- if (_internalClaimsSet) {
202
- [dictionary addEntriesFromDictionary:[JWTClaimsSetSerializer dictionaryWithClaimsSet:_internalClaimsSet]];
203
- }
204
-
205
- return dictionary;
206
- }
207
-
208
- #pragma mark - Create
209
- + (instancetype)encodePayload:(NSDictionary *)payload {
210
- return ((JWTEncodingBuilder *)[self createWithEmptyChain]).payload(payload);
211
- }
212
-
213
- + (instancetype)encodeClaimsSet:(JWTClaimsSet *)claimsSet {
214
- return ((JWTEncodingBuilder *)[self createWithEmptyChain]).claimsSet(claimsSet);
215
- }
216
-
217
- @end
218
-
219
- @implementation JWTEncodingBuilder (Coding)
220
- - (JWTCodingResultType *)encode {
221
-
222
- NSDictionary *headers = self.internalHeaders;
223
- NSDictionary *payload = self.internalMixingClaimsPayload;
224
-
225
- NSString *encodedMessage = nil;
226
- NSError *error = nil;
227
-
228
- NSArray *holders = self.internalChain.holders;
229
- // ERROR: HOLDERS ARE EMPTY.
230
- if (holders.count == 0) {
231
- error = [JWTErrorDescription errorWithCode:JWTDecodingHoldersChainEmptyError];
232
- }
233
-
234
- for (id <JWTAlgorithmDataHolderProtocol>holder in holders) {
235
- id <JWTAlgorithm>algorithm = holder.internalAlgorithm;
236
- NSData *secretData = holder.internalSecretData;
237
- encodedMessage = [self encodeWithAlgorithm:algorithm withHeaders:headers withPayload:payload withSecretData:secretData withError:&error];
238
- if (encodedMessage && (error == nil)) {
239
- break;
240
- }
241
- }
242
-
243
- JWTCodingResultType *result = nil;
244
-
245
- if (error) {
246
- result = [[JWTCodingResultType alloc] initWithErrorResult:[[JWTCodingResultTypeError alloc] initWithError:error]];
247
- }
248
- else if (encodedMessage) {
249
- result = [[JWTCodingResultType alloc] initWithSuccessResult:[[JWTCodingResultTypeSuccess alloc] initWithEncoded:encodedMessage]];
250
- }
251
- else {
252
- NSLog(@"%@ something went wrong! result is nil!", self.debugDescription);
253
- }
254
-
255
- return result;
256
- }
257
- - (NSString *)encodeWithAlgorithm:(id<JWTAlgorithm>)theAlgorithm withHeaders:(NSDictionary *)theHeaders withPayload:(NSDictionary *)thePayload withSecretData:(NSData *)theSecretData withError:(NSError *__autoreleasing *)theError {
258
- // do it!
259
-
260
- if (!theAlgorithm) {
261
- if (theError) {
262
- *theError = [JWTErrorDescription errorWithCode:JWTUnspecifiedAlgorithmError];
263
- }
264
- return nil;
265
- }
266
-
267
- NSString *theAlgorithmName = [theAlgorithm name];
268
-
269
- if (!theAlgorithmName) {
270
- if (theError) {
271
- *theError = [JWTErrorDescription errorWithCode:JWTUnsupportedAlgorithmError];
272
- }
273
- return nil;
274
- }
275
-
276
- NSDictionary *header = @{
277
- @"alg": theAlgorithmName,
278
- @"typ": @"JWT"
279
- };
280
- NSMutableDictionary *allHeaders = [header mutableCopy];
281
-
282
- if (theHeaders.allKeys.count > 0) {
283
- [allHeaders addEntriesFromDictionary:theHeaders];
284
- }
285
-
286
- NSString *headerSegment = [self encodeSegment:[allHeaders copy] withError:nil];
287
-
288
- if (!headerSegment) {
289
- // encode header segment error
290
- if (theError) {
291
- *theError = [JWTErrorDescription errorWithCode:JWTEncodingHeaderError];
292
- }
293
- return nil;
294
- }
295
-
296
- NSString *payloadSegment = [self encodeSegment:thePayload withError:nil];
297
-
298
- if (!payloadSegment) {
299
- // encode payment segment error
300
- if (theError) {
301
- *theError = [JWTErrorDescription errorWithCode:JWTEncodingPayloadError];
302
- }
303
- return nil;
304
- }
305
-
306
- NSString *signingInput = [@[headerSegment, payloadSegment] componentsJoinedByString:@"."];
307
-
308
- NSString *signedOutput = nil;
309
-
310
- // this happens somewhere outside.
311
-
312
- NSError *algorithmError = nil;
313
- if (theSecretData && [theAlgorithm respondsToSelector:@selector(signHash:key:error:)]) {
314
- NSData *signedOutputData = [theAlgorithm signHash:[signingInput dataUsingEncoding:NSUTF8StringEncoding] key:theSecretData error:&algorithmError];
315
- signedOutput = [JWTBase64Coder base64UrlEncodedStringWithData:signedOutputData];
316
- }
317
- // if (theSecretData && [theAlgorithm respondsToSelector:@selector(encodePayloadData:withSecret:)]) {
318
- // // not sure that it is correct.
319
- // NSData *signedOutputData = [theAlgorithm encodePayloadData:[signingInput dataUsingEncoding:NSUTF8StringEncoding] withSecret:theSecretData];
320
- // signedOutput = [JWTBase64Coder base64UrlEncodedStringWithData:signedOutputData];
321
- // }
322
- // not used now.
323
- // else {
324
- // NSData *signedOutputData = [theAlgorithm encodePayload:signingInput withSecret:self.jwtSecret];
325
- // signedOutput = [JWTBase64Coder base64UrlEncodedStringWithData:signedOutputData];
326
- // }
327
-
328
- if (algorithmError) {
329
- // algorithmError
330
- if (theError) {
331
- *theError = algorithmError;
332
- }
333
- return nil;
334
- }
335
- if (!signedOutput) {
336
- // Make sure signing worked (e.g. we may have issues extracting the key from the PKCS12 bundle if passphrase is incorrect)
337
- if (theError) {
338
- *theError = [JWTErrorDescription errorWithCode:JWTEncodingSigningError];
339
- }
340
- return nil;
341
- }
342
-
343
- return [@[headerSegment, payloadSegment, signedOutput] componentsJoinedByString:@"."];
344
- }
345
-
346
- - (NSString *)encodeSegment:(id)theSegment withError:(NSError *__autoreleasing*)error {
347
- NSData *encodedSegmentData = nil;
348
-
349
- if (theSegment) {
350
- encodedSegmentData = [NSJSONSerialization dataWithJSONObject:theSegment options:0 error:error];
351
- }
352
- else {
353
- // error!
354
- NSError *generatedError = [JWTErrorDescription errorWithCode:JWTInvalidSegmentSerializationError];
355
- if (error) {
356
- *error = generatedError;
357
- }
358
- NSLog(@"%@ Could not encode segment: %@", self.class, generatedError.localizedDescription);
359
- return nil;
360
- }
361
-
362
- NSString *encodedSegment = nil;
363
-
364
- if (encodedSegmentData) {
365
- encodedSegment = [JWTBase64Coder base64UrlEncodedStringWithData:encodedSegmentData];
366
- }
367
-
368
- return encodedSegment;
369
- }
370
-
371
- - (JWTCodingResultType *)result {
372
- return self.encode;
373
- }
374
- @end
375
-
376
- @interface JWTDecodingBuilder ()
377
- #pragma mark - Internal
378
- @property (copy, nonatomic, readwrite) NSString *internalMessage;
379
- @property (nonatomic, readwrite) JWTClaimsSet *internalClaimsSet;
380
-
381
- #pragma mark - Fluent
382
- @property (copy, nonatomic, readwrite) JWTDecodingBuilder *(^message)(NSString *message);
383
- @property (copy, nonatomic, readwrite) JWTDecodingBuilder *(^claimsSet)(JWTClaimsSet *claimsSet);
384
-
385
- @end
386
-
387
- @interface JWTDecodingBuilder (Fluent_Setup)
388
- - (instancetype)message:(NSString *)message;
389
- - (instancetype)claimsSet:(JWTClaimsSet *)claimsSet;
390
- @end
391
- @implementation JWTDecodingBuilder (Fluent_Setup)
392
- - (instancetype)message:(NSString *)message {
393
- self.internalMessage = message;
394
- return self;
395
- }
396
- - (instancetype)claimsSet:(JWTClaimsSet *)claimsSet {
397
- self.internalClaimsSet = claimsSet;
398
- return self;
399
- }
400
- - (void)setupFluent {
401
- [super setupFluent];
402
- __weak typeof(self) weakSelf = self;
403
- self.message = ^(NSString *message) {
404
- return [weakSelf message:message];
405
- };
406
- self.claimsSet = ^(JWTClaimsSet *claimsSet) {
407
- return [weakSelf claimsSet:claimsSet];
408
- };
409
- }
410
- @end
411
-
412
- @implementation JWTDecodingBuilder
413
- #pragma mark - Create
414
- + (instancetype)decodeMessage:(NSString *)message {
415
- return ((JWTDecodingBuilder *)[self createWithEmptyChain]).message(message);
416
- }
417
- @end
418
-
419
- @implementation JWTDecodingBuilder (Coding)
420
- - (JWTCodingResultType *)decode {
421
- // do!
422
- // iterate over items in chain!
423
- // and return if everything ok!
424
- // or return error!
425
- NSError *error = nil;
426
- NSDictionary *decodedDictionary = nil;
427
- NSString *message = self.internalMessage;
428
- NSNumber *options = self.internalOptions;
429
- NSArray *holders = self.internalChain.holders;
430
- JWTClaimsSet *claimsSet = self.internalClaimsSet;
431
-
432
- // ERROR: HOLDERS ARE EMPTY.
433
- if (holders.count == 0) {
434
- error = [JWTErrorDescription errorWithCode:JWTDecodingHoldersChainEmptyError];
435
- }
436
-
437
- for (id <JWTAlgorithmDataHolderProtocol>holder in self.internalChain.holders) {
438
- // try decode!
439
- id <JWTAlgorithm> algorithm = holder.internalAlgorithm;
440
- NSData *secretData = holder.internalSecretData;
441
- // try to retrieve passphrase.
442
- decodedDictionary = [self decodeMessage:message secretData:secretData algorithm:algorithm options:options error:&error];
443
- if (decodedDictionary && (error == nil)) {
444
- break;
445
- }
446
- }
447
-
448
- // claimsSet verification.
449
- JWTCodingResultType *result = nil;
450
- if (error) {
451
- return [[JWTCodingResultType alloc] initWithErrorResult:[[JWTCodingResultTypeError alloc] initWithError:error]];
452
- }
453
-
454
- if (claimsSet) {
455
- BOOL claimsVerified = [JWTClaimsSetVerifier verifyClaimsSet:[JWTClaimsSetSerializer claimsSetWithDictionary:decodedDictionary[JWTCodingResultPayload]] withTrustedClaimsSet:claimsSet];
456
- if (!claimsVerified){
457
- error = [JWTErrorDescription errorWithCode:JWTClaimsSetVerificationFailed];
458
- return [[JWTCodingResultType alloc] initWithErrorResult:[[JWTCodingResultTypeError alloc] initWithError:error]];
459
- }
460
- }
461
-
462
- if (decodedDictionary) {
463
- NSDictionary *headers = decodedDictionary[JWTCodingResultHeaders];
464
- NSDictionary *payload = decodedDictionary[JWTCodingResultPayload];
465
- result = [[JWTCodingResultType alloc] initWithSuccessResult:[[JWTCodingResultTypeSuccess alloc] initWithHeaders:headers withPayload:payload]];
466
- }
467
- else {
468
- NSLog(@"%@ something went wrong! result is nil!", self.debugDescription);
469
- }
470
-
471
- return result;
472
- }
473
-
474
- // Maybe later add algorithmName
475
- - (NSDictionary *)decodeMessage:(NSString *)theMessage secretData:(NSData *)theSecretData algorithm:(id<JWTAlgorithm>)theAlgorithm options:(NSNumber *)theOptions error:(NSError *__autoreleasing *)theError {
476
-
477
- BOOL skipVerification = [theOptions boolValue];
478
- NSString *theAlgorithmName = [theAlgorithm name];
479
-
480
- NSArray *parts = [theMessage componentsSeparatedByString:@"."];
481
-
482
- if (parts.count < 3) {
483
- // generate error?
484
- if (theError) {
485
- *theError = [JWTErrorDescription errorWithCode:JWTInvalidFormatError];
486
- }
487
- return nil;
488
- }
489
-
490
- NSString *headerPart = parts[0];
491
- NSString *payloadPart = parts[1];
492
- NSString *signedPart = parts[2];
493
-
494
- // decode headerPart
495
- NSError *jsonError = nil;
496
- NSData *headerData = [JWTBase64Coder dataWithBase64UrlEncodedString:headerPart];
497
- id headerJSON = [NSJSONSerialization JSONObjectWithData:headerData
498
- options:0
499
- error:&jsonError];
500
- if (jsonError) {
501
- if (theError) {
502
- *theError = [JWTErrorDescription errorWithCode:JWTDecodingHeaderError];
503
- }
504
- return nil;
505
- }
506
- NSDictionary *header = (NSDictionary *)headerJSON;
507
- if (!header) {
508
- if (theError) {
509
- *theError = [JWTErrorDescription errorWithCode:JWTNoHeaderError];
510
- }
511
- return nil;
512
- }
513
-
514
- if (!skipVerification) {
515
- // find algorithm
516
-
517
- //It is insecure to trust the header's value for the algorithm, since
518
- //the signature hasn't been verified yet, so an algorithm must be provided
519
- if (!theAlgorithmName) {
520
- if (theError) {
521
- *theError = [JWTErrorDescription errorWithCode:JWTUnspecifiedAlgorithmError];
522
- }
523
- return nil;
524
- }
525
-
526
- NSString *headerAlgorithmName = header[@"alg"];
527
-
528
- //If the algorithm in the header doesn't match what's expected, verification fails
529
- if (![theAlgorithmName isEqualToString:headerAlgorithmName]) {
530
- if (theError) {
531
- *theError = [JWTErrorDescription errorWithCode:JWTAlgorithmNameMismatchError];
532
- }
533
- return nil;
534
- }
535
-
536
- // A shit logic, but...
537
- // You should copy algorithm if this algorithm conforms to RSAlgorithm (NSCopying).
538
- // Now RS Algorithm holds too much. ( All data about keys :/ )
539
- // Need further investigation.
540
- id<JWTAlgorithm> algorithm = nil;
541
- if ([theAlgorithm conformsToProtocol:@protocol(JWTRSAlgorithm)]) {
542
- algorithm = [(id<JWTRSAlgorithm>)theAlgorithm copyWithZone:nil];
543
- }
544
- else {
545
- algorithm = [JWTAlgorithmFactory algorithmByName:theAlgorithmName];
546
- }
547
-
548
- if (!algorithm) {
549
- if (theError) {
550
- *theError = [JWTErrorDescription errorWithCode:JWTUnsupportedAlgorithmError];
551
- }
552
- return nil;
553
- }
554
-
555
- // Verify the signed part
556
- NSString *signingInput = [@[headerPart, payloadPart] componentsJoinedByString:@"."];
557
- BOOL signatureValid = NO;
558
-
559
- NSError *algorithmError = nil;
560
- if (theSecretData && [algorithm respondsToSelector:@selector(verifyHash:signature:key:error:)]) {
561
- signatureValid =
562
- //[algorithm verifySignedInput:signingInput withSignature:signedPart verificationKeyData:theSecretData];
563
- [algorithm verifyHash:[signingInput dataUsingEncoding:NSUTF8StringEncoding] signature:[JWTBase64Coder dataWithBase64UrlEncodedString:signedPart] key:theSecretData error:&algorithmError];
564
- }
565
- // if (theSecretData && [algorithm respondsToSelector:@selector(verifySignedInput:withSignature:verificationKeyData:)]) {
566
- // signatureValid = [algorithm verifySignedInput:signingInput withSignature:signedPart verificationKeyData:theSecretData];
567
- //
568
- // // Not used now.
569
- //// } else {
570
- //// signatureValid = [algorithm verifySignedInput:signingInput withSignature:signedPart verificationKey:theSecret];
571
- // }
572
-
573
- if (algorithmError) {
574
- if (theError) {
575
- *theError = algorithmError;
576
- }
577
- return nil;
578
- }
579
- if (!signatureValid) {
580
- if (theError) {
581
- *theError = [JWTErrorDescription errorWithCode:JWTInvalidSignatureError];
582
- }
583
- return nil;
584
- }
585
- }
586
-
587
- // and decode payload
588
- jsonError = nil;
589
- NSData *payloadData = [JWTBase64Coder dataWithBase64UrlEncodedString:payloadPart];
590
- id payloadJSON = [NSJSONSerialization JSONObjectWithData:payloadData
591
- options:0
592
- error:&jsonError];
593
- if (jsonError) {
594
- if (theError) {
595
- *theError = [JWTErrorDescription errorWithCode:JWTDecodingPayloadError];
596
- }
597
- return nil;
598
- }
599
- NSDictionary *payload = (NSDictionary *)payloadJSON;
600
-
601
- if (!payload) {
602
- if (theError) {
603
- *theError = [JWTErrorDescription errorWithCode:JWTNoPayloadError];
604
- }
605
- return nil;
606
- }
607
-
608
- NSDictionary *result = @{
609
- JWTCodingResultHeaders : header,
610
- JWTCodingResultPayload : payload
611
- };
612
-
613
- return result;
614
- }
615
-
616
- - (JWTCodingResultType *)result {
617
- return self.decode;
618
- }
619
- @end