@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,489 +0,0 @@
1
- [![JWT](http://jwt.io/assets/logo.svg)](https://jwt.io/)
2
-
3
- [![Build Status](https://travis-ci.org/yourkarma/JWT.svg?branch=master)](https://travis-ci.org/yourkarma/JWT)
4
- [![Pod Version](http://img.shields.io/cocoapods/v/JWT.svg?style=flat)](http://cocoadocs.org/docsets/JWT)
5
- [![Pod Platform](http://img.shields.io/cocoapods/p/JWT.svg?style=flat)](http://cocoadocs.org/docsets/JWT)
6
- [![Reference Status](https://www.versioneye.com/objective-c/jwt/reference_badge.svg?style=flat)](https://www.versioneye.com/objective-c/jwt/references)
7
-
8
- # JWT
9
-
10
- A [JSON Web Token][] implementation in Objective-C.
11
-
12
- [JSON Web Token]: http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html
13
-
14
- # What's new in master and bleeding edge.
15
- Nothing here.
16
-
17
- # What's new in Version 3.0
18
-
19
- * Fluent style expanded.
20
- * Coding result types added.
21
- * Algorithms and data holders.
22
- * Algorithms and data holders chain.
23
- * Keys loaded from Pem files.
24
-
25
- ## Introduction to Algorithms data holders and chain.
26
- You have algorithm, secret data and unknown jwt token.
27
- Let's try to decode it.
28
-
29
- ```objective-c
30
- // create token
31
- NSString *token = @"...";
32
-
33
- // possible that algorithm could return error.
34
- // you could try use algorithm and data chain.
35
-
36
- NSString *firstSecret = @"first";
37
- NSString *firstAlgorithmName = JWTAlgorithmNameHS384;
38
-
39
- id <JWTAlgorithmDataHolderProtocol> firstHolder = [JWTAlgorithmHSFamilyDataHolder new].algorithmName(firstAlgorithmName).secret(firstSecret);
40
-
41
- id <JWTAlgorithmDataHolderProtocol> errorHolder = [JWTAlgorithmNoneDataHolder new];
42
-
43
- // chain together.
44
- JWTAlgorithmDataHolderChain *chain = [[JWTAlgorithmDataHolderChain alloc] initWithHolders:@[firstHolder, errorHolder]];
45
-
46
- // or add them in builder
47
- [JWTDecodingBuilder decodeMessage:token].addHolder(firstHolder).addHolder(errorHolder);
48
-
49
- // or add them as chain
50
- [JWTDecodingBuilder decodeMessage:token].chain(chain);
51
- ```
52
-
53
- Maybe you would like to try different secrets.
54
-
55
- ```objective-c
56
- // possible that your algorithm has several secrets.
57
- // you don't know which secret to use.
58
- // but you want to decode it.
59
- NSString *firstSecret = @"first";
60
- NSArray *manySecrets = @[@"second", @"third", @"forty two"];
61
- // translate to data
62
- NSArray *manySecretsData = @[];
63
- for (NSString *secret in manySecrets) {
64
- NSData *secretData = [JWTBase64Coder dataWithBase64UrlEncodedString:secret];
65
- if (secret) {
66
- manySecretsData = [manySecretsData arrayByAddingObject:secretData];
67
- }
68
- }
69
-
70
- NSString *algorithmName = JWTAlgorithmNameHS384;
71
-
72
- id <JWTAlgorithmDataHolderProtocol> firstHolder = [JWTAlgorithmHSFamilyDataHolder new].algorithmName(algorithmName).secret(firstSecret);
73
-
74
- // lets create chain
75
- JWTAlgorithmDataHolderChain *chain = [JWTAlgorithmDataHolderChain chainWithHolder:firstHolder];
76
-
77
- // and lets populate chain with secrets.
78
- NSLog(@"chain has: %@", chain.debugDescription);
79
-
80
- JWTAlgorithmDataHolderChain *expandedChain = [chain chainByPopulatingAlgorithm:firstHolder.currentAlgorithm withManySecretData:manySecretsData];
81
-
82
- // now we have expanded chain with many secrets and one algorithm.
83
- NSLog(@"expanded chain has: %@", expandedChain.debugDescription);
84
- ```
85
-
86
- ## Decode and encode with chain.
87
-
88
- ```objective-c
89
- JWTClaimsSet *claimsSet = [[JWTClaimsSet alloc] init];
90
- // fill it
91
- claimsSet.issuer = @"Facebook";
92
- claimsSet.subject = @"Token";
93
- claimsSet.audience = @"https://jwt.io";
94
-
95
- // encode it
96
- NSString *secret = @"secret";
97
- NSString *algorithmName = @"HS384";
98
- NSDictionary *headers = @{@"custom":@"value"};
99
-
100
- id<JWTAlgorithmDataHolderProtocol>holder = [JWTAlgorithmHSFamilyDataHolder new].algorithmName(algorithmName).secret(secret);
101
-
102
- JWTCodingResultType *result = [JWTEncodingBuilder encodeClaimsSet:claimsSet].headers(headers).addHolder(holder).result;
103
-
104
- NSString *encodedToken = result.successResult.encoded;
105
- if (result.successResult) {
106
- // handle encoded result
107
- NSLog(@"encoded result: %@", result.successResult.encoded);
108
- }
109
- else {
110
- // handle error
111
- NSLog(@"encode failed, error: %@", result.errorResult.error);
112
- }
113
-
114
- // decode it
115
- // you can set any property that you want, all properties are optional
116
- JWTClaimsSet *trustedClaimsSet = [claimsSet copy];
117
-
118
- NSNumber *options = @(JWTCodingDecodingOptionsNone);
119
- NSString *yourJwt = encodedToken; // from previous example
120
- JWTCodingResultType *decodedResult = [JWTDecodingBuilder decodeMessage:yourJwt].claimsSet(claimsSet).addHolder(holder).options(options).and.result;
121
-
122
- if (decodedResult.successResult) {
123
- // handle decoded result
124
- NSLog(@"decoded result: %@", decodedResult.successResult.headerAndPayloadDictionary);
125
- NSLog(@"headers: %@", decodedResult.successResult.headers);
126
- NSLog(@"payload: %@", decodedResult.successResult.payload);
127
- }
128
- else {
129
- // handle error
130
- NSLog(@"decode failed, error: %@", decodedResult.errorResult.error);
131
- }
132
- ```
133
-
134
- ## Keys loaded from Pem files.
135
-
136
- You have a key in pem file. And you want to use it directly for sign/verify.
137
- Suppose, that "public_rsa.pem" and "private_rsa.pem" are public and private keys in pem format.
138
- ```objective-c
139
- // Load keys
140
- - (NSString *)pemKeyStringFromFileWithName:(NSString *)string inBundle:(NSBundle *)bundle {
141
- NSURL *fileURL = [bundle URLForResource:name withExtension:@"pem"];
142
- NSError *error = nil;
143
- NSString *fileContent = [NSString stringWithContentsOfURL:fileURL encoding:NSUTF8StringEncoding error:&error];
144
- if (error) {
145
- NSLog(@"%@ error: %@", self.debugDescription, error);
146
- return nil;
147
- }
148
- }
149
-
150
- // Sign and verify
151
- - (void)signAndVerifyWithPrivateKeyPemString:(NSString *)privateKey publicKeyPemString:(NSString *)publicKey privateKeyPassphrase:(NSString *)passphrase {
152
- NSString *algorithmName = @"RS256";
153
-
154
- id <JWTAlgorithmDataHolderProtocol> signDataHolder = [JWTAlgorithmRSFamilyDataHolder new].keyExtractorType([JWTCryptoKeyExtractor privateKeyWithPEMBase64].type).privateKeyCertificatePassphrase(passphrase).algorithmName(algorithmName).secret(privateKey);
155
-
156
- id <JWTAlgorithmDataHolderProtocol> verifyDataHolder = [JWTAlgorithmRSFamilyDataHolder new].keyExtractorType([JWTCryptoKeyExtractor publicKeyWithPEMBase64].type).algorithmName(algorithmName).secret(publicKey);
157
-
158
- // sign
159
- NSDictionary *payloadDictionary = @{@"hello": @"world"};
160
-
161
- JWTCodingBuilder *signBuilder = [JWTEncodingBuilder encodePayload:payloadDictionary].addHolder(signDataHolder);
162
- JWTCodingResultType *signResult = signBuilder.result;
163
- NSString *token = nil;
164
- if (signResult.successResult) {
165
- // success
166
- NSLog(@"%@ success: %@", self.debugDescription, signResult.successResult.encoded);
167
- token = signResult.successResult.encoded;
168
- }
169
- else {
170
- // error
171
- NSLog(@"%@ error: %@", self.debugDescription, signResult.errorResult.error);
172
- }
173
-
174
- // verify
175
- if (token == nil) {
176
- NSLog(@"something wrong");
177
- }
178
-
179
- JWTCodingBuilder *verifyBuilder = [JWTDecodingBuilder decodeMessage:token].addHolder(verifyDataHolder);
180
- JWTCodingResultType *verifyResult = verifyBuilder.result;
181
- if (verifyResult.successResult) {
182
- // success
183
- NSLog(@"%@ success: %@", self.debugDescription, verifyResult.successResult.payload);
184
- token = verifyResult.successResult.encoded;
185
- }
186
- else {
187
- // error
188
- NSLog(@"%@ error: %@", self.debugDescription, verifyResult.errorResult.error);
189
- }
190
- }
191
- ```
192
-
193
- # Experiments in Version 2.0
194
- ## Whitelists possible algorithms.
195
- When you need to decode jwt by several algorithms you could specify their names in whitelist.
196
- Later this feature possible will migrate to options.
197
- For example, someone returns result or error.
198
- ### Limitations
199
- Restricted to pair (algorithm or none) due to limitations of unique `secret`.
200
-
201
- ```objective-c
202
- NSString *jwtResultOrError = /*...*/;
203
- NSString *secret = @"secret";
204
- JWTBuilder *builder = [JWT decodeMessage:jwtResultOrError].secret(@"secret").whitelist(@[@"HS256", @"none"]);
205
- NSDictionary *decoded = builder.decode;
206
- if (builder.jwtError) {
207
- // oh!
208
- }
209
- else {
210
- NSDictionary *payload = decoded[@"payload"];
211
- NSDictionary *header = decoded[@"header"];
212
- NSArray *tries = decoded[@"tries"]; // will be evolded into something appropriate later.
213
- }
214
- ```
215
-
216
- # What's new in Version 2.0
217
-
218
- * Old plain style deprecated.
219
- * Use modern fluent style instead.
220
-
221
- ```objective-c
222
- NSDictionary *payload = @{@"foo" : @"bar"};
223
- NSString *secret = @"secret";
224
- id<JWTAlgorithm> algorithm = [JWTAlgorithmFactory algorithmByName:@"HS256"];
225
- // Deprecated
226
- [JWT encodePayload:payload withSecret:secret algorithm:algorithm];
227
-
228
- // Modern
229
- [JWTBuilder encodePayload:payload].secret(secret).algorithm(algorithm).encode;
230
- ```
231
-
232
- # Installation
233
-
234
- Add the following to your [CocoaPods][] Podfile:
235
-
236
- pod "JWT"
237
-
238
- [CocoaPods]: http://cocoapods.org
239
-
240
- Install via Cartfile:
241
-
242
- github "yourkarma/JWT" "master"
243
-
244
- and `import JWT`
245
-
246
- # Documentation
247
- # Usage
248
-
249
- ## JWTBuilder
250
-
251
- To encode & decode JWTs, use fluent style with the `JWTBuilder` interface
252
-
253
- ```objective-c
254
- + (JWTBuilder *)encodePayload:(NSDictionary *)payload;
255
- + (JWTBuilder *)encodeClaimsSet:(JWTClaimsSet *)claimsSet;
256
- + (JWTBuilder *)decodeMessage:(NSString *)message;
257
- ```
258
-
259
- As you can see, JWTBuilder has interface from both decoding and encoding.
260
-
261
- Note: some attributes are encode-only or decode-only.
262
-
263
- #pragma mark - Encode only
264
- *payload;
265
- *headers;
266
- *algorithm;
267
-
268
- #pragma mark - Decode only
269
- *message
270
- *options // as forcedOption from jwt decode functions interface.
271
- *whitelist //optional array of algorithm names to whitelist for decoding
272
-
273
- You can inspect JWTBuilder by `jwt`-prefixed attributes.
274
-
275
- You can set JWTBuilder attributes by fluent style (block interface).
276
-
277
- You can encode arbitrary payloads like so:
278
-
279
- ```objective-c
280
- NSDictionary *payload = @{@"foo" : @"bar"};
281
- NSString *secret = @"secret";
282
- id<JWTAlgorithm> algorithm = [JWTAlgorithmFactory algorithmByName:@"HS256"];
283
-
284
- [JWTBuilder encodePayload:payload].secret(@"secret").algorithm(algorithm).encode;
285
- ```
286
-
287
- If you're using reserved claim names you can encode your claim set like so (all properties are optional):
288
-
289
- ```objective-c
290
- JWTClaimsSet *claimsSet = [[JWTClaimsSet alloc] init];
291
- claimsSet.issuer = @"Facebook";
292
- claimsSet.subject = @"Token";
293
- claimsSet.audience = @"http://yourkarma.com";
294
- claimsSet.expirationDate = [NSDate distantFuture];
295
- claimsSet.notBeforeDate = [NSDate distantPast];
296
- claimsSet.issuedAt = [NSDate date];
297
- claimsSet.identifier = @"thisisunique";
298
- claimsSet.type = @"test";
299
-
300
- NSString *secret = @"secret";
301
- id<JWTAlgorithm> algorithm = [JWTAlgorithmFactory algorithmByName:@"HS256"];
302
-
303
- [JWTBuilder encodeClaimsSet:claimsSet].secret(secret).algorithm(algorithm).encode;
304
- ```
305
-
306
- You can decode a JWT like so:
307
-
308
- ```objective-c
309
- NSString *jwtToken = @"header.payload.signature";
310
- NSString *secret = @"secret";
311
- NSString *algorithmName = @"HS256"; //Must specify an algorithm to use
312
-
313
- NSDictionary *payload = [JWTBuilder decodeMessage:jwtToken].secret(secret).algorithmName(algorithmName).decode;
314
- ```
315
-
316
- If you want to check claims while decoding, you could use next sample of code (all properties are optional):
317
-
318
- ```objective-c
319
- // Trusted Claims Set
320
- JWTClaimsSet *trustedClaimsSet = [[JWTClaimsSet alloc] init];
321
- trustedClaimsSet.issuer = @"Facebook";
322
- trustedClaimsSet.subject = @"Token";
323
- trustedClaimsSet.audience = @"http://yourkarma.com";
324
- trustedClaimsSet.expirationDate = [NSDate date];
325
- trustedClaimsSet.notBeforeDate = [NSDate date];
326
- trustedClaimsSet.issuedAt = [NSDate date];
327
- trustedClaimsSet.identifier = @"thisisunique";
328
- trustedClaimsSet.type = @"test";
329
-
330
- NSString *message = @"encodedJwt";
331
- NSString *secret = @"secret";
332
- NSString *algorithmName = @"chosenAlgorithm"
333
-
334
- JWTBuilder *builder = [JWTBuilder decodeMessage:jwt].secret(secret).algorithmName(algorithmName).claimsSet(trustedClaimsSet);
335
- NSDictionary *payload = builder.decode;
336
-
337
- if (builder.jwtError == nil) {
338
- // do your work here
339
- }
340
- else {
341
- // handle error
342
- }
343
- ```
344
-
345
- If you want to enforce a whitelist of valid algorithms:
346
-
347
- ```objective-c
348
- NSArray *whitelist = @[@"HS256", @"HS512"];
349
- NSString *jwtToken = @"header.payload.signature";
350
- NSString *secret = @"secret";
351
- NSString *algorithmName = @"HS256";
352
-
353
- //Returns nil
354
- NSDictionary *payload = [JWTBuilder decodeMessage:jwtToken].secret(secret).algorithmName(algorithmName).whitelist(@[]).decode;
355
-
356
- //Returns the decoded payload
357
- NSDictionary *payload = [JWTBuilder decodeMessage:jwtToken].secret(secret).algorithmName(algorithmName).whitelist(whitelist).decode;
358
- ```
359
-
360
- ### Encode / Decode Example
361
-
362
- ```objective-c
363
- // suppose, that you create ClaimsSet
364
- JWTClaimsSet *claimsSet = [[JWTClaimsSet alloc] init];
365
- // fill it
366
- claimsSet.issuer = @"Facebook";
367
- claimsSet.subject = @"Token";
368
- claimsSet.audience = @"http://yourkarma.com";
369
-
370
- // encode it
371
- NSString *secret = @"secret";
372
- NSString *algorithmName = @"HS384";
373
- NSDictionary *headers = @{@"custom":@"value"};
374
- id<JWTAlgorithm> algorithm = [JWTAlgorithmFactory algorithmByName:algorithmName];
375
-
376
- JWTBuilder *encodeBuilder = [JWT encodeClaimsSet:claimsSet];
377
- NSString *encodedResult = encodeBuilder.secret(secret).algorithm(algorithm).headers(headers).encode;
378
-
379
- if (encodeBuilder.jwtError == nil) {
380
- // handle encoded result
381
- NSLog(@"encoded result: %@", encodedResult);
382
- }
383
- else {
384
- // handle error
385
- NSLog(@"encode failed, error: %@", encodeBuilder.jwtError);
386
- }
387
-
388
- // decode it
389
- // you can set any property that you want, all properties are optional
390
- JWTClaimsSet *trustedClaimsSet = [claimsSet copy];
391
-
392
- // decode forced ? try YES
393
- BOOL decodeForced = NO;
394
- NSNumber *options = @(decodeForced);
395
- NSString *yourJwt = encodedResult; // from previous example
396
- NSString *yourSecret = secret; // from previous example
397
- NSString *yourAlgorithm = algorithmName; // from previous example
398
- JWTBuilder *decodeBuilder = [JWT decodeMessage:yourJwt];
399
- NSDictionary *decodedResult = decodeBuilder.message(yourJwt).secret(yourSecret).algorithmName(yourAlgorithm).claimsSet(trustedClaimsSet).options(options).decode;
400
- if (decodeBuilder.jwtError == nil) {
401
- // handle decoded result
402
- NSLog(@"decoded result: %@", decodedResult);
403
- }
404
- else {
405
- // handle error
406
- NSLog(@"decode failed, error: %@", decodeBuilder.jwtError);
407
- }
408
- ```
409
-
410
- #### NSData
411
- You can also encode/decode using a secret that is represented as an NSData object
412
-
413
- ```objective-c
414
- //Encode
415
- NSData *secretData = "<your data>";
416
- NSString *algorithmName = @"HS384";
417
- NSDictionary *headers = @{@"custom":@"value"};
418
- id<JWTAlgorithm> algorithm = [JWTAlgorithmFactory algorithmByName:algorithmName];
419
-
420
- JWTBuilder *encodeBuilder = [JWT encodeClaimsSet:claimsSet];
421
- NSString *encodedResult = encodeBuilder.secretData(secretData).algorithm(algorithm).headers(headers).encode;
422
-
423
- //Decode
424
- NSString *jwtToken = @"header.payload.signature";
425
- NSData *secretData = "<your data>"
426
- NSString *algorithmName = @"HS256"; //Must specify an algorithm to use
427
-
428
- NSDictionary *payload = [JWTBuilder decodeMessage:jwtToken].secretData(secretData).algorithmName(algorithmName).decode;
429
- ```
430
-
431
- # Algorithms
432
-
433
- The following algorithms are supported:
434
-
435
- * RS256
436
- * HS512 - HMAC using SHA-512.
437
- * HS256 / HS384 / HS512
438
- * None
439
-
440
- ## RS256 usage.
441
- For example, you have your file with privateKey: `file.p12`.
442
- And you have a secret passphrase for that file: `secret`.
443
-
444
- ```objective-c
445
- // Encode
446
- NSDictionary *payload = @{@"payload" : @"hidden_information"};
447
- NSString *algorithmName = @"RS256";
448
-
449
- NSString *filePath = [[NSBundle mainBundle] pathForResource:@"secret_key" ofType:@"p12"];
450
- NSData *privateKeySecretData = [NSData dataWithContentsOfFile:filePath];
451
-
452
- NSString *passphraseForPrivateKey = @"secret";
453
-
454
- JWTBuilder *builder = [JWTBuilder encodePayload:payload].secretData(privateKeySecretData).privateKeyCertificatePassphrase(passphraseForPrivateKey).algorithmName(algorithmName);
455
- NSString *token = builder.encode;
456
-
457
- // check error
458
- if (builder.jwtError == nil) {
459
- // handle result
460
- }
461
- else {
462
- // error occurred.
463
- }
464
-
465
- // Decode
466
- // Suppose, that you get token from previous example. You need a valid public key for a private key in previous example.
467
- // Private key stored in @"secret_key.p12". So, you need public key for that private key.
468
- NSString *publicKey = @"..."; // load public key. Or use it as raw string.
469
-
470
- algorithmName = @"RS256";
471
-
472
- JWTBuilder *decodeBuilder = [JWTBuilder decodeMessage:token].secret(publicKey).algorithmName(algorithmName);
473
- NSDictionary *envelopedPayload = decodeBuilder.decode;
474
-
475
- // check error
476
- if (decodeBuilder.jwtError == nil) {
477
- // handle result
478
- }
479
- else {
480
- // error occurred.
481
- }
482
- ```
483
-
484
-
485
- Additional algorithms can be added by implementing the `JWTAlgorithm` protocol.
486
-
487
- ## Before pull request
488
-
489
- Please, read [Contribution notes](https://github.com/yourkarma/JWT/blob/master/.github/CONTRIBUTING.md) before make pull request.
@@ -1,26 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
- <plist version="1.0">
4
- <dict>
5
- <key>CFBundleDevelopmentRegion</key>
6
- <string>en</string>
7
- <key>CFBundleExecutable</key>
8
- <string>$(EXECUTABLE_NAME)</string>
9
- <key>CFBundleIdentifier</key>
10
- <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
11
- <key>CFBundleInfoDictionaryVersion</key>
12
- <string>6.0</string>
13
- <key>CFBundleName</key>
14
- <string>$(PRODUCT_NAME)</string>
15
- <key>CFBundlePackageType</key>
16
- <string>FMWK</string>
17
- <key>CFBundleShortVersionString</key>
18
- <string>1.0</string>
19
- <key>CFBundleSignature</key>
20
- <string>????</string>
21
- <key>CFBundleVersion</key>
22
- <string>$(CURRENT_PROJECT_VERSION)</string>
23
- <key>NSPrincipalClass</key>
24
- <string></string>
25
- </dict>
26
- </plist>
@@ -1 +0,0 @@
1
- The source code in this folder is taken from [https://github.com/ZipArchive/ZipArchive/tree/2.5.5/SSZipArchive](https://github.com/ZipArchive/ZipArchive/tree/2.5.5/SSZipArchive) which is [MIT licensed](https://github.com/ZipArchive/ZipArchive/blob/2.5.5/LICENSE.txt).