From 555c2a754c82a00013d597ff8f4c5aadb267560c Mon Sep 17 00:00:00 2001 From: Angelo Laub Date: Thu, 31 Jan 2019 14:47:53 +0100 Subject: [PATCH] implement accessgrant --- .gitignore | 1 + contract/squeakr.cpp | 4 +++ frontend/src/Backend.js | 26 ++++++++++++++-- frontend/src/components/AcceptButton.vue | 21 ------------- frontend/src/components/FollowButton.vue | 26 ---------------- .../src/components/FollowRequestListItem.vue | 24 +++++++++++++++ frontend/src/components/FollowingListItem.vue | 30 +++++++++++++++++++ frontend/src/components/UserListItem.vue | 26 +++++++++------- frontend/src/views/Users.vue | 26 +++++++++++----- 9 files changed, 117 insertions(+), 67 deletions(-) delete mode 100644 frontend/src/components/AcceptButton.vue delete mode 100644 frontend/src/components/FollowButton.vue create mode 100644 frontend/src/components/FollowRequestListItem.vue create mode 100644 frontend/src/components/FollowingListItem.vue diff --git a/.gitignore b/.gitignore index b8e1537..fed57a1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /frontend/node_modules /contract/squeakr.wasm /contract/squeakr.abi +.DS_Store diff --git a/contract/squeakr.cpp b/contract/squeakr.cpp index 25e3018..33f212b 100644 --- a/contract/squeakr.cpp +++ b/contract/squeakr.cpp @@ -70,6 +70,10 @@ void squeakr::accessgrant(const name user, const name contract, const std::strin const auto followers_idx = followers.template get_index<"combined"_n>(); const auto followers_itr = followers_idx.find(combine_ids(user.value, giver.value)); check(followers_itr != followers_idx.end(), "You are not following this user, permission denied"); + + followers.modify(followers.find(followers_itr->id), same_payer, [&](auto& x) { + x.access_granted = true; + }); } ACTION squeakr::admclear(const name sender) { diff --git a/frontend/src/Backend.js b/frontend/src/Backend.js index b4006f2..7d4d810 100644 --- a/frontend/src/Backend.js +++ b/frontend/src/Backend.js @@ -225,8 +225,6 @@ class Backend { } async accept(follower) { - const {priveos, nonce, key} = await this.getPriveos() - const actions = [{ account: contract, name: 'accept', @@ -254,7 +252,7 @@ class Backend { return res.rows.filter(x => x.followee == this.account.name) } - async followRequests(user) { + async followRequests() { const res = await this.eos_api.getTableRows({ json: true, code: contract, @@ -262,6 +260,7 @@ class Backend { table: 'request', limit: 100, }) + console.log("inside followRequests: res.rows: ", res.rows) return res.rows.filter(x => x.followee == this.account.name) } @@ -281,7 +280,28 @@ class Backend { const res = await this.eos.transaction({actions}) console.log(res) } + + async requestAccess(user) { + const { priveos } = await this.getPriveos() + await priveos.accessgrant(this.account.name, user, "4,EOS") + const {key, nonce} = await priveos.read(this.account.name, user) + addKey(user, key, nonce) + } } +/** + * In a production application, it would be better to encrypt these. + * Either with the user's private key or key derived from a username/password + */ +function addKey(user, key, nonce) { + let keyStore = JSON.parse(localStorage.getItem('keystore') || '{}') + keyStore[user] = {key, nonce} + localStorage.setItem('keystore', JSON.stringify(keyStore)) +} + +function getKey(user) { + let keyStore = JSON.parse(localStorage.getItem('keystore') || '{}') + return keyStore[user] +} export default new Backend() diff --git a/frontend/src/components/AcceptButton.vue b/frontend/src/components/AcceptButton.vue deleted file mode 100644 index 00e7820..0000000 --- a/frontend/src/components/AcceptButton.vue +++ /dev/null @@ -1,21 +0,0 @@ - - - diff --git a/frontend/src/components/FollowButton.vue b/frontend/src/components/FollowButton.vue deleted file mode 100644 index 491290c..0000000 --- a/frontend/src/components/FollowButton.vue +++ /dev/null @@ -1,26 +0,0 @@ - - - diff --git a/frontend/src/components/FollowRequestListItem.vue b/frontend/src/components/FollowRequestListItem.vue new file mode 100644 index 0000000..e8d0dd9 --- /dev/null +++ b/frontend/src/components/FollowRequestListItem.vue @@ -0,0 +1,24 @@ + + + diff --git a/frontend/src/components/FollowingListItem.vue b/frontend/src/components/FollowingListItem.vue new file mode 100644 index 0000000..e4afaae --- /dev/null +++ b/frontend/src/components/FollowingListItem.vue @@ -0,0 +1,30 @@ + + + diff --git a/frontend/src/components/UserListItem.vue b/frontend/src/components/UserListItem.vue index 72c4243..c46aab1 100644 --- a/frontend/src/components/UserListItem.vue +++ b/frontend/src/components/UserListItem.vue @@ -1,25 +1,31 @@ diff --git a/frontend/src/views/Users.vue b/frontend/src/views/Users.vue index 33f4c84..f86a336 100644 --- a/frontend/src/views/Users.vue +++ b/frontend/src/views/Users.vue @@ -3,13 +3,19 @@

All Users

- +
-
+

Follow Requests

- + +
+
+
+

Users you are following

+ +
@@ -18,28 +24,34 @@