add RequestContactSyncMesage

pull/1183/head
Audric Ackermann 5 years ago
parent fbba5575ba
commit 9c1f0e76fd
No known key found for this signature in database
GPG Key ID: 999F434D76324AD4

@ -1,4 +1,4 @@
/* global _, textsecure, WebAPI, libsignal, OutgoingMessage, window, libloki */
/* global _, textsecure, WebAPI, libsignal, OutgoingMessage, window, libloki, libsession */
/* eslint-disable more/no-then, no-bitwise */
@ -417,27 +417,6 @@ MessageSender.prototype = {
});
},
sendMessageProtoAndWait(timestamp, numbers, message, silent, options = {}) {
return new Promise((resolve, reject) => {
const callback = result => {
if (result && result.errors && result.errors.length > 0) {
return reject(result);
}
return resolve(result);
};
this.sendMessageProto(
timestamp,
numbers,
message,
callback,
silent,
options
);
});
},
sendIndividualProto(number, proto, timestamp, silent, options = {}) {
return new Promise((resolve, reject) => {
const callback = res => {
@ -768,28 +747,19 @@ MessageSender.prototype = {
);
},
sendRequestContactSyncMessage(options) {
// Currently not in use under session (our device ID are always 1)
async sendRequestContactSyncMessage() {
const myNumber = textsecure.storage.user.getNumber();
const myDevice = textsecure.storage.user.getDeviceId();
if (myDevice !== 1 && myDevice !== '1') {
const request = new textsecure.protobuf.SyncMessage.Request();
request.type = textsecure.protobuf.SyncMessage.Request.Type.CONTACTS;
const syncMessage = this.createSyncMessage();
syncMessage.request = request;
const contentMessage = new textsecure.protobuf.Content();
contentMessage.syncMessage = syncMessage;
const user = libsession.Types.PubKey.from(myNumber);
const { RequestContactSyncMessage } = window.libsession.Messages.Outgoing;
const silent = true;
return this.sendIndividualProto(
myNumber,
contentMessage,
Date.now(),
silent,
options
const requestContactSyncMessage = new RequestContactSyncMessage(
{ timestamp: Date.now() }
);
await libsession.getMessageQueue().send(user, requestContactSyncMessage);
}
return Promise.resolve();
},
sendDeliveryReceipt(recipientId, timestamp, options) {

@ -0,0 +1,23 @@
import { SyncMessage } from './SyncMessage';
import { SignalService } from '../../../../../protobuf';
export abstract class RequestContactSyncMessage extends SyncMessage {
public ttl(): number {
return this.getDefaultTTL();
}
protected contentProto(): SignalService.Content {
return new SignalService.Content({
syncMessage: this.syncProto(),
});
}
protected syncProto(): SignalService.SyncMessage {
const { CONTACTS } = SignalService.SyncMessage.Request.Type;
const syncMessage = this.createSyncMessage();
syncMessage.request = new SignalService.SyncMessage.Request({type: CONTACTS});
return syncMessage;
}
}

@ -1,5 +1,6 @@
import { ContentMessage } from '../ContentMessage';
import { SignalService } from '../../../../../protobuf';
import * as crypto from 'crypto';
export abstract class SyncMessage extends ContentMessage {
public ttl(): number {
@ -12,5 +13,20 @@ export abstract class SyncMessage extends ContentMessage {
});
}
protected createSyncMessage(): SignalService.SyncMessage {
const syncMessage = new SignalService.SyncMessage();
// Generate a random int from 1 and 512
const buffer = crypto.randomBytes(1);
// tslint:disable-next-line: no-bitwise
const paddingLength = (new Uint8Array(buffer)[0] & 0x1FF) + 1;
// Generate a random padding buffer of the chosen size
syncMessage.padding = crypto.randomBytes(paddingLength);
return syncMessage;
}
protected abstract syncProto(): SignalService.SyncMessage;
}

@ -49,14 +49,14 @@ export async function getSyncContacts(): Promise<Array<any> | undefined> {
c.attributes.secondaryStatus
);
const seondaryContactsPromise = secondaryContactsPartial.map(async c =>
const secondaryContactsPromise = secondaryContactsPartial.map(async c =>
window.ConversationController.getOrCreateAndWait(
c.getPrimaryDevicePubKey(),
'private'
)
);
const secondaryContacts = (await Promise.all(seondaryContactsPromise))
const secondaryContacts = (await Promise.all(secondaryContactsPromise))
// Filter out our primary key if it was added here
.filter(c => c.id !== primaryDevice.key);

Loading…
Cancel
Save