@appzung/react-native-code-push 8.3.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.
- package/CodePush.js +22 -19
- package/CodePush.podspec +3 -3
- package/LICENSE.md +1 -1
- package/README.md +159 -296
- package/android/app/.gradle/config.properties +2 -0
- package/android/app/build.gradle +2 -0
- package/android/app/local.properties +8 -0
- package/android/app/src/main/AndroidManifest.xml +1 -2
- package/android/app/src/main/java/com/microsoft/codepush/react/CodePush.java +27 -21
- package/android/app/src/main/java/com/microsoft/codepush/react/CodePushBuilder.java +5 -5
- package/android/app/src/main/java/com/microsoft/codepush/react/CodePushConstants.java +1 -1
- package/android/app/src/main/java/com/microsoft/codepush/react/CodePushDialog.java +1 -1
- package/android/app/src/main/java/com/microsoft/codepush/react/CodePushInstallMode.java +2 -2
- package/android/app/src/main/java/com/microsoft/codepush/react/CodePushInvalidPublicKeyException.java +2 -2
- package/android/app/src/main/java/com/microsoft/codepush/react/CodePushInvalidUpdateException.java +1 -1
- package/android/app/src/main/java/com/microsoft/codepush/react/CodePushMalformedDataException.java +2 -2
- package/android/app/src/main/java/com/microsoft/codepush/react/CodePushNativeModule.java +5 -5
- package/android/app/src/main/java/com/microsoft/codepush/react/CodePushNotInitializedException.java +2 -2
- package/android/app/src/main/java/com/microsoft/codepush/react/CodePushTelemetryManager.java +14 -14
- package/android/app/src/main/java/com/microsoft/codepush/react/CodePushUnknownException.java +2 -2
- package/android/app/src/main/java/com/microsoft/codepush/react/CodePushUpdateManager.java +1 -1
- package/android/app/src/main/java/com/microsoft/codepush/react/CodePushUpdateState.java +2 -2
- package/android/app/src/main/java/com/microsoft/codepush/react/CodePushUpdateUtils.java +16 -9
- package/android/app/src/main/java/com/microsoft/codepush/react/CodePushUtils.java +1 -1
- package/android/app/src/main/java/com/microsoft/codepush/react/DownloadProgress.java +1 -1
- package/android/app/src/main/java/com/microsoft/codepush/react/DownloadProgressCallback.java +1 -1
- package/android/app/src/main/java/com/microsoft/codepush/react/FileUtils.java +1 -1
- package/android/app/src/main/java/com/microsoft/codepush/react/ReactInstanceHolder.java +1 -1
- package/android/app/src/main/java/com/microsoft/codepush/react/SettingsManager.java +1 -1
- package/android/app/src/main/java/com/microsoft/codepush/react/TLSSocketFactory.java +1 -1
- package/android/build.gradle +3 -0
- package/android/codepush.gradle +3 -3
- package/docs/advanced-usage.md +56 -0
- package/docs/api-android.md +12 -75
- package/docs/api-ios.md +5 -17
- package/docs/api-js.md +18 -55
- package/docs/setup-android.md +15 -397
- package/docs/setup-ios.md +24 -198
- package/docs/setup-windows.md +7 -74
- package/ios/CodePush/CodePush.h +4 -4
- package/ios/CodePush/CodePush.m +10 -9
- package/ios/CodePush/CodePushConfig.m +14 -11
- package/ios/CodePush/CodePushPackage.m +60 -60
- package/ios/CodePush/CodePushTelemetryManager.m +13 -13
- package/ios/CodePush.xcodeproj/project.pbxproj +24 -470
- package/ios/PrivacyInfo.xcprivacy +31 -0
- package/package.json +27 -24
- package/react-native.config.js +1 -1
- package/scripts/generateBundledResourcesHash.js +1 -1
- package/scripts/getFilesInFolder.js +1 -1
- package/scripts/recordFilesBeforeBundleCommand.js +1 -1
- package/typings/react-native-code-push.d.ts +22 -22
- package/windows/CodePush/CodePushConfig.cpp +3 -3
- package/windows/CodePush/CodePushConfig.h +3 -3
- package/windows/CodePush/CodePushNativeModule.cpp +27 -27
- package/windows/CodePush/CodePushNativeModule.h +4 -4
- package/windows/CodePush/CodePushTelemetryManager.cpp +12 -12
- package/windows/CodePush/CodePushTelemetryManager.h +1 -1
- package/.azurepipelines/build-rn-code-push-1es.yml +0 -104
- package/.azurepipelines/test-rn-code-push.yml +0 -94
- package/.config/CredScanSuppressions.json +0 -14
- package/SECURITY.md +0 -41
- package/docs/multi-deployment-testing-android.md +0 -148
- package/docs/multi-deployment-testing-ios.md +0 -59
- package/ios/CodePush/Base64/Base64/MF_Base64Additions.h +0 -34
- package/ios/CodePush/Base64/Base64/MF_Base64Additions.m +0 -252
- package/ios/CodePush/Base64/README.md +0 -47
- package/ios/CodePush/JWT/Core/Algorithms/Base/JWTAlgorithm.h +0 -69
- package/ios/CodePush/JWT/Core/Algorithms/Base/JWTAlgorithmFactory.h +0 -16
- package/ios/CodePush/JWT/Core/Algorithms/Base/JWTAlgorithmFactory.m +0 -51
- package/ios/CodePush/JWT/Core/Algorithms/Base/JWTAlgorithmNone.h +0 -15
- package/ios/CodePush/JWT/Core/Algorithms/Base/JWTAlgorithmNone.m +0 -55
- package/ios/CodePush/JWT/Core/Algorithms/ESFamily/JWTAlgorithmESBase.h +0 -24
- package/ios/CodePush/JWT/Core/Algorithms/ESFamily/JWTAlgorithmESBase.m +0 -41
- package/ios/CodePush/JWT/Core/Algorithms/HSFamily/JWTAlgorithmHSBase.h +0 -28
- package/ios/CodePush/JWT/Core/Algorithms/HSFamily/JWTAlgorithmHSBase.m +0 -205
- package/ios/CodePush/JWT/Core/Algorithms/Holders/JWTAlgorithmDataHolder.h +0 -103
- package/ios/CodePush/JWT/Core/Algorithms/Holders/JWTAlgorithmDataHolder.m +0 -322
- package/ios/CodePush/JWT/Core/Algorithms/Holders/JWTAlgorithmDataHolderChain.h +0 -37
- package/ios/CodePush/JWT/Core/Algorithms/Holders/JWTAlgorithmDataHolderChain.m +0 -145
- package/ios/CodePush/JWT/Core/Algorithms/RSFamily/JWTAlgorithmRSBase.h +0 -35
- package/ios/CodePush/JWT/Core/Algorithms/RSFamily/JWTAlgorithmRSBase.m +0 -551
- package/ios/CodePush/JWT/Core/Algorithms/RSFamily/JWTRSAlgorithm.h +0 -23
- package/ios/CodePush/JWT/Core/Algorithms/RSFamily/RSKeys/JWTCryptoKey.h +0 -43
- package/ios/CodePush/JWT/Core/Algorithms/RSFamily/RSKeys/JWTCryptoKey.m +0 -230
- package/ios/CodePush/JWT/Core/Algorithms/RSFamily/RSKeys/JWTCryptoKeyExtractor.h +0 -31
- package/ios/CodePush/JWT/Core/Algorithms/RSFamily/RSKeys/JWTCryptoKeyExtractor.m +0 -113
- package/ios/CodePush/JWT/Core/Algorithms/RSFamily/RSKeys/JWTCryptoSecurity.h +0 -38
- package/ios/CodePush/JWT/Core/Algorithms/RSFamily/RSKeys/JWTCryptoSecurity.m +0 -500
- package/ios/CodePush/JWT/Core/ClaimSet/JWTClaim.h +0 -18
- package/ios/CodePush/JWT/Core/ClaimSet/JWTClaim.m +0 -214
- package/ios/CodePush/JWT/Core/ClaimSet/JWTClaimsSet.h +0 -23
- package/ios/CodePush/JWT/Core/ClaimSet/JWTClaimsSet.m +0 -29
- package/ios/CodePush/JWT/Core/ClaimSet/JWTClaimsSetSerializer.h +0 -19
- package/ios/CodePush/JWT/Core/ClaimSet/JWTClaimsSetSerializer.m +0 -68
- package/ios/CodePush/JWT/Core/ClaimSet/JWTClaimsSetVerifier.h +0 -18
- package/ios/CodePush/JWT/Core/ClaimSet/JWTClaimsSetVerifier.m +0 -72
- package/ios/CodePush/JWT/Core/Coding/JWTCoding+ResultTypes.h +0 -67
- package/ios/CodePush/JWT/Core/Coding/JWTCoding+ResultTypes.m +0 -111
- package/ios/CodePush/JWT/Core/Coding/JWTCoding+VersionOne.h +0 -119
- package/ios/CodePush/JWT/Core/Coding/JWTCoding+VersionOne.m +0 -307
- package/ios/CodePush/JWT/Core/Coding/JWTCoding+VersionThree.h +0 -94
- package/ios/CodePush/JWT/Core/Coding/JWTCoding+VersionThree.m +0 -619
- package/ios/CodePush/JWT/Core/Coding/JWTCoding+VersionTwo.h +0 -164
- package/ios/CodePush/JWT/Core/Coding/JWTCoding+VersionTwo.m +0 -514
- package/ios/CodePush/JWT/Core/Coding/JWTCoding.h +0 -24
- package/ios/CodePush/JWT/Core/Coding/JWTCoding.m +0 -11
- package/ios/CodePush/JWT/Core/FrameworkSupplement/JWT.h +0 -52
- package/ios/CodePush/JWT/Core/FrameworkSupplement/Map.modulemap +0 -5
- package/ios/CodePush/JWT/Core/Supplement/JWTBase64Coder.h +0 -28
- package/ios/CodePush/JWT/Core/Supplement/JWTBase64Coder.m +0 -70
- package/ios/CodePush/JWT/Core/Supplement/JWTDeprecations.h +0 -22
- package/ios/CodePush/JWT/Core/Supplement/JWTErrorDescription.h +0 -34
- package/ios/CodePush/JWT/Core/Supplement/JWTErrorDescription.m +0 -73
- package/ios/CodePush/JWT/LICENSE +0 -19
- package/ios/CodePush/JWT/README.md +0 -489
- package/ios/CodePush/SSZipArchive/Common.h +0 -81
- package/ios/CodePush/SSZipArchive/README.md +0 -1
- package/ios/CodePush/SSZipArchive/SSZipArchive.h +0 -76
- package/ios/CodePush/SSZipArchive/SSZipArchive.m +0 -691
- package/ios/CodePush/SSZipArchive/aes/aes.h +0 -198
- package/ios/CodePush/SSZipArchive/aes/aes_via_ace.h +0 -541
- package/ios/CodePush/SSZipArchive/aes/aescrypt.c +0 -294
- package/ios/CodePush/SSZipArchive/aes/aeskey.c +0 -548
- package/ios/CodePush/SSZipArchive/aes/aesopt.h +0 -739
- package/ios/CodePush/SSZipArchive/aes/aestab.c +0 -391
- package/ios/CodePush/SSZipArchive/aes/aestab.h +0 -173
- package/ios/CodePush/SSZipArchive/aes/brg_endian.h +0 -126
- package/ios/CodePush/SSZipArchive/aes/brg_types.h +0 -219
- package/ios/CodePush/SSZipArchive/aes/entropy.c +0 -54
- package/ios/CodePush/SSZipArchive/aes/entropy.h +0 -16
- package/ios/CodePush/SSZipArchive/aes/fileenc.c +0 -144
- package/ios/CodePush/SSZipArchive/aes/fileenc.h +0 -121
- package/ios/CodePush/SSZipArchive/aes/hmac.c +0 -145
- package/ios/CodePush/SSZipArchive/aes/hmac.h +0 -103
- package/ios/CodePush/SSZipArchive/aes/prng.c +0 -155
- package/ios/CodePush/SSZipArchive/aes/prng.h +0 -82
- package/ios/CodePush/SSZipArchive/aes/pwd2key.c +0 -103
- package/ios/CodePush/SSZipArchive/aes/pwd2key.h +0 -57
- package/ios/CodePush/SSZipArchive/aes/sha1.c +0 -258
- package/ios/CodePush/SSZipArchive/aes/sha1.h +0 -73
- package/ios/CodePush/SSZipArchive/minizip/crypt.h +0 -130
- package/ios/CodePush/SSZipArchive/minizip/ioapi.c +0 -369
- package/ios/CodePush/SSZipArchive/minizip/ioapi.h +0 -175
- package/ios/CodePush/SSZipArchive/minizip/mztools.c +0 -284
- package/ios/CodePush/SSZipArchive/minizip/mztools.h +0 -31
- package/ios/CodePush/SSZipArchive/minizip/unzip.c +0 -1839
- package/ios/CodePush/SSZipArchive/minizip/unzip.h +0 -248
- package/ios/CodePush/SSZipArchive/minizip/zip.c +0 -1910
- package/ios/CodePush/SSZipArchive/minizip/zip.h +0 -202
- package/scripts/postlink/android/postlink.js +0 -87
- package/scripts/postlink/ios/postlink.js +0 -116
- package/scripts/postlink/run.js +0 -11
- package/scripts/postunlink/android/postunlink.js +0 -74
- package/scripts/postunlink/ios/postunlink.js +0 -87
- package/scripts/postunlink/run.js +0 -11
- package/scripts/tools/linkToolsAndroid.js +0 -57
- package/scripts/tools/linkToolsIos.js +0 -130
- package/windows-legacy/CodePush/CodePush.csproj +0 -128
- package/windows-legacy/CodePush/CodePushUtils.cs +0 -47
- package/windows-legacy/CodePush/FileUtils.cs +0 -40
- package/windows-legacy/CodePush/Properties/AssemblyInfo.cs +0 -29
- package/windows-legacy/CodePush/Properties/CodePush.rd.xml +0 -33
- package/windows-legacy/CodePush/UpdateManager.cs +0 -305
- package/windows-legacy/CodePush/UpdateUtils.cs +0 -46
- package/windows-legacy/CodePush.Net46/Adapters/Http/HttpProgress.cs +0 -28
- package/windows-legacy/CodePush.Net46/Adapters/Storage/ApplicationDataContainer.cs +0 -106
- package/windows-legacy/CodePush.Net46/CodePush.Net46.csproj +0 -103
- package/windows-legacy/CodePush.Net46/CodePushUtils.cs +0 -158
- package/windows-legacy/CodePush.Net46/FileUtils.cs +0 -55
- package/windows-legacy/CodePush.Net46/Properties/AssemblyInfo.cs +0 -36
- package/windows-legacy/CodePush.Net46/UpdateManager.cs +0 -330
- package/windows-legacy/CodePush.Net46/UpdateUtils.cs +0 -70
- package/windows-legacy/CodePush.Net46/packages.config +0 -5
- package/windows-legacy/CodePush.Net46.Test/ApplicationDataContainerTest.cs +0 -105
- package/windows-legacy/CodePush.Net46.Test/CodePush.Net46.Test.csproj +0 -137
- package/windows-legacy/CodePush.Net46.Test/Properties/AssemblyInfo.cs +0 -36
- package/windows-legacy/CodePush.Net46.Test/TelemetryManagerTest.cs +0 -117
- package/windows-legacy/CodePush.Net46.Test/app.config +0 -11
- package/windows-legacy/CodePush.Net46.Test/packages.config +0 -4
- package/windows-legacy/CodePush.Shared/CodePush.Shared.projitems +0 -22
- package/windows-legacy/CodePush.Shared/CodePush.Shared.shproj +0 -13
- package/windows-legacy/CodePush.Shared/CodePushConstants.cs +0 -35
- package/windows-legacy/CodePush.Shared/CodePushNativeModule.cs +0 -329
- package/windows-legacy/CodePush.Shared/CodePushReactPackage.cs +0 -235
- package/windows-legacy/CodePush.Shared/CodePushUtils.cs +0 -70
- package/windows-legacy/CodePush.Shared/InstallMode.cs +0 -9
- package/windows-legacy/CodePush.Shared/MinimumBackgroundListener.cs +0 -44
- package/windows-legacy/CodePush.Shared/SettingsManager.cs +0 -148
- package/windows-legacy/CodePush.Shared/TelemetryManager.cs +0 -250
- package/windows-legacy/CodePush.Shared/UpdateState.cs +0 -9
|
@@ -1,489 +0,0 @@
|
|
|
1
|
-
[](https://jwt.io/)
|
|
2
|
-
|
|
3
|
-
[](https://travis-ci.org/yourkarma/JWT)
|
|
4
|
-
[](http://cocoadocs.org/docsets/JWT)
|
|
5
|
-
[](http://cocoadocs.org/docsets/JWT)
|
|
6
|
-
[](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,81 +0,0 @@
|
|
|
1
|
-
#ifndef SSZipCommon
|
|
2
|
-
#define SSZipCommon
|
|
3
|
-
|
|
4
|
-
/* tm_unz contain date/time info */
|
|
5
|
-
typedef struct tm_unz_s
|
|
6
|
-
{
|
|
7
|
-
unsigned int tm_sec; /* seconds after the minute - [0,59] */
|
|
8
|
-
unsigned int tm_min; /* minutes after the hour - [0,59] */
|
|
9
|
-
unsigned int tm_hour; /* hours since midnight - [0,23] */
|
|
10
|
-
unsigned int tm_mday; /* day of the month - [1,31] */
|
|
11
|
-
unsigned int tm_mon; /* months since January - [0,11] */
|
|
12
|
-
unsigned int tm_year; /* years - [1980..2044] */
|
|
13
|
-
} tm_unz;
|
|
14
|
-
|
|
15
|
-
typedef struct unz_file_info_s
|
|
16
|
-
{
|
|
17
|
-
unsigned long version; /* version made by 2 bytes */
|
|
18
|
-
unsigned long version_needed; /* version needed to extract 2 bytes */
|
|
19
|
-
unsigned long flag; /* general purpose bit flag 2 bytes */
|
|
20
|
-
unsigned long compression_method; /* compression method 2 bytes */
|
|
21
|
-
unsigned long dosDate; /* last mod file date in Dos fmt 4 bytes */
|
|
22
|
-
unsigned long crc; /* crc-32 4 bytes */
|
|
23
|
-
unsigned long compressed_size; /* compressed size 4 bytes */
|
|
24
|
-
unsigned long uncompressed_size; /* uncompressed size 4 bytes */
|
|
25
|
-
unsigned long size_filename; /* filename length 2 bytes */
|
|
26
|
-
unsigned long size_file_extra; /* extra field length 2 bytes */
|
|
27
|
-
unsigned long size_file_comment; /* file comment length 2 bytes */
|
|
28
|
-
|
|
29
|
-
unsigned long disk_num_start; /* disk number start 2 bytes */
|
|
30
|
-
unsigned long internal_fa; /* internal file attributes 2 bytes */
|
|
31
|
-
unsigned long external_fa; /* external file attributes 4 bytes */
|
|
32
|
-
|
|
33
|
-
tm_unz tmu_date;
|
|
34
|
-
} unz_file_info;
|
|
35
|
-
|
|
36
|
-
/* unz_file_info contain information about a file in the zipfile */
|
|
37
|
-
typedef struct unz_file_info64_s
|
|
38
|
-
{
|
|
39
|
-
unsigned long version; /* version made by 2 bytes */
|
|
40
|
-
unsigned long version_needed; /* version needed to extract 2 bytes */
|
|
41
|
-
unsigned long flag; /* general purpose bit flag 2 bytes */
|
|
42
|
-
unsigned long compression_method; /* compression method 2 bytes */
|
|
43
|
-
unsigned long dosDate; /* last mod file date in Dos fmt 4 bytes */
|
|
44
|
-
unsigned long crc; /* crc-32 4 bytes */
|
|
45
|
-
unsigned long long compressed_size; /* compressed size 8 bytes */
|
|
46
|
-
unsigned long long uncompressed_size; /* uncompressed size 8 bytes */
|
|
47
|
-
unsigned long size_filename; /* filename length 2 bytes */
|
|
48
|
-
unsigned long size_file_extra; /* extra field length 2 bytes */
|
|
49
|
-
unsigned long size_file_comment; /* file comment length 2 bytes */
|
|
50
|
-
|
|
51
|
-
unsigned long disk_num_start; /* disk number start 2 bytes */
|
|
52
|
-
unsigned long internal_fa; /* internal file attributes 2 bytes */
|
|
53
|
-
unsigned long external_fa; /* external file attributes 4 bytes */
|
|
54
|
-
|
|
55
|
-
tm_unz tmu_date;
|
|
56
|
-
unsigned long long disk_offset;
|
|
57
|
-
unsigned long size_file_extra_internal;
|
|
58
|
-
} unz_file_info64;
|
|
59
|
-
|
|
60
|
-
typedef struct unz_global_info_s
|
|
61
|
-
{
|
|
62
|
-
unsigned long number_entry; /* total number of entries in
|
|
63
|
-
the central dir on this disk */
|
|
64
|
-
|
|
65
|
-
unsigned long number_disk_with_CD; /* number the the disk with central dir, used for spanning ZIP*/
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
unsigned long size_comment; /* size of the global comment of the zipfile */
|
|
69
|
-
} unz_global_info;
|
|
70
|
-
|
|
71
|
-
typedef struct unz_global_info64
|
|
72
|
-
{
|
|
73
|
-
unsigned long long number_entry; /* total number of entries in
|
|
74
|
-
the central dir on this disk */
|
|
75
|
-
|
|
76
|
-
unsigned long number_disk_with_CD; /* number the the disk with central dir, used for spanning ZIP*/
|
|
77
|
-
|
|
78
|
-
unsigned long size_comment; /* size of the global comment of the zipfile */
|
|
79
|
-
} unz_global_info64;
|
|
80
|
-
|
|
81
|
-
#endif
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
The source code in this folder is taken from [https://github.com/ZipArchive/ZipArchive/tree/35fe9b6af48527cde0b5db52287474ed3a32d75f/SSZipArchive](https://github.com/ZipArchive/ZipArchive/tree/35fe9b6af48527cde0b5db52287474ed3a32d75f/SSZipArchive) which is [MIT licensed](https://github.com/ZipArchive/ZipArchive/blob/35fe9b6af48527cde0b5db52287474ed3a32d75f/LICENSE.txt).
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// SSZipArchive.h
|
|
3
|
-
// SSZipArchive
|
|
4
|
-
//
|
|
5
|
-
// Created by Sam Soffes on 7/21/10.
|
|
6
|
-
// Copyright (c) Sam Soffes 2010-2015. All rights reserved.
|
|
7
|
-
//
|
|
8
|
-
|
|
9
|
-
#ifndef _SSZIPARCHIVE_H
|
|
10
|
-
#define _SSZIPARCHIVE_H
|
|
11
|
-
|
|
12
|
-
#import <Foundation/Foundation.h>
|
|
13
|
-
#include "Common.h"
|
|
14
|
-
|
|
15
|
-
@protocol SSZipArchiveDelegate;
|
|
16
|
-
|
|
17
|
-
@interface SSZipArchive : NSObject
|
|
18
|
-
|
|
19
|
-
// Unzip
|
|
20
|
-
+ (BOOL)unzipFileAtPath:(NSString *)path toDestination:(NSString *)destination;
|
|
21
|
-
+ (BOOL)unzipFileAtPath:(NSString *)path toDestination:(NSString *)destination delegate:(id<SSZipArchiveDelegate>)delegate;
|
|
22
|
-
|
|
23
|
-
+ (BOOL)unzipFileAtPath:(NSString *)path toDestination:(NSString *)destination overwrite:(BOOL)overwrite password:(NSString *)password error:(NSError * *)error;
|
|
24
|
-
+ (BOOL)unzipFileAtPath:(NSString *)path toDestination:(NSString *)destination overwrite:(BOOL)overwrite password:(NSString *)password error:(NSError * *)error delegate:(id<SSZipArchiveDelegate>)delegate;
|
|
25
|
-
|
|
26
|
-
+ (BOOL)unzipFileAtPath:(NSString *)path
|
|
27
|
-
toDestination:(NSString *)destination
|
|
28
|
-
progressHandler:(void (^)(NSString *entry, unz_file_info zipInfo, long entryNumber, long total))progressHandler
|
|
29
|
-
completionHandler:(void (^)(NSString *path, BOOL succeeded, NSError *error))completionHandler;
|
|
30
|
-
|
|
31
|
-
+ (BOOL)unzipFileAtPath:(NSString *)path
|
|
32
|
-
toDestination:(NSString *)destination
|
|
33
|
-
overwrite:(BOOL)overwrite
|
|
34
|
-
password:(NSString *)password
|
|
35
|
-
progressHandler:(void (^)(NSString *entry, unz_file_info zipInfo, long entryNumber, long total))progressHandler
|
|
36
|
-
completionHandler:(void (^)(NSString *path, BOOL succeeded, NSError *error))completionHandler;
|
|
37
|
-
|
|
38
|
-
// Zip
|
|
39
|
-
|
|
40
|
-
// without password
|
|
41
|
-
+ (BOOL)createZipFileAtPath:(NSString *)path withFilesAtPaths:(NSArray *)paths;
|
|
42
|
-
+ (BOOL)createZipFileAtPath:(NSString *)path withContentsOfDirectory:(NSString *)directoryPath;
|
|
43
|
-
+ (BOOL)createZipFileAtPath:(NSString *)path withContentsOfDirectory:(NSString *)directoryPath keepParentDirectory:(BOOL)keepParentDirector;
|
|
44
|
-
|
|
45
|
-
// with password, password could be nil
|
|
46
|
-
+ (BOOL)createZipFileAtPath:(NSString *)path withFilesAtPaths:(NSArray *)paths withPassword:(NSString *)password;
|
|
47
|
-
+ (BOOL)createZipFileAtPath:(NSString *)path withContentsOfDirectory:(NSString *)directoryPath withPassword:(NSString *)password;
|
|
48
|
-
+ (BOOL)createZipFileAtPath:(NSString *)path withContentsOfDirectory:(NSString *)directoryPath keepParentDirectory:(BOOL)keepParentDirectory withPassword:(NSString *)password;
|
|
49
|
-
|
|
50
|
-
- (instancetype)initWithPath:(NSString *)path;
|
|
51
|
-
@property (NS_NONATOMIC_IOSONLY, readonly, getter = isOpen) BOOL open;
|
|
52
|
-
- (BOOL)writeFile:(NSString *)path withPassword:(NSString *)password;
|
|
53
|
-
- (BOOL)writeFileAtPath:(NSString *)path withFileName:(NSString *)fileName withPassword:(NSString *)password;
|
|
54
|
-
- (BOOL)writeData:(NSData *)data filename:(NSString *)filename withPassword:(NSString *)password;
|
|
55
|
-
@property (NS_NONATOMIC_IOSONLY, readonly, getter = isClosed) BOOL close;
|
|
56
|
-
|
|
57
|
-
@end
|
|
58
|
-
|
|
59
|
-
@protocol SSZipArchiveDelegate <NSObject>
|
|
60
|
-
|
|
61
|
-
@optional
|
|
62
|
-
|
|
63
|
-
- (void)zipArchiveWillUnzipArchiveAtPath:(NSString *)path zipInfo:(unz_global_info)zipInfo;
|
|
64
|
-
- (void)zipArchiveDidUnzipArchiveAtPath:(NSString *)path zipInfo:(unz_global_info)zipInfo unzippedPath:(NSString *)unzippedPath;
|
|
65
|
-
|
|
66
|
-
- (BOOL)zipArchiveShouldUnzipFileAtIndex:(NSInteger)fileIndex totalFiles:(NSInteger)totalFiles archivePath:(NSString *)archivePath fileInfo:(unz_file_info)fileInfo;
|
|
67
|
-
- (void)zipArchiveWillUnzipFileAtIndex:(NSInteger)fileIndex totalFiles:(NSInteger)totalFiles archivePath:(NSString *)archivePath fileInfo:(unz_file_info)fileInfo;
|
|
68
|
-
- (void)zipArchiveDidUnzipFileAtIndex:(NSInteger)fileIndex totalFiles:(NSInteger)totalFiles archivePath:(NSString *)archivePath fileInfo:(unz_file_info)fileInfo;
|
|
69
|
-
- (void)zipArchiveDidUnzipFileAtIndex:(NSInteger)fileIndex totalFiles:(NSInteger)totalFiles archivePath:(NSString *)archivePath unzippedFilePath:(NSString *)unzippedFilePath;
|
|
70
|
-
|
|
71
|
-
- (void)zipArchiveProgressEvent:(unsigned long long)loaded total:(unsigned long long)total;
|
|
72
|
-
- (void)zipArchiveDidUnzipArchiveFile:(NSString *)zipFile entryPath:(NSString *)entryPath destPath:(NSString *)destPath;
|
|
73
|
-
|
|
74
|
-
@end
|
|
75
|
-
|
|
76
|
-
#endif /* _SSZIPARCHIVE_H */
|