From 5d3d51190580ae79308251f80b919cf0157e7b36 Mon Sep 17 00:00:00 2001 From: michaelr Date: Mon, 11 Apr 2016 22:58:31 +0300 Subject: [PATCH] don't attempt to decrypt group msg if key has been removed --- protocol/src/cljs/syng_im/protocol/api.cljs | 4 ++-- .../src/cljs/syng_im/protocol/handler.cljs | 21 +++++++++++-------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/protocol/src/cljs/syng_im/protocol/api.cljs b/protocol/src/cljs/syng_im/protocol/api.cljs index 518345d..5eae501 100644 --- a/protocol/src/cljs/syng_im/protocol/api.cljs +++ b/protocol/src/cljs/syng_im/protocol/api.cljs @@ -59,8 +59,8 @@ :new-group-chat [from group-id] :group-chat-invite-acked [ack-msg-id from group-id] :group-new-participant [identity group-id from msg-id] - :group-removed-participant [from identity group-id] - :removed-from-group [from group-id] + :group-removed-participant [from identity group-id msg-id] + :removed-from-group [from group-id msg-id] :participant-left-group [from group-id] :initialized [identity] diff --git a/protocol/src/cljs/syng_im/protocol/handler.cljs b/protocol/src/cljs/syng_im/protocol/handler.cljs index 96a4683..109e2ab 100644 --- a/protocol/src/cljs/syng_im/protocol/handler.cljs +++ b/protocol/src/cljs/syng_im/protocol/handler.cljs @@ -72,11 +72,11 @@ :group-id group-topic})))) (defn decrypt-group-msg [group-topic encrypted-payload] - (let [store (storage) - {private-key :private} (get-keypair store group-topic)] - (-> (decrypt private-key encrypted-payload) - (read-string) - (assoc :group-topic group-topic)))) + (let [store (storage)] + (when-let [{private-key :private} (get-keypair store group-topic)] + (-> (decrypt private-key encrypted-payload) + (read-string) + (assoc :group-topic group-topic))))) (defn handle-group-user-msg [web3 from {:keys [msg-id group-topic] :as payload}] (send-ack web3 from msg-id) @@ -107,7 +107,8 @@ (remove-identity store group-topic removed-identity) (invoke-user-handler :group-removed-participant {:identity removed-identity :group-id group-topic - :from from}))) + :from from + :msg-id msg-id}))) (log/warn "Ignoring group-removed-participant for group" group-topic "from a non group-admin user" from)))) (defn handle-removed-from-group [web3 from {:keys [group-topic msg-id]}] @@ -119,7 +120,8 @@ (remove-group-data store group-topic) (stop-listener group-topic) (invoke-user-handler :removed-from-group {:group-id group-topic - :from from}))) + :from from + :msg-id msg-id}))) (log/warn "Ignoring removed-from-group for group" group-topic "from a non group-admin user" from)))) (defn handle-participant-left-group [web3 from {:keys [group-topic msg-id]}] @@ -131,11 +133,12 @@ :from from})))) (defn handle-group-msg [web3 msg-type from {:keys [enc-payload group-topic]}] - (let [payload (decrypt-group-msg group-topic enc-payload)] + (if-let [payload (decrypt-group-msg group-topic enc-payload)] (case msg-type :group-user-msg (handle-group-user-msg web3 from payload) :group-new-participant (handle-group-new-participant web3 from payload) - :left-group (handle-participant-left-group web3 from payload)))) + :left-group (handle-participant-left-group web3 from payload)) + (log/debug "Could not decrypt group msg, possibly you've left the group."))) (defn handle-incoming-whisper-msg [web3 msg] (log/info "Got whisper message:" msg)