integrate status-go permissions api

Signed-off-by: yenda <eric@status.im>
This commit is contained in:
yenda 2019-07-18 13:25:43 +02:00
parent 0c839860a2
commit 3ea8538377
No known key found for this signature in database
GPG Key ID: 0095623C0069DCE6
15 changed files with 85 additions and 114 deletions

View File

@ -3,9 +3,9 @@
[re-frame.core :as re-frame] [re-frame.core :as re-frame]
[status-im.browser.permissions :as browser.permissions] [status-im.browser.permissions :as browser.permissions]
[status-im.constants :as constants] [status-im.constants :as constants]
[status-im.data-store.browser :as browser-store]
[status-im.ethereum.core :as ethereum] [status-im.ethereum.core :as ethereum]
[status-im.ethereum.ens :as ens] [status-im.ethereum.ens :as ens]
[status-im.ethereum.json-rpc :as json-rpc]
[status-im.ethereum.resolver :as resolver] [status-im.ethereum.resolver :as resolver]
[status-im.i18n :as i18n] [status-im.i18n :as i18n]
[status-im.js-dependencies :as js-dependencies] [status-im.js-dependencies :as js-dependencies]
@ -23,11 +23,6 @@
[taoensso.timbre :as log] [taoensso.timbre :as log]
[status-im.signing.core :as signing])) [status-im.signing.core :as signing]))
(fx/defn initialize-dapp-permissions
[{:keys [db all-dapp-permissions]}]
(let [dapp-permissions (into {} (map #(vector (:dapp %) %) all-dapp-permissions))]
{:db (assoc db :dapps/permissions dapp-permissions)}))
(fx/defn update-browser-option (fx/defn update-browser-option
[{:keys [db]} option-key option-value] [{:keys [db]} option-key option-value]
{:db (assoc-in db [:browser/options option-key] option-value)}) {:db (assoc-in db [:browser/options option-key] option-value)})
@ -53,7 +48,9 @@
(fx/defn remove-browser (fx/defn remove-browser
[{:keys [db]} browser-id] [{:keys [db]} browser-id]
{:db (update-in db [:browser/browsers] dissoc browser-id) {:db (update-in db [:browser/browsers] dissoc browser-id)
:data-store/delete-browser browser-id}) ::json-rpc/call [{:method "browsers_deleteBrowser"
:params [browser-id]
:on-success #()}]})
(defn update-dapp-name [{:keys [name] :as browser}] (defn update-dapp-name [{:keys [name] :as browser}]
(assoc browser :dapp? false :name (or name (i18n/label :t/browser)))) (assoc browser :dapp? false :name (or name (i18n/label :t/browser))))
@ -113,7 +110,9 @@
{:db (update-in db {:db (update-in db
[:browser/browsers browser-id] [:browser/browsers browser-id]
merge updated-browser) merge updated-browser)
:data-store/save-browser updated-browser})) ::json-rpc/call [{:method "browsers_addBrowser"
:params [(select-keys updated-browser [:browser-id :timestamp :name :dapp? :history :history-index])]
:on-success #()}]}))
(defn can-go-back? [{:keys [history-index]}] (defn can-go-back? [{:keys [history-index]}]
(pos? history-index)) (pos? history-index))

View File

@ -1,7 +1,7 @@
(ns status-im.browser.permissions (ns status-im.browser.permissions
(:require [status-im.constants :as constants] (:require [status-im.constants :as constants]
[status-im.data-store.dapp-permissions :as dapp-permissions]
[status-im.ethereum.core :as ethereum] [status-im.ethereum.core :as ethereum]
[status-im.ethereum.json-rpc :as json-rpc]
[status-im.extensions.module :as extensions.module] [status-im.extensions.module :as extensions.module]
[status-im.i18n :as i18n] [status-im.i18n :as i18n]
[status-im.qr-scanner.core :as qr-scanner] [status-im.qr-scanner.core :as qr-scanner]
@ -76,13 +76,17 @@
allowed-permissions {:dapp dapp-name allowed-permissions {:dapp dapp-name
:permissions (vec allowed-permissions-set)}] :permissions (vec allowed-permissions-set)}]
{:db (assoc-in db [:dapps/permissions dapp-name] allowed-permissions) {:db (assoc-in db [:dapps/permissions dapp-name] allowed-permissions)
:data-store/tx [(dapp-permissions/save-dapp-permissions allowed-permissions)]})) ::json-rpc/call [{:method "permissions_addDappPermissions"
:params [allowed-permissions]
:on-success #()}]}))
(fx/defn revoke-dapp-permissions (fx/defn revoke-dapp-permissions
[{:keys [db] :as cofx} dapp] [{:keys [db] :as cofx} dapp]
(fx/merge cofx (fx/merge cofx
{:db (update-in db [:dapps/permissions] dissoc dapp) {:db (update-in db [:dapps/permissions] dissoc dapp)
:data-store/tx [(dapp-permissions/remove-dapp-permissions dapp)]} ::json-rpc/call [{:method "permissions_deleteDappPermissions"
:params [dapp]
:on-success #()}]}
(navigation/navigate-back))) (navigation/navigate-back)))
(fx/defn process-next-permission (fx/defn process-next-permission

View File

@ -5,6 +5,7 @@
[status-im.contact.core :as contact.core] [status-im.contact.core :as contact.core]
[status-im.data-store.chats :as chats-store] [status-im.data-store.chats :as chats-store]
[status-im.data-store.messages :as messages-store] [status-im.data-store.messages :as messages-store]
[status-im.ethereum.json-rpc :as json-rpc]
[status-im.i18n :as i18n] [status-im.i18n :as i18n]
[status-im.mailserver.core :as mailserver] [status-im.mailserver.core :as mailserver]
[status-im.transport.message.protocol :as transport.protocol] [status-im.transport.message.protocol :as transport.protocol]
@ -107,7 +108,7 @@
"Adds new public group chat to db & realm" "Adds new public group chat to db & realm"
[cofx topic] [cofx topic]
(if config/use-status-go-protocol? (if config/use-status-go-protocol?
{:json-rpc/call [{:method "status_joinPublicChat" {::json-rpc/call [{:method "status_joinPublicChat"
:params [topic] :params [topic]
:on-success :on-success
#(log/debug "successfully joined a public chat:" topic) #(log/debug "successfully joined a public chat:" topic)
@ -159,7 +160,7 @@
[{:keys [db now] :as cofx} chat-id] [{:keys [db now] :as cofx} chat-id]
(if config/use-status-go-protocol? (if config/use-status-go-protocol?
(fx/merge cofx (fx/merge cofx
{:json-rpc/call [{:method "status_removeChat" {::json-rpc/call [{:method "status_removeChat"
:params [chat-id] :params [chat-id]
:on-success :on-success
#(log/debug "successfully removed a chat:" chat-id) #(log/debug "successfully removed a chat:" chat-id)
@ -271,7 +272,7 @@
(when (not= (multiaccounts.model/current-public-key cofx) chat-id) (when (not= (multiaccounts.model/current-public-key cofx) chat-id)
(if config/use-status-go-protocol? (if config/use-status-go-protocol?
(fx/merge cofx (fx/merge cofx
{:json-rpc/call [{:method "status_startOneOnOneChat" {::json-rpc/call [{:method "status_startOneOnOneChat"
:params [chat-id] :params [chat-id]
:on-success :on-success
#(log/debug "successfully started a 1-1 chat with:" chat-id) #(log/debug "successfully started a 1-1 chat with:" chat-id)

View File

@ -2,6 +2,7 @@
(:require [re-frame.core :as re-frame] (:require [re-frame.core :as re-frame]
[status-im.chat.commands.core :as commands] [status-im.chat.commands.core :as commands]
[status-im.chat.models :as chat-model] [status-im.chat.models :as chat-model]
[status-im.ethereum.json-rpc :as json-rpc]
[status-im.mailserver.core :as mailserver] [status-im.mailserver.core :as mailserver]
[status-im.utils.config :as config] [status-im.utils.config :as config]
[status-im.utils.datetime :as time] [status-im.utils.datetime :as time]
@ -70,7 +71,7 @@
(defn load-chats-from-rpc (defn load-chats-from-rpc
[cofx] [cofx]
(fx/merge cofx (fx/merge cofx
{:json-rpc/call [{:method "status_chats" {::json-rpc/call [{:method "status_chats"
:params [] :params []
:on-error :on-error
#(log/error "can't retrieve chats list from status-go:" %) #(log/error "can't retrieve chats list from status-go:" %)

View File

@ -1,36 +0,0 @@
(ns status-im.data-store.browser
(:require [re-frame.core :as re-frame]
[status-im.ethereum.json-rpc :as json-rpc]
[status-im.utils.fx :as fx]))
(fx/defn initialize-browsers
{:events [::initialize]}
[{:keys [db]} all-stored-browsers]
(let [browsers (reduce (fn [acc {:keys [browser-id] :as browser}]
(assoc acc browser-id browser))
{}
all-stored-browsers)]
{:db (assoc db :browser/browsers browsers)}))
(re-frame/reg-fx
:data-store/get-browsers
(fn []
(json-rpc/call
{:method "browsers_getBrowsers"
:on-success #(re-frame/dispatch [::initialize %])})))
(re-frame/reg-fx
:data-store/save-browser
(fn [browser]
(json-rpc/call
{:method "browsers_addBrowser"
:params [(select-keys browser [:browser-id :timestamp :name :dapp? :history :history-index])]
:on-success #()})))
(re-frame/reg-fx
:data-store/delete-browser
(fn [browser-id]
(json-rpc/call
{:method "browsers_deleteBrowser"
:params [browser-id]
:on-success #()})))

View File

@ -8,7 +8,6 @@
status-im.data-store.contacts status-im.data-store.contacts
status-im.data-store.installations status-im.data-store.installations
status-im.data-store.transport status-im.data-store.transport
status-im.data-store.browser
status-im.data-store.multiaccounts status-im.data-store.multiaccounts
status-im.data-store.mailservers)) status-im.data-store.mailservers))

View File

@ -1,22 +0,0 @@
(ns status-im.data-store.dapp-permissions
(:require [re-frame.core :as re-frame]
[status-im.data-store.realm.core :as core]))
(re-frame/reg-cofx
:data-store/all-dapp-permissions
(fn [cofx _]
(assoc cofx :all-dapp-permissions (-> @core/account-realm
(core/get-all :dapp-permissions)
(core/all-clj :dapp-permissions)))))
(defn save-dapp-permissions
"Returns tx function for saving dapp permissions"
[permissions]
(fn [realm]
(core/create realm :dapp-permissions permissions true)))
(defn remove-dapp-permissions
"Returns tx function for removing dapp permissions"
[dapp]
(fn [realm]
(core/delete realm (.objectForPrimaryKey realm "dapp" dapp))))

View File

@ -39,7 +39,10 @@
"wallet_getTransfers" {} "wallet_getTransfers" {}
"browsers_getBrowsers" {} "browsers_getBrowsers" {}
"browsers_addBrowser" {} "browsers_addBrowser" {}
"browsers_deleteBrowser" {}}) "browsers_deleteBrowser" {}
"permissions_addDappPermissions" {}
"permissions_getDappPermissions" {}
"permissions_deleteDappPermissions" {}})
(defn call (defn call
[{:keys [method params on-success on-error]}] [{:keys [method params on-success on-error]}]
@ -92,7 +95,7 @@
;; effects ;; effects
(re-frame/reg-fx (re-frame/reg-fx
:json-rpc/call ::call
(fn [params] (fn [params]
(doseq [param params] (doseq [param params]
(call param)))) (call param))))

View File

@ -143,7 +143,6 @@
[(re-frame/inject-cofx :web3/get-web3) [(re-frame/inject-cofx :web3/get-web3)
(re-frame/inject-cofx :data-store/get-all-contacts) (re-frame/inject-cofx :data-store/get-all-contacts)
(re-frame/inject-cofx :data-store/get-all-installations) (re-frame/inject-cofx :data-store/get-all-installations)
(re-frame/inject-cofx :data-store/all-dapp-permissions)
(re-frame/inject-cofx :data-store/all-chats) (re-frame/inject-cofx :data-store/all-chats)
(re-frame/inject-cofx :data-store/all-chat-requests-ranges)] (re-frame/inject-cofx :data-store/all-chat-requests-ranges)]
multiaccount-change-success) multiaccount-change-success)

View File

@ -239,7 +239,6 @@
(contact/load-contacts) (contact/load-contacts)
#(when (dev-mode? %) #(when (dev-mode? %)
(models.dev-server/start)) (models.dev-server/start))
(browser/initialize-dapp-permissions)
(extensions.module/initialize) (extensions.module/initialize)
(stickers/init-stickers-packs) (stickers/init-stickers-packs)
(multiaccounts.update/update-sign-in-time) (multiaccounts.update/update-sign-in-time)

View File

@ -3,6 +3,7 @@
[status-im.multiaccounts.model :as multiaccounts.model] [status-im.multiaccounts.model :as multiaccounts.model]
[status-im.chaos-mode.core :as chaos-mode] [status-im.chaos-mode.core :as chaos-mode]
[status-im.data-store.core :as data-store] [status-im.data-store.core :as data-store]
[status-im.ethereum.json-rpc :as json-rpc]
[status-im.ethereum.subscriptions :as ethereum.subscriptions] [status-im.ethereum.subscriptions :as ethereum.subscriptions]
[status-im.ethereum.transactions.core :as transactions] [status-im.ethereum.transactions.core :as transactions]
[status-im.fleet.core :as fleet] [status-im.fleet.core :as fleet]
@ -146,6 +147,24 @@
(navigation/navigate-to-cofx :keycard-recovery-success nil) (navigation/navigate-to-cofx :keycard-recovery-success nil)
(navigation/navigate-to-cofx :home nil)))))) (navigation/navigate-to-cofx :home nil))))))
(fx/defn initialize-dapp-permissions
{:events [::initialize-dapp-permissions]}
[{:keys [db]} all-dapp-permissions]
(let [dapp-permissions (reduce (fn [acc {:keys [dapp] :as dapp-permissions}]
(assoc acc dapp dapp-permissions))
{}
all-dapp-permissions)]
{:db (assoc db :dapps/permissions dapp-permissions)}))
(fx/defn initialize-browsers
{:events [::initialize-browsers]}
[{:keys [db]} all-stored-browsers]
(let [browsers (reduce (fn [acc {:keys [browser-id] :as browser}]
(assoc acc browser-id browser))
{}
all-stored-browsers)]
{:db (assoc db :browser/browsers browsers)}))
(fx/defn user-login-callback (fx/defn user-login-callback
{:events [:multiaccounts.login.callback/login-success] {:events [:multiaccounts.login.callback/login-success]
:interceptors [(re-frame/inject-cofx :web3/get-web3) :interceptors [(re-frame/inject-cofx :web3/get-web3)
@ -172,7 +191,11 @@
:card-read-in-progress? :card-read-in-progress?
:pin :pin
:multiaccount)) :multiaccount))
:data-store/get-browsers nil ::json-rpc/call
[{:method "browsers_getBrowsers"
:on-success #(re-frame/dispatch [::initialize-browsers %])}
{:method "permissions_getDappPermissions"
:on-success #(re-frame/dispatch [::initialize-dapp-permissions %])}]
:web3/set-default-account [web3 address] :web3/set-default-account [web3 address]
:web3/fetch-node-version [web3 :web3/fetch-node-version [web3
#(re-frame/dispatch #(re-frame/dispatch

View File

@ -118,6 +118,7 @@
:always :always
(assoc :WalletConfig {:Enabled true} (assoc :WalletConfig {:Enabled true}
:BrowsersConfig {:Enabled true} :BrowsersConfig {:Enabled true}
:PermissionsConfig {:Enabled true}
:WhisperConfig {:Enabled true :WhisperConfig {:Enabled true
:LightClient true :LightClient true
:MinimumPoW 0.001 :MinimumPoW 0.001

View File

@ -41,7 +41,7 @@
(fx/defn check-sync-state (fx/defn check-sync-state
[{:keys [db] :as cofx}] [{:keys [db] :as cofx}]
(if (:multiaccount db) (if (:multiaccount db)
{:json-rpc/call {::json-rpc/call
[{:method "eth_syncing" [{:method "eth_syncing"
:on-success :on-success
(fn [sync] (fn [sync]
@ -72,7 +72,7 @@
:rpc-url constants/ethereum-rpc-url :rpc-url constants/ethereum-rpc-url
:transport/chats transport :transport/chats transport
:mailserver/topics mailserver-topics) :mailserver/topics mailserver-topics)
:json-rpc/call ::json-rpc/call
[{:method "net_version" [{:method "net_version"
:on-success :on-success
(fn [fetched-network-id] (fn [fetched-network-id]

View File

@ -1,6 +1,7 @@
(ns status-im.utils.fx (ns status-im.utils.fx
(:require-macros status-im.utils.fx) (:require-macros status-im.utils.fx)
(:require [clojure.set :as set] (:require [clojure.set :as set]
[status-im.ethereum.json-rpc :as json-rpc]
[taoensso.timbre :as log]) [taoensso.timbre :as log])
(:refer-clojure :exclude [merge])) (:refer-clojure :exclude [merge]))
@ -15,7 +16,7 @@
:pairing/set-installation-metadata :pairing/set-installation-metadata
:shh/send-direct-message :shh/remove-filter :shh/send-direct-message :shh/remove-filter
:shh/generate-sym-key-from-password :transport/confirm-messages-processed :shh/generate-sym-key-from-password :transport/confirm-messages-processed
:group-chats/extract-membership-signature :utils/dispatch-later :json-rpc/call}) :group-chats/extract-membership-signature :utils/dispatch-later ::json-rpc/call})
(defn- safe-merge [fx new-fx] (defn- safe-merge [fx new-fx]
(if (:merging-fx-with-common-keys fx) (if (:merging-fx-with-common-keys fx)

View File

@ -3,8 +3,9 @@
flow has been changed. Such changes should be reflected in both these tests flow has been changed. Such changes should be reflected in both these tests
and documents which describe the whole \"sign in\" flow." and documents which describe the whole \"sign in\" flow."
(:require [cljs.test :refer-macros [deftest is testing]] (:require [cljs.test :refer-macros [deftest is testing]]
[status-im.multiaccounts.login.core :as login.core] [status-im.ethereum.json-rpc :as json-rpc]
[status-im.events :as events] [status-im.events :as events]
[status-im.multiaccounts.login.core :as login.core]
[status-im.signals.core :as signals] [status-im.signals.core :as signals]
[status-im.test.sign-in.data :as data])) [status-im.test.sign-in.data :as data]))
@ -38,8 +39,6 @@
:web3 :web3 :web3 :web3
:all-contacts data/all-contacts :all-contacts data/all-contacts
:all-installations [] :all-installations []
:all-stored-browsers []
:all-dapp-permissions []
:get-all-stored-chats data/get-chats} :get-all-stored-chats data/get-chats}
efx (events/multiaccount-change-success cofx [nil "address"]) efx (events/multiaccount-change-success cofx [nil "address"])
new-db (:db efx)] new-db (:db efx)]
@ -183,7 +182,7 @@
login-result "{\"error\":\"\"}" login-result "{\"error\":\"\"}"
efx (login.core/user-login-callback cofx login-result) efx (login.core/user-login-callback cofx login-result)
new-db (:db efx) new-db (:db efx)
json-rpc (into #{} (map :method (:json-rpc/call efx)))] json-rpc-fx? (into #{} (map :method (::json-rpc/call efx)))]
(testing ":multiaccounts/login cleared." (testing ":multiaccounts/login cleared."
(is (not (contains? new-db :multiaccounts/login)))) (is (not (contains? new-db :multiaccounts/login))))
(testing "Check messaging related effects." (testing "Check messaging related effects."
@ -198,8 +197,8 @@
(testing "Check the rest of effects." (testing "Check the rest of effects."
(is (contains? efx :web3/set-default-account)) (is (contains? efx :web3/set-default-account))
(is (contains? efx :web3/fetch-node-version)) (is (contains? efx :web3/fetch-node-version))
(is (json-rpc "net_version")) (is (json-rpc-fx? "net_version"))
(is (json-rpc "eth_syncing")) (is (json-rpc-fx? "eth_syncing"))
(is (contains? efx :wallet/get-balance)) (is (contains? efx :wallet/get-balance))
(is (contains? efx :wallet/get-tokens-balance)) (is (contains? efx :wallet/get-tokens-balance))
(is (contains? efx :wallet/get-prices)))))) (is (contains? efx :wallet/get-prices))))))