@appzung/react-native-code-push 9.0.2 → 10.0.0-rc1

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 (191) hide show
  1. package/CodePush.js +22 -19
  2. package/LICENSE.md +1 -1
  3. package/README.md +159 -298
  4. package/android/app/.gradle/config.properties +2 -0
  5. package/android/app/build.gradle +1 -1
  6. package/android/app/local.properties +8 -0
  7. package/android/app/src/main/java/com/microsoft/codepush/react/CodePush.java +27 -21
  8. package/android/app/src/main/java/com/microsoft/codepush/react/CodePushBuilder.java +5 -5
  9. package/android/app/src/main/java/com/microsoft/codepush/react/CodePushConstants.java +1 -1
  10. package/android/app/src/main/java/com/microsoft/codepush/react/CodePushDialog.java +1 -1
  11. package/android/app/src/main/java/com/microsoft/codepush/react/CodePushInstallMode.java +2 -2
  12. package/android/app/src/main/java/com/microsoft/codepush/react/CodePushInvalidPublicKeyException.java +2 -2
  13. package/android/app/src/main/java/com/microsoft/codepush/react/CodePushInvalidUpdateException.java +1 -1
  14. package/android/app/src/main/java/com/microsoft/codepush/react/CodePushMalformedDataException.java +2 -2
  15. package/android/app/src/main/java/com/microsoft/codepush/react/CodePushNativeModule.java +5 -5
  16. package/android/app/src/main/java/com/microsoft/codepush/react/CodePushNotInitializedException.java +2 -2
  17. package/android/app/src/main/java/com/microsoft/codepush/react/CodePushTelemetryManager.java +14 -14
  18. package/android/app/src/main/java/com/microsoft/codepush/react/CodePushUnknownException.java +2 -2
  19. package/android/app/src/main/java/com/microsoft/codepush/react/CodePushUpdateManager.java +1 -1
  20. package/android/app/src/main/java/com/microsoft/codepush/react/CodePushUpdateState.java +2 -2
  21. package/android/app/src/main/java/com/microsoft/codepush/react/CodePushUpdateUtils.java +1 -1
  22. package/android/app/src/main/java/com/microsoft/codepush/react/CodePushUtils.java +1 -1
  23. package/android/app/src/main/java/com/microsoft/codepush/react/DownloadProgress.java +1 -1
  24. package/android/app/src/main/java/com/microsoft/codepush/react/DownloadProgressCallback.java +1 -1
  25. package/android/app/src/main/java/com/microsoft/codepush/react/FileUtils.java +1 -1
  26. package/android/app/src/main/java/com/microsoft/codepush/react/ReactInstanceHolder.java +1 -1
  27. package/android/app/src/main/java/com/microsoft/codepush/react/SettingsManager.java +1 -1
  28. package/android/app/src/main/java/com/microsoft/codepush/react/TLSSocketFactory.java +1 -1
  29. package/android/build.gradle +1 -1
  30. package/android/codepush.gradle +3 -3
  31. package/docs/advanced-usage.md +56 -0
  32. package/docs/api-android.md +12 -75
  33. package/docs/api-ios.md +5 -17
  34. package/docs/api-js.md +18 -55
  35. package/docs/setup-android.md +15 -397
  36. package/docs/setup-ios.md +24 -198
  37. package/docs/setup-windows.md +7 -74
  38. package/ios/CodePush/CodePush.h +4 -4
  39. package/ios/CodePush/CodePush.m +8 -8
  40. package/ios/CodePush/CodePushConfig.m +14 -11
  41. package/ios/CodePush/CodePushPackage.m +60 -60
  42. package/ios/CodePush/CodePushTelemetryManager.m +13 -13
  43. package/ios/CodePush.xcodeproj/project.pbxproj +1 -562
  44. package/package.json +27 -24
  45. package/react-native.config.js +1 -1
  46. package/scripts/generateBundledResourcesHash.js +1 -1
  47. package/scripts/getFilesInFolder.js +1 -1
  48. package/scripts/recordFilesBeforeBundleCommand.js +1 -1
  49. package/typings/react-native-code-push.d.ts +22 -22
  50. package/windows/CodePush/CodePushConfig.cpp +3 -3
  51. package/windows/CodePush/CodePushConfig.h +3 -3
  52. package/windows/CodePush/CodePushNativeModule.cpp +27 -27
  53. package/windows/CodePush/CodePushNativeModule.h +4 -4
  54. package/windows/CodePush/CodePushTelemetryManager.cpp +12 -12
  55. package/windows/CodePush/CodePushTelemetryManager.h +1 -1
  56. package/.azurepipelines/build-rn-code-push-1es.yml +0 -104
  57. package/.azurepipelines/test-rn-code-push.yml +0 -94
  58. package/.config/CredScanSuppressions.json +0 -14
  59. package/SECURITY.md +0 -41
  60. package/docs/multi-deployment-testing-android.md +0 -148
  61. package/docs/multi-deployment-testing-ios.md +0 -59
  62. package/ios/CodePush/Base64/Base64/MF_Base64Additions.h +0 -34
  63. package/ios/CodePush/Base64/Base64/MF_Base64Additions.m +0 -252
  64. package/ios/CodePush/Base64/README.md +0 -47
  65. package/ios/CodePush/JWT/Core/Algorithms/Base/JWTAlgorithm.h +0 -69
  66. package/ios/CodePush/JWT/Core/Algorithms/Base/JWTAlgorithmFactory.h +0 -16
  67. package/ios/CodePush/JWT/Core/Algorithms/Base/JWTAlgorithmFactory.m +0 -51
  68. package/ios/CodePush/JWT/Core/Algorithms/Base/JWTAlgorithmNone.h +0 -15
  69. package/ios/CodePush/JWT/Core/Algorithms/Base/JWTAlgorithmNone.m +0 -55
  70. package/ios/CodePush/JWT/Core/Algorithms/ESFamily/JWTAlgorithmESBase.h +0 -24
  71. package/ios/CodePush/JWT/Core/Algorithms/ESFamily/JWTAlgorithmESBase.m +0 -41
  72. package/ios/CodePush/JWT/Core/Algorithms/HSFamily/JWTAlgorithmHSBase.h +0 -28
  73. package/ios/CodePush/JWT/Core/Algorithms/HSFamily/JWTAlgorithmHSBase.m +0 -205
  74. package/ios/CodePush/JWT/Core/Algorithms/Holders/JWTAlgorithmDataHolder.h +0 -103
  75. package/ios/CodePush/JWT/Core/Algorithms/Holders/JWTAlgorithmDataHolder.m +0 -322
  76. package/ios/CodePush/JWT/Core/Algorithms/Holders/JWTAlgorithmDataHolderChain.h +0 -37
  77. package/ios/CodePush/JWT/Core/Algorithms/Holders/JWTAlgorithmDataHolderChain.m +0 -145
  78. package/ios/CodePush/JWT/Core/Algorithms/RSFamily/JWTAlgorithmRSBase.h +0 -35
  79. package/ios/CodePush/JWT/Core/Algorithms/RSFamily/JWTAlgorithmRSBase.m +0 -551
  80. package/ios/CodePush/JWT/Core/Algorithms/RSFamily/JWTRSAlgorithm.h +0 -23
  81. package/ios/CodePush/JWT/Core/Algorithms/RSFamily/RSKeys/JWTCryptoKey.h +0 -43
  82. package/ios/CodePush/JWT/Core/Algorithms/RSFamily/RSKeys/JWTCryptoKey.m +0 -230
  83. package/ios/CodePush/JWT/Core/Algorithms/RSFamily/RSKeys/JWTCryptoKeyExtractor.h +0 -31
  84. package/ios/CodePush/JWT/Core/Algorithms/RSFamily/RSKeys/JWTCryptoKeyExtractor.m +0 -113
  85. package/ios/CodePush/JWT/Core/Algorithms/RSFamily/RSKeys/JWTCryptoSecurity.h +0 -38
  86. package/ios/CodePush/JWT/Core/Algorithms/RSFamily/RSKeys/JWTCryptoSecurity.m +0 -500
  87. package/ios/CodePush/JWT/Core/ClaimSet/JWTClaim.h +0 -18
  88. package/ios/CodePush/JWT/Core/ClaimSet/JWTClaim.m +0 -214
  89. package/ios/CodePush/JWT/Core/ClaimSet/JWTClaimsSet.h +0 -23
  90. package/ios/CodePush/JWT/Core/ClaimSet/JWTClaimsSet.m +0 -29
  91. package/ios/CodePush/JWT/Core/ClaimSet/JWTClaimsSetSerializer.h +0 -19
  92. package/ios/CodePush/JWT/Core/ClaimSet/JWTClaimsSetSerializer.m +0 -68
  93. package/ios/CodePush/JWT/Core/ClaimSet/JWTClaimsSetVerifier.h +0 -18
  94. package/ios/CodePush/JWT/Core/ClaimSet/JWTClaimsSetVerifier.m +0 -72
  95. package/ios/CodePush/JWT/Core/Coding/JWTCoding+ResultTypes.h +0 -67
  96. package/ios/CodePush/JWT/Core/Coding/JWTCoding+ResultTypes.m +0 -111
  97. package/ios/CodePush/JWT/Core/Coding/JWTCoding+VersionOne.h +0 -119
  98. package/ios/CodePush/JWT/Core/Coding/JWTCoding+VersionOne.m +0 -307
  99. package/ios/CodePush/JWT/Core/Coding/JWTCoding+VersionThree.h +0 -94
  100. package/ios/CodePush/JWT/Core/Coding/JWTCoding+VersionThree.m +0 -619
  101. package/ios/CodePush/JWT/Core/Coding/JWTCoding+VersionTwo.h +0 -164
  102. package/ios/CodePush/JWT/Core/Coding/JWTCoding+VersionTwo.m +0 -514
  103. package/ios/CodePush/JWT/Core/Coding/JWTCoding.h +0 -24
  104. package/ios/CodePush/JWT/Core/Coding/JWTCoding.m +0 -11
  105. package/ios/CodePush/JWT/Core/FrameworkSupplement/JWT.h +0 -52
  106. package/ios/CodePush/JWT/Core/FrameworkSupplement/Map.modulemap +0 -5
  107. package/ios/CodePush/JWT/Core/Supplement/JWTBase64Coder.h +0 -28
  108. package/ios/CodePush/JWT/Core/Supplement/JWTBase64Coder.m +0 -70
  109. package/ios/CodePush/JWT/Core/Supplement/JWTDeprecations.h +0 -22
  110. package/ios/CodePush/JWT/Core/Supplement/JWTErrorDescription.h +0 -34
  111. package/ios/CodePush/JWT/Core/Supplement/JWTErrorDescription.m +0 -73
  112. package/ios/CodePush/JWT/LICENSE +0 -19
  113. package/ios/CodePush/JWT/README.md +0 -489
  114. package/ios/CodePush/SSZipArchive/Info.plist +0 -26
  115. package/ios/CodePush/SSZipArchive/README.md +0 -1
  116. package/ios/CodePush/SSZipArchive/SSZipArchive.h +0 -178
  117. package/ios/CodePush/SSZipArchive/SSZipArchive.m +0 -1496
  118. package/ios/CodePush/SSZipArchive/SSZipCommon.h +0 -71
  119. package/ios/CodePush/SSZipArchive/Supporting Files/PrivacyInfo.xcprivacy +0 -23
  120. package/ios/CodePush/SSZipArchive/include/ZipArchive.h +0 -25
  121. package/ios/CodePush/SSZipArchive/minizip/LICENSE +0 -17
  122. package/ios/CodePush/SSZipArchive/minizip/mz.h +0 -273
  123. package/ios/CodePush/SSZipArchive/minizip/mz_compat.c +0 -1306
  124. package/ios/CodePush/SSZipArchive/minizip/mz_compat.h +0 -346
  125. package/ios/CodePush/SSZipArchive/minizip/mz_crypt.c +0 -187
  126. package/ios/CodePush/SSZipArchive/minizip/mz_crypt.h +0 -65
  127. package/ios/CodePush/SSZipArchive/minizip/mz_crypt_apple.c +0 -526
  128. package/ios/CodePush/SSZipArchive/minizip/mz_os.c +0 -348
  129. package/ios/CodePush/SSZipArchive/minizip/mz_os.h +0 -176
  130. package/ios/CodePush/SSZipArchive/minizip/mz_os_posix.c +0 -350
  131. package/ios/CodePush/SSZipArchive/minizip/mz_strm.c +0 -556
  132. package/ios/CodePush/SSZipArchive/minizip/mz_strm.h +0 -132
  133. package/ios/CodePush/SSZipArchive/minizip/mz_strm_buf.c +0 -383
  134. package/ios/CodePush/SSZipArchive/minizip/mz_strm_buf.h +0 -42
  135. package/ios/CodePush/SSZipArchive/minizip/mz_strm_mem.c +0 -269
  136. package/ios/CodePush/SSZipArchive/minizip/mz_strm_mem.h +0 -48
  137. package/ios/CodePush/SSZipArchive/minizip/mz_strm_os.h +0 -40
  138. package/ios/CodePush/SSZipArchive/minizip/mz_strm_os_posix.c +0 -203
  139. package/ios/CodePush/SSZipArchive/minizip/mz_strm_pkcrypt.c +0 -334
  140. package/ios/CodePush/SSZipArchive/minizip/mz_strm_pkcrypt.h +0 -46
  141. package/ios/CodePush/SSZipArchive/minizip/mz_strm_split.c +0 -429
  142. package/ios/CodePush/SSZipArchive/minizip/mz_strm_split.h +0 -43
  143. package/ios/CodePush/SSZipArchive/minizip/mz_strm_wzaes.c +0 -360
  144. package/ios/CodePush/SSZipArchive/minizip/mz_strm_wzaes.h +0 -46
  145. package/ios/CodePush/SSZipArchive/minizip/mz_strm_zlib.c +0 -389
  146. package/ios/CodePush/SSZipArchive/minizip/mz_strm_zlib.h +0 -43
  147. package/ios/CodePush/SSZipArchive/minizip/mz_zip.c +0 -2782
  148. package/ios/CodePush/SSZipArchive/minizip/mz_zip.h +0 -262
  149. package/ios/CodePush/SSZipArchive/minizip/mz_zip_rw.c +0 -1942
  150. package/ios/CodePush/SSZipArchive/minizip/mz_zip_rw.h +0 -285
  151. package/scripts/postlink/android/postlink.js +0 -87
  152. package/scripts/postlink/ios/postlink.js +0 -116
  153. package/scripts/postlink/run.js +0 -11
  154. package/scripts/postunlink/android/postunlink.js +0 -74
  155. package/scripts/postunlink/ios/postunlink.js +0 -87
  156. package/scripts/postunlink/run.js +0 -11
  157. package/scripts/tools/linkToolsAndroid.js +0 -57
  158. package/scripts/tools/linkToolsIos.js +0 -130
  159. package/windows-legacy/CodePush/CodePush.csproj +0 -128
  160. package/windows-legacy/CodePush/CodePushUtils.cs +0 -47
  161. package/windows-legacy/CodePush/FileUtils.cs +0 -40
  162. package/windows-legacy/CodePush/Properties/AssemblyInfo.cs +0 -29
  163. package/windows-legacy/CodePush/Properties/CodePush.rd.xml +0 -33
  164. package/windows-legacy/CodePush/UpdateManager.cs +0 -305
  165. package/windows-legacy/CodePush/UpdateUtils.cs +0 -46
  166. package/windows-legacy/CodePush.Net46/Adapters/Http/HttpProgress.cs +0 -28
  167. package/windows-legacy/CodePush.Net46/Adapters/Storage/ApplicationDataContainer.cs +0 -106
  168. package/windows-legacy/CodePush.Net46/CodePush.Net46.csproj +0 -103
  169. package/windows-legacy/CodePush.Net46/CodePushUtils.cs +0 -158
  170. package/windows-legacy/CodePush.Net46/FileUtils.cs +0 -55
  171. package/windows-legacy/CodePush.Net46/Properties/AssemblyInfo.cs +0 -36
  172. package/windows-legacy/CodePush.Net46/UpdateManager.cs +0 -330
  173. package/windows-legacy/CodePush.Net46/UpdateUtils.cs +0 -70
  174. package/windows-legacy/CodePush.Net46/packages.config +0 -5
  175. package/windows-legacy/CodePush.Net46.Test/ApplicationDataContainerTest.cs +0 -105
  176. package/windows-legacy/CodePush.Net46.Test/CodePush.Net46.Test.csproj +0 -137
  177. package/windows-legacy/CodePush.Net46.Test/Properties/AssemblyInfo.cs +0 -36
  178. package/windows-legacy/CodePush.Net46.Test/TelemetryManagerTest.cs +0 -117
  179. package/windows-legacy/CodePush.Net46.Test/app.config +0 -11
  180. package/windows-legacy/CodePush.Net46.Test/packages.config +0 -4
  181. package/windows-legacy/CodePush.Shared/CodePush.Shared.projitems +0 -22
  182. package/windows-legacy/CodePush.Shared/CodePush.Shared.shproj +0 -13
  183. package/windows-legacy/CodePush.Shared/CodePushConstants.cs +0 -35
  184. package/windows-legacy/CodePush.Shared/CodePushNativeModule.cs +0 -329
  185. package/windows-legacy/CodePush.Shared/CodePushReactPackage.cs +0 -235
  186. package/windows-legacy/CodePush.Shared/CodePushUtils.cs +0 -70
  187. package/windows-legacy/CodePush.Shared/InstallMode.cs +0 -9
  188. package/windows-legacy/CodePush.Shared/MinimumBackgroundListener.cs +0 -44
  189. package/windows-legacy/CodePush.Shared/SettingsManager.cs +0 -148
  190. package/windows-legacy/CodePush.Shared/TelemetryManager.cs +0 -250
  191. package/windows-legacy/CodePush.Shared/UpdateState.cs +0 -9
@@ -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