Make key-setting methods synchronous
This commit is contained in:
parent
f738bc97e7
commit
1167d0ac2e
|
@ -60,7 +60,6 @@ import org.whispersystems.textsecuregcm.storage.Account;
|
||||||
import org.whispersystems.textsecuregcm.storage.AccountsManager;
|
import org.whispersystems.textsecuregcm.storage.AccountsManager;
|
||||||
import org.whispersystems.textsecuregcm.storage.Device;
|
import org.whispersystems.textsecuregcm.storage.Device;
|
||||||
import org.whispersystems.textsecuregcm.storage.KeysManager;
|
import org.whispersystems.textsecuregcm.storage.KeysManager;
|
||||||
import org.whispersystems.textsecuregcm.util.Util;
|
|
||||||
import reactor.core.publisher.Flux;
|
import reactor.core.publisher.Flux;
|
||||||
import reactor.core.publisher.Mono;
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
|
@ -110,7 +109,7 @@ public class KeysController {
|
||||||
@ApiResponse(responseCode = "401", description = "Account authentication check failed.")
|
@ApiResponse(responseCode = "401", description = "Account authentication check failed.")
|
||||||
@ApiResponse(responseCode = "403", description = "Attempt to change identity key from a non-primary device.")
|
@ApiResponse(responseCode = "403", description = "Attempt to change identity key from a non-primary device.")
|
||||||
@ApiResponse(responseCode = "422", description = "Invalid request format.")
|
@ApiResponse(responseCode = "422", description = "Invalid request format.")
|
||||||
public CompletableFuture<Response> setKeys(@Auth final DisabledPermittedAuthenticatedAccount disabledPermittedAuth,
|
public void setKeys(@Auth final DisabledPermittedAuthenticatedAccount disabledPermittedAuth,
|
||||||
@RequestBody @NotNull @Valid final SetKeysRequest setKeysRequest,
|
@RequestBody @NotNull @Valid final SetKeysRequest setKeysRequest,
|
||||||
|
|
||||||
@Parameter(allowEmptyValue=true)
|
@Parameter(allowEmptyValue=true)
|
||||||
|
@ -147,7 +146,7 @@ public class KeysController {
|
||||||
updateAccountFuture = CompletableFuture.completedFuture(account);
|
updateAccountFuture = CompletableFuture.completedFuture(account);
|
||||||
}
|
}
|
||||||
|
|
||||||
return updateAccountFuture.thenCompose(updatedAccount -> {
|
updateAccountFuture.thenCompose(updatedAccount -> {
|
||||||
final List<CompletableFuture<Void>> storeFutures = new ArrayList<>(3);
|
final List<CompletableFuture<Void>> storeFutures = new ArrayList<>(3);
|
||||||
|
|
||||||
if (setKeysRequest.preKeys() != null && !setKeysRequest.preKeys().isEmpty()) {
|
if (setKeysRequest.preKeys() != null && !setKeysRequest.preKeys().isEmpty()) {
|
||||||
|
@ -165,7 +164,7 @@ public class KeysController {
|
||||||
|
|
||||||
return CompletableFuture.allOf(storeFutures.toArray(EMPTY_FUTURE_ARRAY));
|
return CompletableFuture.allOf(storeFutures.toArray(EMPTY_FUTURE_ARRAY));
|
||||||
})
|
})
|
||||||
.thenApply(Util.ASYNC_EMPTY_RESPONSE);
|
.join();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkSignedPreKeySignatures(final SetKeysRequest setKeysRequest, final IdentityKey identityKey) {
|
private void checkSignedPreKeySignatures(final SetKeysRequest setKeysRequest, final IdentityKey identityKey) {
|
||||||
|
@ -292,14 +291,14 @@ public class KeysController {
|
||||||
@ApiResponse(responseCode = "200", description = "Indicates that new prekey was successfully stored.")
|
@ApiResponse(responseCode = "200", description = "Indicates that new prekey was successfully stored.")
|
||||||
@ApiResponse(responseCode = "401", description = "Account authentication check failed.")
|
@ApiResponse(responseCode = "401", description = "Account authentication check failed.")
|
||||||
@ApiResponse(responseCode = "422", description = "Invalid request format.")
|
@ApiResponse(responseCode = "422", description = "Invalid request format.")
|
||||||
public CompletableFuture<Response> setSignedKey(@Auth final AuthenticatedAccount auth,
|
public void setSignedKey(@Auth final AuthenticatedAccount auth,
|
||||||
@Valid final ECSignedPreKey signedPreKey,
|
@Valid final ECSignedPreKey signedPreKey,
|
||||||
@QueryParam("identity") @DefaultValue("aci") final IdentityType identityType) {
|
@QueryParam("identity") @DefaultValue("aci") final IdentityType identityType) {
|
||||||
|
|
||||||
final UUID identifier = auth.getAccount().getIdentifier(identityType);
|
final UUID identifier = auth.getAccount().getIdentifier(identityType);
|
||||||
final byte deviceId = auth.getAuthenticatedDevice().getId();
|
final byte deviceId = auth.getAuthenticatedDevice().getId();
|
||||||
|
|
||||||
return accounts.updateDeviceTransactionallyAsync(auth.getAccount(),
|
accounts.updateDeviceTransactionallyAsync(auth.getAccount(),
|
||||||
deviceId,
|
deviceId,
|
||||||
d -> {
|
d -> {
|
||||||
switch (identityType) {
|
switch (identityType) {
|
||||||
|
@ -311,7 +310,7 @@ public class KeysController {
|
||||||
.map(List::of)
|
.map(List::of)
|
||||||
.orElseGet(Collections::emptyList))
|
.orElseGet(Collections::emptyList))
|
||||||
.toCompletableFuture()
|
.toCompletableFuture()
|
||||||
.thenApply(Util.ASYNC_EMPTY_RESPONSE);
|
.join();
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<Device> parseDeviceId(String deviceId, Account account) {
|
private List<Device> parseDeviceId(String deviceId, Account account) {
|
||||||
|
|
Loading…
Reference in New Issue