mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-02-28 13:48:12 +00:00
Convert remaining profile apis to use WebSockets and remove REST fallback.
This commit is contained in:
@@ -53,6 +53,7 @@ import org.whispersystems.signalservice.api.keys.KeysApi
|
||||
import org.whispersystems.signalservice.api.link.LinkDeviceApi
|
||||
import org.whispersystems.signalservice.api.message.MessageApi
|
||||
import org.whispersystems.signalservice.api.payments.PaymentsApi
|
||||
import org.whispersystems.signalservice.api.profiles.ProfileApi
|
||||
import org.whispersystems.signalservice.api.provisioning.ProvisioningApi
|
||||
import org.whispersystems.signalservice.api.ratelimit.RateLimitChallengeApi
|
||||
import org.whispersystems.signalservice.api.registration.RegistrationApi
|
||||
@@ -342,6 +343,9 @@ object AppDependencies {
|
||||
val certificateApi: CertificateApi
|
||||
get() = networkModule.certificateApi
|
||||
|
||||
val profileApi: ProfileApi
|
||||
get() = networkModule.profileApi
|
||||
|
||||
@JvmStatic
|
||||
val okHttpClient: OkHttpClient
|
||||
get() = networkModule.okHttpClient
|
||||
@@ -398,7 +402,7 @@ object AppDependencies {
|
||||
fun provideExoPlayerPool(): SimpleExoPlayerPool
|
||||
fun provideAndroidCallAudioManager(): AudioManagerCompat
|
||||
fun provideDonationsService(pushServiceSocket: PushServiceSocket): DonationsService
|
||||
fun provideProfileService(profileOperations: ClientZkProfileOperations, signalServiceMessageReceiver: SignalServiceMessageReceiver, authWebSocket: SignalWebSocket.AuthenticatedWebSocket, unauthWebSocket: SignalWebSocket.UnauthenticatedWebSocket): ProfileService
|
||||
fun provideProfileService(profileOperations: ClientZkProfileOperations, authWebSocket: SignalWebSocket.AuthenticatedWebSocket, unauthWebSocket: SignalWebSocket.UnauthenticatedWebSocket): ProfileService
|
||||
fun provideDeadlockDetector(): DeadlockDetector
|
||||
fun provideClientZkReceiptOperations(signalServiceConfiguration: SignalServiceConfiguration): ClientZkReceiptOperations
|
||||
fun provideScheduledMessageManager(): ScheduledMessageManager
|
||||
@@ -421,5 +425,6 @@ object AppDependencies {
|
||||
fun provideMessageApi(authWebSocket: SignalWebSocket.AuthenticatedWebSocket, unauthWebSocket: SignalWebSocket.UnauthenticatedWebSocket): MessageApi
|
||||
fun provideProvisioningApi(authWebSocket: SignalWebSocket.AuthenticatedWebSocket): ProvisioningApi
|
||||
fun provideCertificateApi(authWebSocket: SignalWebSocket.AuthenticatedWebSocket): CertificateApi
|
||||
fun provideProfileApi(authWebSocket: SignalWebSocket.AuthenticatedWebSocket, pushServiceSocket: PushServiceSocket): ProfileApi
|
||||
}
|
||||
}
|
||||
|
||||
@@ -93,6 +93,7 @@ import org.whispersystems.signalservice.api.keys.KeysApi;
|
||||
import org.whispersystems.signalservice.api.link.LinkDeviceApi;
|
||||
import org.whispersystems.signalservice.api.message.MessageApi;
|
||||
import org.whispersystems.signalservice.api.payments.PaymentsApi;
|
||||
import org.whispersystems.signalservice.api.profiles.ProfileApi;
|
||||
import org.whispersystems.signalservice.api.provisioning.ProvisioningApi;
|
||||
import org.whispersystems.signalservice.api.push.ServiceId.ACI;
|
||||
import org.whispersystems.signalservice.api.push.ServiceId.PNI;
|
||||
@@ -448,11 +449,10 @@ public class ApplicationDependencyProvider implements AppDependencies.Provider {
|
||||
|
||||
@Override
|
||||
public @NonNull ProfileService provideProfileService(@NonNull ClientZkProfileOperations clientZkProfileOperations,
|
||||
@NonNull SignalServiceMessageReceiver receiver,
|
||||
@NonNull SignalWebSocket.AuthenticatedWebSocket authWebSocket,
|
||||
@NonNull SignalWebSocket.UnauthenticatedWebSocket unauthWebSocket)
|
||||
{
|
||||
return new ProfileService(clientZkProfileOperations, receiver, authWebSocket, unauthWebSocket);
|
||||
return new ProfileService(clientZkProfileOperations, authWebSocket, unauthWebSocket);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -547,6 +547,11 @@ public class ApplicationDependencyProvider implements AppDependencies.Provider {
|
||||
return new CertificateApi(authWebSocket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NonNull ProfileApi provideProfileApi(@NonNull SignalWebSocket.AuthenticatedWebSocket authWebSocket, @NonNull PushServiceSocket pushServiceSocket) {
|
||||
return new ProfileApi(authWebSocket, pushServiceSocket);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
static class DynamicCredentialsProvider implements CredentialsProvider {
|
||||
|
||||
|
||||
@@ -38,6 +38,7 @@ import org.whispersystems.signalservice.api.keys.KeysApi
|
||||
import org.whispersystems.signalservice.api.link.LinkDeviceApi
|
||||
import org.whispersystems.signalservice.api.message.MessageApi
|
||||
import org.whispersystems.signalservice.api.payments.PaymentsApi
|
||||
import org.whispersystems.signalservice.api.profiles.ProfileApi
|
||||
import org.whispersystems.signalservice.api.provisioning.ProvisioningApi
|
||||
import org.whispersystems.signalservice.api.push.TrustStore
|
||||
import org.whispersystems.signalservice.api.ratelimit.RateLimitChallengeApi
|
||||
@@ -136,7 +137,7 @@ class NetworkDependenciesModule(
|
||||
}
|
||||
|
||||
val profileService: ProfileService by lazy {
|
||||
provider.provideProfileService(groupsV2Operations.profileOperations, signalServiceMessageReceiver, authWebSocket, unauthWebSocket)
|
||||
provider.provideProfileService(groupsV2Operations.profileOperations, authWebSocket, unauthWebSocket)
|
||||
}
|
||||
|
||||
val donationsService: DonationsService by lazy {
|
||||
@@ -203,6 +204,10 @@ class NetworkDependenciesModule(
|
||||
provider.provideCertificateApi(authWebSocket)
|
||||
}
|
||||
|
||||
val profileApi: ProfileApi by lazy {
|
||||
provider.provideProfileApi(authWebSocket, pushServiceSocket)
|
||||
}
|
||||
|
||||
val okHttpClient: OkHttpClient by lazy {
|
||||
OkHttpClient.Builder()
|
||||
.addInterceptor(StandardUserAgentInterceptor())
|
||||
|
||||
@@ -16,6 +16,7 @@ import org.whispersystems.signalservice.api.keys.KeysApi
|
||||
import org.whispersystems.signalservice.api.link.LinkDeviceApi
|
||||
import org.whispersystems.signalservice.api.message.MessageApi
|
||||
import org.whispersystems.signalservice.api.payments.PaymentsApi
|
||||
import org.whispersystems.signalservice.api.profiles.ProfileApi
|
||||
import org.whispersystems.signalservice.api.provisioning.ProvisioningApi
|
||||
import org.whispersystems.signalservice.api.ratelimit.RateLimitChallengeApi
|
||||
import org.whispersystems.signalservice.api.storage.StorageServiceApi
|
||||
@@ -67,6 +68,11 @@ object SignalNetwork {
|
||||
val payments: PaymentsApi
|
||||
get() = AppDependencies.paymentsApi
|
||||
|
||||
@JvmStatic
|
||||
@get:JvmName("profile")
|
||||
val profile: ProfileApi
|
||||
get() = AppDependencies.profileApi
|
||||
|
||||
val provisioning: ProvisioningApi
|
||||
get() = AppDependencies.provisioningApi
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@ import org.thoughtcrime.securesms.jobs.ProfileUploadJob;
|
||||
import org.thoughtcrime.securesms.jobs.RefreshAttributesJob;
|
||||
import org.thoughtcrime.securesms.jobs.RefreshOwnProfileJob;
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore;
|
||||
import org.thoughtcrime.securesms.net.SignalNetwork;
|
||||
import org.thoughtcrime.securesms.payments.MobileCoinPublicAddress;
|
||||
import org.thoughtcrime.securesms.payments.MobileCoinPublicAddressProfileUtil;
|
||||
import org.thoughtcrime.securesms.payments.PaymentsAddressException;
|
||||
@@ -35,7 +36,8 @@ import org.thoughtcrime.securesms.profiles.AvatarHelper;
|
||||
import org.thoughtcrime.securesms.profiles.ProfileName;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientUtil;
|
||||
import org.whispersystems.signalservice.api.SignalServiceAccountManager;
|
||||
import org.whispersystems.signalservice.api.NetworkResult;
|
||||
import org.whispersystems.signalservice.api.NetworkResultUtil;
|
||||
import org.whispersystems.signalservice.api.crypto.InvalidCiphertextException;
|
||||
import org.whispersystems.signalservice.api.crypto.ProfileCipher;
|
||||
import org.whispersystems.signalservice.api.crypto.SealedSenderAccess;
|
||||
@@ -322,8 +324,7 @@ public final class ProfileUtil {
|
||||
if (profileKey != null) {
|
||||
Log.i(TAG, String.format("Updating profile key credential on recipient %s, fetching", recipient.getId()));
|
||||
|
||||
Optional<ExpiringProfileKeyCredential> profileKeyCredentialOptional = AppDependencies.getSignalServiceAccountManager()
|
||||
.resolveProfileKeyCredential(recipient.requireAci(), profileKey, Locale.getDefault());
|
||||
Optional<ExpiringProfileKeyCredential> profileKeyCredentialOptional = retrieveProfileSync(AppDependencies.getApplication(), recipient, SignalServiceProfile.RequestType.PROFILE_AND_CREDENTIAL, false).getExpiringProfileKeyCredential();
|
||||
|
||||
if (profileKeyCredentialOptional.isPresent()) {
|
||||
boolean updatedProfileKey = SignalDatabase.recipients().setProfileKeyCredential(recipient.getId(), profileKey, profileKeyCredentialOptional.get());
|
||||
@@ -365,17 +366,19 @@ public final class ProfileUtil {
|
||||
Log.d(TAG, "Uploading " + (avatar.stream != null && avatar.stream.getLength() != 0 ? "non-" : "") + "empty avatar.");
|
||||
}
|
||||
|
||||
ProfileKey profileKey = ProfileKeyUtil.getSelfProfileKey();
|
||||
SignalServiceAccountManager accountManager = AppDependencies.getSignalServiceAccountManager();
|
||||
String avatarPath = accountManager.setVersionedProfile(SignalStore.account().requireAci(),
|
||||
profileKey,
|
||||
profileName.serialize(),
|
||||
about,
|
||||
aboutEmoji,
|
||||
Optional.ofNullable(paymentsAddress),
|
||||
avatar,
|
||||
badgeIds,
|
||||
SignalStore.phoneNumberPrivacy().isPhoneNumberSharingEnabled()).orElse(null);
|
||||
ProfileKey profileKey = ProfileKeyUtil.getSelfProfileKey();
|
||||
NetworkResult<String> result = SignalNetwork.profile().setVersionedProfile(SignalStore.account().requireAci(),
|
||||
profileKey,
|
||||
profileName.serialize(),
|
||||
about,
|
||||
aboutEmoji,
|
||||
paymentsAddress,
|
||||
avatar,
|
||||
badgeIds,
|
||||
SignalStore.phoneNumberPrivacy().isPhoneNumberSharingEnabled());
|
||||
|
||||
String avatarPath = NetworkResultUtil.toSetProfileLegacy(result);
|
||||
|
||||
SignalStore.registration().setHasUploadedProfile(true);
|
||||
if (!avatar.keepTheSame) {
|
||||
SignalDatabase.recipients().setProfileAvatar(Recipient.self().getId(), avatarPath, false);
|
||||
|
||||
Reference in New Issue
Block a user