mirror of
https://github.com/signalapp/Signal-Server
synced 2026-04-21 13:18:00 +01:00
70 lines
3.0 KiB
Java
70 lines
3.0 KiB
Java
/*
|
|
* Copyright 2023 Signal Messenger, LLC
|
|
* SPDX-License-Identifier: AGPL-3.0-only
|
|
*/
|
|
|
|
package org.signal.integration;
|
|
|
|
import java.time.Clock;
|
|
import java.time.Duration;
|
|
import java.util.Optional;
|
|
import java.util.concurrent.CompletableFuture;
|
|
import org.signal.integration.config.Config;
|
|
import org.whispersystems.textsecuregcm.registration.VerificationSession;
|
|
import org.whispersystems.textsecuregcm.storage.RegistrationRecoveryPasswords;
|
|
import org.whispersystems.textsecuregcm.storage.RegistrationRecoveryPasswordsManager;
|
|
import org.whispersystems.textsecuregcm.storage.VerificationSessionManager;
|
|
import org.whispersystems.textsecuregcm.storage.VerificationSessions;
|
|
import org.whispersystems.textsecuregcm.util.DynamoDbFromConfig;
|
|
import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
|
|
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;
|
|
import software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient;
|
|
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
|
|
|
|
public class IntegrationTools {
|
|
|
|
private final RegistrationRecoveryPasswordsManager registrationRecoveryPasswordsManager;
|
|
|
|
private final VerificationSessionManager verificationSessionManager;
|
|
|
|
|
|
public static IntegrationTools create(final Config config) {
|
|
final AwsCredentialsProvider credentialsProvider = DefaultCredentialsProvider.builder().build();
|
|
|
|
final DynamoDbAsyncClient dynamoDbAsyncClient = DynamoDbFromConfig.asyncClient(
|
|
config.dynamoDbClientConfiguration(),
|
|
credentialsProvider);
|
|
|
|
final DynamoDbClient dynamoDbClient = DynamoDbFromConfig.client(
|
|
config.dynamoDbClientConfiguration(),
|
|
credentialsProvider);
|
|
|
|
final RegistrationRecoveryPasswords registrationRecoveryPasswords = new RegistrationRecoveryPasswords(
|
|
config.dynamoDbTables().registrationRecovery(), Duration.ofDays(1), dynamoDbClient, dynamoDbAsyncClient);
|
|
|
|
final VerificationSessions verificationSessions = new VerificationSessions(
|
|
dynamoDbAsyncClient, config.dynamoDbTables().verificationSessions(), Clock.systemUTC());
|
|
|
|
return new IntegrationTools(
|
|
new RegistrationRecoveryPasswordsManager(registrationRecoveryPasswords),
|
|
new VerificationSessionManager(verificationSessions)
|
|
);
|
|
}
|
|
|
|
private IntegrationTools(
|
|
final RegistrationRecoveryPasswordsManager registrationRecoveryPasswordsManager,
|
|
final VerificationSessionManager verificationSessionManager) {
|
|
this.registrationRecoveryPasswordsManager = registrationRecoveryPasswordsManager;
|
|
this.verificationSessionManager = verificationSessionManager;
|
|
}
|
|
|
|
public CompletableFuture<Void> populateRecoveryPassword(final String e164, final byte[] password) {
|
|
return registrationRecoveryPasswordsManager.storeForCurrentNumber(e164, password);
|
|
}
|
|
|
|
public CompletableFuture<Optional<String>> peekVerificationSessionPushChallenge(final String sessionId) {
|
|
return verificationSessionManager.findForId(sessionId)
|
|
.thenApply(maybeSession -> maybeSession.map(VerificationSession::pushChallenge));
|
|
}
|
|
}
|