diff --git a/modules/react-native-status/android/src/main/java/im/status/ethereum/module/StatusModule.java b/modules/react-native-status/android/src/main/java/im/status/ethereum/module/StatusModule.java index 98c77c74dc..e1e737af6d 100644 --- a/modules/react-native-status/android/src/main/java/im/status/ethereum/module/StatusModule.java +++ b/modules/react-native-status/android/src/main/java/im/status/ethereum/module/StatusModule.java @@ -371,7 +371,7 @@ class StatusModule extends ReactContextBaseJavaModule implements LifecycleEventL } @ReactMethod - public void exportUnencryptedDatabase(final String accountData, final String password) { + public void exportUnencryptedDatabase(final String accountData, final String password, final Callback callback) { Log.d(TAG, "login"); final File newFile = getExportDBFile(); diff --git a/modules/react-native-status/ios/RCTStatus/RCTStatus.m b/modules/react-native-status/ios/RCTStatus/RCTStatus.m index 8e8753ad52..f56db54824 100644 --- a/modules/react-native-status/ios/RCTStatus/RCTStatus.m +++ b/modules/react-native-status/ios/RCTStatus/RCTStatus.m @@ -853,11 +853,16 @@ StatusgoStartLocalNotifications(); } RCT_EXPORT_METHOD(exportUnencryptedDatabase:(NSString *)accountData - password:(NSString *)password) { + password:(NSString *)password + callback:(RCTResponseSenderBlock)callback) { #if DEBUG NSLog(@"exportUnencryptedDatabase() method called"); #endif - ""; + NSString *filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"export.db"]; + + StatusgoExportUnencryptedDatabase(accountData, password, filePath); + + callback(@[filePath]); } RCT_EXPORT_METHOD(importUnencryptedDatabase:(NSString *)accountData diff --git a/src/status_im/multiaccounts/login/core.cljs b/src/status_im/multiaccounts/login/core.cljs index f6a371b7ed..6a5195b6eb 100644 --- a/src/status_im/multiaccounts/login/core.cljs +++ b/src/status_im/multiaccounts/login/core.cljs @@ -38,7 +38,9 @@ [status-im.navigation :as navigation] [status-im.signing.eip1559 :as eip1559] [status-im.data-store.chats :as data-store.chats] - [status-im.data-store.visibility-status-updates :as visibility-status-updates-store])) + [status-im.data-store.visibility-status-updates :as visibility-status-updates-store] + [status-im.ui.components.react :as react] + [status-im.utils.platform :as platform])) (re-frame/reg-fx ::initialize-communities-enabled @@ -65,8 +67,8 @@ (re-frame/reg-fx ::export-db - (fn [[key-uid account-data hashed-password]] - (status/export-db key-uid account-data hashed-password))) + (fn [[key-uid account-data hashed-password callback]] + (status/export-db key-uid account-data hashed-password callback))) (re-frame/reg-fx ::import-db @@ -143,10 +145,15 @@ [{:keys [db]}] (let [{:keys [key-uid password name identicon]} (:multiaccounts/login db)] {::export-db [key-uid - (types/clj->json {:name name - :key-uid key-uid - :identicon identicon}) - (ethereum/sha3 (security/safe-unmask-data password))]})) + (types/clj->json {:name name + :key-uid key-uid + :identicon identicon}) + (ethereum/sha3 (security/safe-unmask-data password)) + (fn [path] + (when platform/ios? + (let [uri (str "file://" path)] + (.share ^js react/sharing (clj->js {:title "Unencrypted database" + :url uri})))))]})) (fx/defn import-db-submitted {:events [:multiaccounts.login.ui/import-db-submitted]} diff --git a/src/status_im/native_module/core.cljs b/src/status_im/native_module/core.cljs index 27c60d04dd..70487e4bc2 100644 --- a/src/status_im/native_module/core.cljs +++ b/src/status_im/native_module/core.cljs @@ -66,12 +66,12 @@ (defn export-db "NOTE: beware, the password has to be sha3 hashed" - [key-uid account-data hashed-password] + [key-uid account-data hashed-password callback] (log/debug "[native-module] export-db") (clear-web-data) (init-keystore key-uid - #(.exportUnencryptedDatabase ^js (status) account-data hashed-password))) + #(.exportUnencryptedDatabase ^js (status) account-data hashed-password callback))) (defn import-db "NOTE: beware, the password has to be sha3 hashed"