@capgo/capacitor-updater 4.15.6 → 4.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/android/src/main/java/ee/forgr/capacitor_updater/CapacitorUpdater.java +3 -3
- package/android/src/main/java/ee/forgr/capacitor_updater/CapacitorUpdaterPlugin.java +4 -1
- package/dist/docs.json +2 -2
- package/dist/esm/definitions.d.ts +2 -0
- package/ios/Plugin/CapacitorUpdater.swift +6 -2
- package/ios/Plugin/CapacitorUpdaterPlugin.swift +13 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -182,14 +182,14 @@ Notify Capacitor Updater that the current bundle is working (a rollback will occ
|
|
|
182
182
|
### download(...)
|
|
183
183
|
|
|
184
184
|
```typescript
|
|
185
|
-
download(options: { url: string; version: string; }) => Promise<BundleInfo>
|
|
185
|
+
download(options: { url: string; version: string; sessionKey?: string; checksum?: string; }) => Promise<BundleInfo>
|
|
186
186
|
```
|
|
187
187
|
|
|
188
188
|
Download a new bundle from the provided URL, it should be a zip file, with files inside or with a unique id inside with all your files
|
|
189
189
|
|
|
190
|
-
| Param | Type
|
|
191
|
-
| ------------- |
|
|
192
|
-
| **`options`** | <code>{ url: string; version: string; }</code> |
|
|
190
|
+
| Param | Type |
|
|
191
|
+
| ------------- | -------------------------------------------------------------------------------------- |
|
|
192
|
+
| **`options`** | <code>{ url: string; version: string; sessionKey?: string; checksum?: string; }</code> |
|
|
193
193
|
|
|
194
194
|
**Returns:** <code>Promise<<a href="#bundleinfo">BundleInfo</a>></code>
|
|
195
195
|
|
|
@@ -64,7 +64,7 @@ public class CapacitorUpdater {
|
|
|
64
64
|
private static final String bundleDirectory = "versions";
|
|
65
65
|
|
|
66
66
|
public static final String TAG = "Capacitor-updater";
|
|
67
|
-
public static final String pluginVersion = "4.
|
|
67
|
+
public static final String pluginVersion = "4.16.0";
|
|
68
68
|
public static final int timeout = 20000;
|
|
69
69
|
|
|
70
70
|
public SharedPreferences.Editor editor;
|
|
@@ -528,7 +528,8 @@ public class CapacitorUpdater {
|
|
|
528
528
|
public BundleInfo download(
|
|
529
529
|
final String url,
|
|
530
530
|
final String version,
|
|
531
|
-
final String sessionKey
|
|
531
|
+
final String sessionKey,
|
|
532
|
+
final String checksum
|
|
532
533
|
) throws IOException {
|
|
533
534
|
final String id = this.randomString(10);
|
|
534
535
|
this.saveBundleInfo(
|
|
@@ -546,7 +547,6 @@ public class CapacitorUpdater {
|
|
|
546
547
|
this.notifyDownload(id, 5);
|
|
547
548
|
final String dest = this.randomString(10);
|
|
548
549
|
final File downloaded = this.downloadFile(id, url, dest);
|
|
549
|
-
final String checksum = this.getChecksum(downloaded);
|
|
550
550
|
this.finishDownload(id, dest, version, sessionKey, checksum, false);
|
|
551
551
|
BundleInfo info = new BundleInfo(
|
|
552
552
|
id,
|
|
@@ -324,6 +324,7 @@ public class CapacitorUpdaterPlugin
|
|
|
324
324
|
final String url = call.getString("url");
|
|
325
325
|
final String version = call.getString("version");
|
|
326
326
|
final String sessionKey = call.getString("sessionKey", "");
|
|
327
|
+
final String checksum = call.getString("checksum", "");
|
|
327
328
|
if (url == null) {
|
|
328
329
|
Log.e(CapacitorUpdater.TAG, "Download called without url");
|
|
329
330
|
call.reject("Download called without url");
|
|
@@ -345,8 +346,10 @@ public class CapacitorUpdaterPlugin
|
|
|
345
346
|
CapacitorUpdaterPlugin.this.implementation.download(
|
|
346
347
|
url,
|
|
347
348
|
version,
|
|
348
|
-
sessionKey
|
|
349
|
+
sessionKey,
|
|
350
|
+
checksum
|
|
349
351
|
);
|
|
352
|
+
|
|
350
353
|
call.resolve(downloaded.toJSON());
|
|
351
354
|
} catch (final IOException e) {
|
|
352
355
|
Log.e(CapacitorUpdater.TAG, "Failed to download from: " + url, e);
|
package/dist/docs.json
CHANGED
|
@@ -28,12 +28,12 @@
|
|
|
28
28
|
},
|
|
29
29
|
{
|
|
30
30
|
"name": "download",
|
|
31
|
-
"signature": "(options: { url: string; version: string; }) => Promise<BundleInfo>",
|
|
31
|
+
"signature": "(options: { url: string; version: string; sessionKey?: string; checksum?: string; }) => Promise<BundleInfo>",
|
|
32
32
|
"parameters": [
|
|
33
33
|
{
|
|
34
34
|
"name": "options",
|
|
35
35
|
"docs": "",
|
|
36
|
-
"type": "{ url: string; version: string; }"
|
|
36
|
+
"type": "{ url: string; version: string; sessionKey?: string | undefined; checksum?: string | undefined; }"
|
|
37
37
|
}
|
|
38
38
|
],
|
|
39
39
|
"returns": "Promise<BundleInfo>",
|
|
@@ -335,7 +335,7 @@ extension CustomError: LocalizedError {
|
|
|
335
335
|
|
|
336
336
|
private func decryptFile(filePath: URL, sessionKey: String) throws {
|
|
337
337
|
if self.privateKey == "" || sessionKey == "" {
|
|
338
|
-
print("\(self.TAG) Cannot
|
|
338
|
+
print("\(self.TAG) Cannot found privateKey or sessionKey")
|
|
339
339
|
return
|
|
340
340
|
}
|
|
341
341
|
do {
|
|
@@ -345,7 +345,10 @@ extension CustomError: LocalizedError {
|
|
|
345
345
|
}
|
|
346
346
|
|
|
347
347
|
let sessionKeyArray: [String] = sessionKey.components(separatedBy: ":")
|
|
348
|
-
let ivData: Data = Data(base64Encoded: sessionKeyArray[0])
|
|
348
|
+
guard let ivData: Data = Data(base64Encoded: sessionKeyArray[0]) else {
|
|
349
|
+
print("cannot decode sessionKey", sessionKey)
|
|
350
|
+
return
|
|
351
|
+
}
|
|
349
352
|
let sessionKeyDataEncrypted: Data = Data(base64Encoded: sessionKeyArray[1])!
|
|
350
353
|
let sessionKeyDataDecrypted: Data = rsaPrivateKey.decrypt(data: sessionKeyDataEncrypted)!
|
|
351
354
|
let aesPrivateKey: AES128Key = AES128Key(iv: ivData, aes128Key: sessionKeyDataDecrypted)
|
|
@@ -441,6 +444,7 @@ extension CustomError: LocalizedError {
|
|
|
441
444
|
let semaphore: DispatchSemaphore = DispatchSemaphore(value: 0)
|
|
442
445
|
let id: String = self.randomString(length: 10)
|
|
443
446
|
var checksum: String = ""
|
|
447
|
+
|
|
444
448
|
var mainError: NSError?
|
|
445
449
|
let destination: DownloadRequest.Destination = { _, _ in
|
|
446
450
|
let documentsURL: URL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
|
|
@@ -111,12 +111,23 @@ public class CapacitorUpdaterPlugin: CAPPlugin {
|
|
|
111
111
|
return
|
|
112
112
|
}
|
|
113
113
|
let sessionKey = call.getString("sessionKey", "")
|
|
114
|
+
let checksum = call.getString("checksum", "")
|
|
114
115
|
let url = URL(string: urlString)
|
|
115
116
|
print("\(self.implementation.TAG) Downloading \(url!)")
|
|
116
117
|
DispatchQueue.global(qos: .background).async {
|
|
117
118
|
do {
|
|
118
|
-
let
|
|
119
|
-
|
|
119
|
+
let next = try self.implementation.download(url: url!, version: version, sessionKey: sessionKey)
|
|
120
|
+
if checksum != "" && next.getChecksum() != checksum {
|
|
121
|
+
print("\(self.implementation.TAG) Error checksum", next.getChecksum(), checksum)
|
|
122
|
+
self.implementation.sendStats(action: "checksum_fail", versionName: next.getVersionName())
|
|
123
|
+
let resDel = self.implementation.delete(id: next.getId())
|
|
124
|
+
if !resDel {
|
|
125
|
+
print("\(self.implementation.TAG) Delete failed, id \(next.getId()) doesn't exist")
|
|
126
|
+
}
|
|
127
|
+
return
|
|
128
|
+
}
|
|
129
|
+
self.notifyListeners("updateAvailable", data: ["bundle": next.toJSON()])
|
|
130
|
+
call.resolve(next.toJSON())
|
|
120
131
|
} catch {
|
|
121
132
|
print("\(self.implementation.TAG) Failed to download from: \(url!) \(error.localizedDescription)")
|
|
122
133
|
self.notifyListeners("downloadFailed", data: ["version": version])
|