import static org.whispersystems.signalservice.internal.util.Util.isEmpty;
-public final class StickerPackUrl {
-
- private final StickerPackId packId;
- private final byte[] packKey;
+public record StickerPackUrl(StickerPackId packId, byte[] packKey) {
/**
* @throws InvalidStickerPackLinkException If url cannot be parsed.
return new StickerPackUrl(packId, packKey);
}
- public StickerPackUrl(final StickerPackId packId, final byte[] packKey) {
- this.packId = packId;
- this.packKey = packKey;
- }
-
public URI getUrl() {
try {
return new URI("https",
}
}
- public StickerPackId getPackId() {
- return packId;
- }
-
- public byte[] getPackKey() {
- return packKey;
- }
-
public final static class InvalidStickerPackLinkException extends Exception {
public InvalidStickerPackLinkException(String message) {
package org.asamk.signal.manager.config;
-public class KeyBackupConfig {
-
- private final String enclaveName;
- private final byte[] serviceId;
- private final String mrenclave;
-
- public KeyBackupConfig(final String enclaveName, final byte[] serviceId, final String mrenclave) {
- this.enclaveName = enclaveName;
- this.serviceId = serviceId;
- this.mrenclave = mrenclave;
- }
-
- public String getEnclaveName() {
- return enclaveName;
- }
-
- public byte[] getServiceId() {
- return serviceId;
- }
-
- public String getMrenclave() {
- return mrenclave;
- }
-}
+public record KeyBackupConfig(String enclaveName, byte[] serviceId, String mrenclave) {}
import java.util.Collection;
-public class ServiceEnvironmentConfig {
-
- private final ServiceEnvironment type;
- private final SignalServiceConfiguration signalServiceConfiguration;
-
- private final ECPublicKey unidentifiedSenderTrustRoot;
-
- private final KeyBackupConfig keyBackupConfig;
- private final Collection<KeyBackupConfig> fallbackKeyBackupConfigs;
-
- private final String cdsiMrenclave;
- private final String svr2Mrenclave;
-
- public ServiceEnvironmentConfig(
- final ServiceEnvironment type,
- final SignalServiceConfiguration signalServiceConfiguration,
- final ECPublicKey unidentifiedSenderTrustRoot,
- final KeyBackupConfig keyBackupConfig,
- final Collection<KeyBackupConfig> fallbackKeyBackupConfigs,
- final String cdsiMrenclave,
- final String svr2Mrenclave
- ) {
- this.type = type;
- this.signalServiceConfiguration = signalServiceConfiguration;
- this.unidentifiedSenderTrustRoot = unidentifiedSenderTrustRoot;
- this.keyBackupConfig = keyBackupConfig;
- this.fallbackKeyBackupConfigs = fallbackKeyBackupConfigs;
- this.cdsiMrenclave = cdsiMrenclave;
- this.svr2Mrenclave = svr2Mrenclave;
- }
-
- public ServiceEnvironment getType() {
- return type;
- }
-
- public SignalServiceConfiguration getSignalServiceConfiguration() {
- return signalServiceConfiguration;
- }
-
- public ECPublicKey getUnidentifiedSenderTrustRoot() {
- return unidentifiedSenderTrustRoot;
- }
-
- public KeyBackupConfig getKeyBackupConfig() {
- return keyBackupConfig;
- }
-
- public Collection<KeyBackupConfig> getFallbackKeyBackupConfigs() {
- return fallbackKeyBackupConfigs;
- }
-
- public String getCdsiMrenclave() {
- return cdsiMrenclave;
- }
-
- public String getSvr2Mrenclave() {
- return svr2Mrenclave;
- }
-}
+public record ServiceEnvironmentConfig(
+ ServiceEnvironment type,
+ SignalServiceConfiguration signalServiceConfiguration,
+ ECPublicKey unidentifiedSenderTrustRoot,
+ KeyBackupConfig keyBackupConfig,
+ Collection<KeyBackupConfig> fallbackKeyBackupConfigs,
+ String cdsiMrenclave,
+ String svr2Mrenclave
+) {}
account.getRecipientStore().getServiceIdToProfileKeyMap(),
useCompat,
Optional.empty(),
- serviceEnvironmentConfig.getCdsiMrenclave(),
+ serviceEnvironmentConfig.cdsiMrenclave(),
null,
token -> {
// Not storing for partial refresh
@Override
public void installStickerPack(StickerPackUrl url) throws IOException {
- final var packId = url.getPackId();
- final var packKey = url.getPackKey();
+ final var packId = url.packId();
+ final var packKey = url.packKey();
try {
context.getStickerHelper().retrieveStickerPack(packId, packKey);
} catch (InvalidMessageException e) {
password = KeyUtils.createPassword();
GroupsV2Operations groupsV2Operations;
try {
- groupsV2Operations = new GroupsV2Operations(ClientZkOperations.create(serviceEnvironmentConfig.getSignalServiceConfiguration()),
+ groupsV2Operations = new GroupsV2Operations(ClientZkOperations.create(serviceEnvironmentConfig.signalServiceConfiguration()),
ServiceConfig.GROUP_MAX_SIZE);
} catch (Throwable ignored) {
groupsV2Operations = null;
}
- accountManager = new SignalServiceAccountManager(serviceEnvironmentConfig.getSignalServiceConfiguration(),
+ accountManager = new SignalServiceAccountManager(serviceEnvironmentConfig.signalServiceConfiguration(),
new DynamicCredentialsProvider(null, null, null, password, SignalServiceAddress.DEFAULT_DEVICE_ID),
userAgent,
groupsV2Operations,
account = SignalAccount.createOrUpdateLinkedAccount(pathConfig.dataPath(),
accountPath,
number,
- serviceEnvironmentConfig.getType(),
+ serviceEnvironmentConfig.type(),
aci,
pni,
password,
}
if (signalAccount.isRegistered()
&& signalAccount.getServiceEnvironment() != null
- && signalAccount.getServiceEnvironment() != serviceEnvironmentConfig.getType()) {
+ && signalAccount.getServiceEnvironment() != serviceEnvironmentConfig.type()) {
logger.debug("Account is registered in another environment: {}.",
signalAccount.getServiceEnvironment());
return false;
GroupsV2Operations groupsV2Operations;
try {
- groupsV2Operations = new GroupsV2Operations(ClientZkOperations.create(serviceEnvironmentConfig.getSignalServiceConfiguration()),
+ groupsV2Operations = new GroupsV2Operations(ClientZkOperations.create(serviceEnvironmentConfig.signalServiceConfiguration()),
ServiceConfig.GROUP_MAX_SIZE);
} catch (Throwable ignored) {
groupsV2Operations = null;
}
- this.accountManager = new SignalServiceAccountManager(serviceEnvironmentConfig.getSignalServiceConfiguration(),
+ this.accountManager = new SignalServiceAccountManager(serviceEnvironmentConfig.signalServiceConfiguration(),
new DynamicCredentialsProvider(
// Using empty UUID, because registering doesn't work otherwise
null, null, account.getNumber(), account.getPassword(), SignalServiceAddress.DEFAULT_DEVICE_ID),
groupsV2Operations,
ServiceConfig.AUTOMATIC_NETWORK_RETRY);
final var keyBackupService = accountManager.getKeyBackupService(ServiceConfig.getIasKeyStore(),
- serviceEnvironmentConfig.getKeyBackupConfig().getEnclaveName(),
- serviceEnvironmentConfig.getKeyBackupConfig().getServiceId(),
- serviceEnvironmentConfig.getKeyBackupConfig().getMrenclave(),
+ serviceEnvironmentConfig.keyBackupConfig().enclaveName(),
+ serviceEnvironmentConfig.keyBackupConfig().serviceId(),
+ serviceEnvironmentConfig.keyBackupConfig().mrenclave(),
10);
- final var fallbackKeyBackupServices = serviceEnvironmentConfig.getFallbackKeyBackupConfigs()
+ final var fallbackKeyBackupServices = serviceEnvironmentConfig.fallbackKeyBackupConfigs()
.stream()
.map(config -> accountManager.getKeyBackupService(ServiceConfig.getIasKeyStore(),
- config.getEnclaveName(),
- config.getServiceId(),
- config.getMrenclave(),
+ config.enclaveName(),
+ config.serviceId(),
+ config.mrenclave(),
10))
.toList();
- final var secureValueRecoveryV2 = accountManager.getSecureValueRecoveryV2(serviceEnvironmentConfig.getSvr2Mrenclave());
+ final var secureValueRecoveryV2 = accountManager.getSecureValueRecoveryV2(serviceEnvironmentConfig.svr2Mrenclave());
this.pinHelper = new PinHelper(keyBackupService, fallbackKeyBackupServices, secureValueRecoveryV2);
}
) throws IOException, CaptchaRequiredException, NonNormalizedPhoneNumberException, RateLimitException {
if (account.isRegistered()
&& account.getServiceEnvironment() != null
- && account.getServiceEnvironment() != serviceEnvironmentConfig.getType()) {
+ && account.getServiceEnvironment() != serviceEnvironmentConfig.type()) {
throw new IOException("Account is registered in another environment: " + account.getServiceEnvironment());
}
private boolean attemptReactivateAccount() {
try {
- final var accountManager = new SignalServiceAccountManager(serviceEnvironmentConfig.getSignalServiceConfiguration(),
+ final var accountManager = new SignalServiceAccountManager(serviceEnvironmentConfig.signalServiceConfiguration(),
account.getCredentialsProvider(),
userAgent,
null,
public SignalServiceAccountManager getAccountManager() {
return getOrCreate(() -> accountManager,
- () -> accountManager = new SignalServiceAccountManager(serviceEnvironmentConfig.getSignalServiceConfiguration(),
+ () -> accountManager = new SignalServiceAccountManager(serviceEnvironmentConfig.signalServiceConfiguration(),
credentialsProvider,
userAgent,
getGroupsV2Operations(),
}
public SignalServiceAccountManager createUnauthenticatedAccountManager(String number, String password) {
- return new SignalServiceAccountManager(getServiceEnvironmentConfig().getSignalServiceConfiguration(),
+ return new SignalServiceAccountManager(getServiceEnvironmentConfig().signalServiceConfiguration(),
null,
null,
number,
public GroupsV2Operations getGroupsV2Operations() {
return getOrCreate(() -> groupsV2Operations,
- () -> groupsV2Operations = new GroupsV2Operations(ClientZkOperations.create(serviceEnvironmentConfig.getSignalServiceConfiguration()),
+ () -> groupsV2Operations = new GroupsV2Operations(ClientZkOperations.create(serviceEnvironmentConfig.signalServiceConfiguration()),
ServiceConfig.GROUP_MAX_SIZE));
}
private ClientZkOperations getClientZkOperations() {
return getOrCreate(() -> clientZkOperations,
- () -> clientZkOperations = ClientZkOperations.create(serviceEnvironmentConfig.getSignalServiceConfiguration()));
+ () -> clientZkOperations = ClientZkOperations.create(serviceEnvironmentConfig.signalServiceConfiguration()));
}
private ClientZkProfileOperations getClientZkProfileOperations() {
@Override
public WebSocketConnection createWebSocket() {
return new WebSocketConnection("normal",
- serviceEnvironmentConfig.getSignalServiceConfiguration(),
+ serviceEnvironmentConfig.signalServiceConfiguration(),
Optional.of(credentialsProvider),
userAgent,
healthMonitor,
@Override
public WebSocketConnection createUnidentifiedWebSocket() {
return new WebSocketConnection("unidentified",
- serviceEnvironmentConfig.getSignalServiceConfiguration(),
+ serviceEnvironmentConfig.signalServiceConfiguration(),
Optional.empty(),
userAgent,
healthMonitor,
public SignalServiceMessageReceiver getMessageReceiver() {
return getOrCreate(() -> messageReceiver,
- () -> messageReceiver = new SignalServiceMessageReceiver(serviceEnvironmentConfig.getSignalServiceConfiguration(),
+ () -> messageReceiver = new SignalServiceMessageReceiver(serviceEnvironmentConfig.signalServiceConfiguration(),
credentialsProvider,
userAgent,
getClientZkProfileOperations(),
public SignalServiceMessageSender getMessageSender() {
return getOrCreate(() -> messageSender,
- () -> messageSender = new SignalServiceMessageSender(serviceEnvironmentConfig.getSignalServiceConfiguration(),
+ () -> messageSender = new SignalServiceMessageSender(serviceEnvironmentConfig.signalServiceConfiguration(),
credentialsProvider,
dataStore,
sessionLock,
public KeyBackupService getKeyBackupService() {
return getOrCreate(() -> keyBackupService,
() -> keyBackupService = getAccountManager().getKeyBackupService(ServiceConfig.getIasKeyStore(),
- serviceEnvironmentConfig.getKeyBackupConfig().getEnclaveName(),
- serviceEnvironmentConfig.getKeyBackupConfig().getServiceId(),
- serviceEnvironmentConfig.getKeyBackupConfig().getMrenclave(),
+ serviceEnvironmentConfig.keyBackupConfig().enclaveName(),
+ serviceEnvironmentConfig.keyBackupConfig().serviceId(),
+ serviceEnvironmentConfig.keyBackupConfig().mrenclave(),
10));
}
public SecureValueRecoveryV2 getSecureValueRecoveryV2() {
return getOrCreate(() -> secureValueRecoveryV2,
- () -> secureValueRecoveryV2 = getAccountManager().getSecureValueRecoveryV2(serviceEnvironmentConfig.getSvr2Mrenclave()));
+ () -> secureValueRecoveryV2 = getAccountManager().getSecureValueRecoveryV2(serviceEnvironmentConfig.svr2Mrenclave()));
}
public Collection<KeyBackupService> getFallbackKeyBackupServices() {
- return serviceEnvironmentConfig.getFallbackKeyBackupConfigs()
+ return serviceEnvironmentConfig.fallbackKeyBackupConfigs()
.stream()
.map(config -> getAccountManager().getKeyBackupService(ServiceConfig.getIasKeyStore(),
- config.getEnclaveName(),
- config.getServiceId(),
- config.getMrenclave(),
+ config.enclaveName(),
+ config.serviceId(),
+ config.mrenclave(),
10))
.toList();
}
public SignalServiceCipher getCipher() {
return getOrCreate(() -> cipher, () -> {
- final var certificateValidator = new CertificateValidator(serviceEnvironmentConfig.getUnidentifiedSenderTrustRoot());
+ final var certificateValidator = new CertificateValidator(serviceEnvironmentConfig.unidentifiedSenderTrustRoot());
final var address = new SignalServiceAddress(credentialsProvider.getAci(), credentialsProvider.getE164());
final var deviceId = credentialsProvider.getDeviceId();
cipher = new SignalServiceCipher(address, deviceId, dataStore.aci(), sessionLock, certificateValidator);
var profileStoreNode = rootNode.get("profileStore");
final var legacyProfileStore = jsonProcessor.convertValue(profileStoreNode, LegacyProfileStore.class);
for (var profileEntry : legacyProfileStore.getProfileEntries()) {
- var recipientId = getRecipientResolver().resolveRecipient(profileEntry.getAddress());
+ var recipientId = getRecipientResolver().resolveRecipient(profileEntry.address());
// Not migrating profile key credential here, it was changed to expiring profile key credentials
- getProfileStore().storeProfileKey(recipientId, profileEntry.getProfileKey());
- final var profile = profileEntry.getProfile();
+ getProfileStore().storeProfileKey(recipientId, profileEntry.profileKey());
+ final var profile = profileEntry.profile();
if (profile != null) {
final var capabilities = new HashSet<Profile.Capability>();
if (profile.getCapabilities() != null) {
capabilities.add(Profile.Capability.storage);
}
}
- final var newProfile = new Profile(profileEntry.getLastUpdateTimestamp(),
+ final var newProfile = new Profile(profileEntry.lastUpdateTimestamp(),
profile.getGivenName(),
profile.getFamilyName(),
profile.getAbout(),
import org.asamk.signal.manager.storage.recipients.RecipientAddress;
import org.signal.libsignal.zkgroup.profiles.ProfileKey;
-public class LegacySignalProfileEntry {
-
- private final RecipientAddress address;
-
- private final ProfileKey profileKey;
-
- private final long lastUpdateTimestamp;
-
- private final LegacySignalProfile profile;
-
- public LegacySignalProfileEntry(
- final RecipientAddress address,
- final ProfileKey profileKey,
- final long lastUpdateTimestamp,
- final LegacySignalProfile profile
- ) {
- this.address = address;
- this.profileKey = profileKey;
- this.lastUpdateTimestamp = lastUpdateTimestamp;
- this.profile = profile;
- }
-
- public RecipientAddress getAddress() {
- return address;
- }
-
- public ProfileKey getProfileKey() {
- return profileKey;
- }
-
- public long getLastUpdateTimestamp() {
- return lastUpdateTimestamp;
- }
-
- public LegacySignalProfile getProfile() {
- return profile;
- }
-}
+public record LegacySignalProfileEntry(
+ RecipientAddress address, ProfileKey profileKey, long lastUpdateTimestamp, LegacySignalProfile profile
+) {}