Merge pull request #20 from sachaaaaa/friend_request_prompt

Friend request prompt
pull/22/head
sachaaaaa 7 years ago committed by GitHub
commit 68c98e0f6f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -152,6 +152,9 @@
</script>
<script type='text/x-tmpl-mustache' id='confirmation-dialog'>
<div class="content">
{{ #title }}
<h4>{{ title }}</h4>
{{ /title }}
<div class='message'>{{ message }}</div>
<div class='buttons'>
{{ #showCancel }}

@ -595,6 +595,12 @@
});
}
});
Whisper.events.on('showFriendRequest', friendRequest => {
if (appView) {
appView.showFriendRequest(friendRequest);
}
});
}
window.getSyncRequest = () =>

@ -178,5 +178,16 @@
});
}
},
showFriendRequest({ pubKey, message, accept, decline }) {
const dialog = new Whisper.ConfirmationDialogView({
title: `${pubKey} sent you a friend request:`,
message: message,
okText: 'Accept',
cancelText: 'Decline',
resolve: accept,
reject: decline,
});
this.el.append(dialog.el);
},
});
})();

@ -19,6 +19,8 @@
this.reject = options.reject;
this.cancelText = options.cancelText || i18n('cancel');
this.title = options.title;
this.render();
},
events: {
@ -32,6 +34,7 @@
showCancel: !this.hideCancel,
cancel: this.cancelText,
ok: this.okText,
title: this.title,
};
},
ok() {

@ -441,7 +441,7 @@ MessageReceiver.prototype.extend({
getEnvelopeId(envelope) {
return `${envelope.source}.${
envelope.sourceDevice
} ${envelope.timestamp.toNumber()}`;
} ${envelope.timestamp.toNumber()}`;
},
async getAllFromCache() {
window.log.info('getAllFromCache');
@ -653,9 +653,9 @@ MessageReceiver.prototype.extend({
case textsecure.protobuf.Envelope.Type.CIPHERTEXT:
window.log.info('message from', this.getEnvelopeId(envelope));
promise = Promise.resolve(ciphertext.toArrayBuffer())//;sessionCipher
// TODO: restore decryption & unpadding (?)
//.decryptWhisperMessage(ciphertext)
//.then(this.unpad);
// TODO: restore decryption & unpadding (?)
//.decryptWhisperMessage(ciphertext)
//.then(this.unpad);
break;
case textsecure.protobuf.Envelope.Type.FRIEND_REQUEST:
window.log.info('friend-request message from ', envelope.source)
@ -752,7 +752,7 @@ MessageReceiver.prototype.extend({
const isMe = envelope.source === textsecure.storage.user.getNumber();
const isLeavingGroup = Boolean(
message.group &&
message.group.type === textsecure.protobuf.GroupContext.Type.QUIT
message.group.type === textsecure.protobuf.GroupContext.Type.QUIT
);
if (groupId && isBlocked && !(isMe && isLeavingGroup)) {
@ -793,7 +793,7 @@ MessageReceiver.prototype.extend({
const isMe = envelope.source === textsecure.storage.user.getNumber();
const isLeavingGroup = Boolean(
message.group &&
message.group.type === textsecure.protobuf.GroupContext.Type.QUIT
message.group.type === textsecure.protobuf.GroupContext.Type.QUIT
);
if (groupId && isBlocked && !(isMe && isLeavingGroup)) {
@ -836,9 +836,44 @@ MessageReceiver.prototype.extend({
}
});
},
async promptUserToAcceptFriendRequest(pubKey, message) {
pubKey = pubKey.slice(0, 30) + "...";
let p = new Promise(resolve => {
window.Whisper.events.trigger('showFriendRequest', {
pubKey,
message,
accept: () => {
resolve(true);
},
decline: () => {
resolve(false);
}
});
});
return await p;
},
async innerHandleContentMessage(envelope, plaintext) {
const content = textsecure.protobuf.Content.decode(plaintext);
if (envelope.type === textsecure.protobuf.Envelope.Type.FRIEND_REQUEST) {
// only prompt friend request if there is no conversation yet
let conversation;
try {
conversation = ConversationController.get(envelope.source);
} catch (e) {
}
if (!conversation) {
const accepted = await this.promptUserToAcceptFriendRequest(envelope.source, content.dataMessage.body);
if (accepted) {
// send our own prekeys as a response - no need to wait
libloki.sendEmptyMessageWithPreKeys(envelope.source);
} else {
console.log('friend request declined!');
return;
}
}
}
if (content.preKeyBundleMessage) {
await this.handlePreKeyBundleMessage(envelope, content.preKeyBundleMessage);
}
@ -1067,7 +1102,7 @@ MessageReceiver.prototype.extend({
async handlePreKeyBundleMessage(envelope, preKeyBundleMessage) {
const { preKeyId, signedKeyId } = preKeyBundleMessage;
const [ identityKey, preKey, signedKey, signature ] = [
const [identityKey, preKey, signedKey, signature] = [
preKeyBundleMessage.identityKey,
preKeyBundleMessage.preKey,
preKeyBundleMessage.signedKey,

Loading…
Cancel
Save