import org.asamk.signal.manager.helper.GroupV2Helper;
import org.asamk.signal.manager.helper.IncomingMessageHandler;
import org.asamk.signal.manager.helper.PinHelper;
+import org.asamk.signal.manager.helper.PreKeyHelper;
import org.asamk.signal.manager.helper.ProfileHelper;
import org.asamk.signal.manager.helper.SendHelper;
import org.asamk.signal.manager.helper.StorageHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.whispersystems.libsignal.IdentityKey;
-import org.whispersystems.libsignal.IdentityKeyPair;
import org.whispersystems.libsignal.InvalidKeyException;
import org.whispersystems.libsignal.ecc.ECPublicKey;
import org.whispersystems.libsignal.fingerprint.Fingerprint;
import org.whispersystems.libsignal.fingerprint.FingerprintParsingException;
import org.whispersystems.libsignal.fingerprint.FingerprintVersionMismatchException;
-import org.whispersystems.libsignal.state.PreKeyRecord;
-import org.whispersystems.libsignal.state.SignedPreKeyRecord;
import org.whispersystems.libsignal.util.Pair;
import org.whispersystems.libsignal.util.guava.Optional;
import org.whispersystems.signalservice.api.SignalSessionLock;
private final GroupHelper groupHelper;
private final ContactHelper contactHelper;
private final IncomingMessageHandler incomingMessageHandler;
+ private final PreKeyHelper preKeyHelper;
private final Context context;
private boolean hasCaughtUpWithOldMessages = false;
groupHelper,
avatarStore,
this::resolveSignalServiceAddress);
+ preKeyHelper = new PreKeyHelper(account, dependencies);
this.context = new Context(account,
dependencies,
groupHelper,
syncHelper,
profileHelper,
- storageHelper);
+ storageHelper,
+ preKeyHelper);
var jobExecutor = new JobExecutor(context);
this.incomingMessageHandler = new IncomingMessageHandler(account,
contactHelper,
attachmentHelper,
syncHelper,
+ this::getRecipientProfile,
jobExecutor);
}
return account.getSelfRecipientId();
}
- private IdentityKeyPair getIdentityKeyPair() {
- return account.getIdentityKeyPair();
- }
-
public int getDeviceId() {
return account.getDeviceId();
}
days);
}
}
- if (dependencies.getAccountManager().getPreKeysCount() < ServiceConfig.PREKEY_MINIMUM_COUNT) {
- refreshPreKeys();
- }
+ preKeyHelper.refreshPreKeysIfNecessary();
if (account.getUuid() == null) {
account.setUuid(dependencies.getAccountManager().getOwnUuid());
}
account.setRegistered(false);
}
+ public void submitRateLimitRecaptchaChallenge(String challenge, String captcha) throws IOException {
+ dependencies.getAccountManager().submitRateLimitRecaptchaChallenge(challenge, captcha);
+ }
+
public List<Device> getLinkedDevices() throws IOException {
var devices = dependencies.getAccountManager().getDevices();
account.setMultiDevice(devices.size() > 1);
}
private void addDevice(String deviceIdentifier, ECPublicKey deviceKey) throws IOException, InvalidKeyException {
- var identityKeyPair = getIdentityKeyPair();
+ var identityKeyPair = account.getIdentityKeyPair();
var verificationCode = dependencies.getAccountManager().getNewDeviceVerificationCode();
dependencies.getAccountManager()
}
void refreshPreKeys() throws IOException {
- var oneTimePreKeys = generatePreKeys();
- final var identityKeyPair = getIdentityKeyPair();
- var signedPreKeyRecord = generateSignedPreKey(identityKeyPair);
-
- dependencies.getAccountManager().setPreKeys(identityKeyPair.getPublicKey(), signedPreKeyRecord, oneTimePreKeys);
- }
-
- private List<PreKeyRecord> generatePreKeys() {
- final var offset = account.getPreKeyIdOffset();
-
- var records = KeyUtils.generatePreKeyRecords(offset, ServiceConfig.PREKEY_BATCH_SIZE);
- account.addPreKeys(records);
-
- return records;
- }
-
- private SignedPreKeyRecord generateSignedPreKey(IdentityKeyPair identityKeyPair) {
- final var signedPreKeyId = account.getNextSignedPreKeyId();
-
- var record = KeyUtils.generateSignedPreKeyRecord(identityKeyPair, signedPreKeyId);
- account.addSignedPreKey(record);
-
- return record;
+ preKeyHelper.refreshPreKeys();
}
public Profile getRecipientProfile(RecipientId recipientId) {
// store message on disk, before acknowledging receipt to the server
cachedMessage[0] = account.getMessageCache().cacheMessage(envelope1, recipientId);
});
- logger.debug("New message received from server");
if (result.isPresent()) {
envelope = result.get();
+ logger.debug("New message received from server");
} else {
- // Received indicator that server queue is empty
+ logger.debug("Received indicator that server queue is empty");
handleQueuedActions(queuedActions);
queuedActions.clear();
) {
return Utils.computeSafetyNumber(capabilities.isUuid(),
account.getSelfAddress(),
- getIdentityKeyPair().getPublicKey(),
+ account.getIdentityKeyPair().getPublicKey(),
theirAddress,
theirIdentityKey);
}