Skip to content

Commit

Permalink
[#1078] Restore support of client-certificate credentials with basic-…
Browse files Browse the repository at this point in the history
…auth for SaslPlainCredentialsSupplier.

Signed-off-by: Yufei Cai <yufei.cai@bosch.io>
  • Loading branch information
yufei-cai committed Jun 9, 2021
1 parent fa59422 commit 5fff3e5
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 3 deletions.
Expand Up @@ -43,7 +43,7 @@ public Optional<UserPasswordCredentials> get(final Connection connection) {
if (optionalCredentials.isPresent()) {
final var credentials = optionalCredentials.get();
final var requestSigning = credentials.accept(amqpConnectionSigningExtension);
return requestSigning.createSignedCredentials();
return requestSigning.createSignedCredentials().or(() -> FROM_URI.get(connection));
}
return FROM_URI.get(connection);
}
Expand Down
Expand Up @@ -14,6 +14,7 @@
package org.eclipse.ditto.connectivity.service.messaging.amqp;

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;

import java.time.Duration;
import java.time.Instant;
Expand All @@ -23,10 +24,12 @@

import org.eclipse.ditto.connectivity.model.Connection;
import org.eclipse.ditto.connectivity.model.HmacCredentials;
import org.eclipse.ditto.connectivity.model.MessageSendingFailedException;
import org.eclipse.ditto.connectivity.model.SshPublicKeyCredentials;
import org.eclipse.ditto.connectivity.model.UserPasswordCredentials;
import org.eclipse.ditto.connectivity.service.messaging.signing.AzSaslSigning;
import org.eclipse.ditto.connectivity.service.messaging.TestConstants;
import org.eclipse.ditto.connectivity.service.messaging.httppush.AzMonitorRequestSigningFactory;
import org.eclipse.ditto.connectivity.service.messaging.signing.AzSaslSigning;
import org.eclipse.ditto.connectivity.service.messaging.signing.AzSaslSigningFactory;
import org.eclipse.ditto.json.JsonObject;
import org.junit.AfterClass;
Expand All @@ -38,6 +41,7 @@
/**
* Unit test for {@link SaslPlainCredentialsSupplier}.
*/
@SuppressWarnings("OptionalUsedAsFieldOrParameterType")
public final class SaslPlainCredentialsSupplierTest {

private static final String SHARED_KEY_NAME = "name";
Expand Down Expand Up @@ -79,7 +83,8 @@ private void assertCredentialsContainCorrectSignature(final Optional<UserPasswor

final Instant expiry = extractExpiryFromSharedAccessSignature(credentials.get().getPassword());
final Instant calculationTimestamp = expiry.minus(TTL);
final Optional<UserPasswordCredentials> expectedCredentials = expectedSigning.createSignedCredentials(calculationTimestamp);
final Optional<UserPasswordCredentials> expectedCredentials =
expectedSigning.createSignedCredentials(calculationTimestamp);

assertThat(credentials).isEqualTo(expectedCredentials);
}
Expand All @@ -100,6 +105,32 @@ public void doesNotCreateCredentialsForConnectionWithoutCredentials() {
.isEmpty();
}

@Test
public void createFromUriIfCredentialTypeDoesNotMatch() {
final Connection connection = TestConstants.createConnection()
.toBuilder()
.uri("http://user:pass@localhost:1234")
.credentials(SshPublicKeyCredentials.of("user", "publicKey", "privateKey"))
.build();

final Optional<UserPasswordCredentials> result =
SaslPlainCredentialsSupplier.of(actorSystem).get(connection);

assertThat(result).contains(UserPasswordCredentials.newInstance("user", "pass"));
}

@Test
public void failForUnknownHmacAlgorithm() {
final Connection connection = TestConstants.createConnection()
.toBuilder()
.uri("http://localhost:1234")
.credentials(createAzMonitorHmacCredentials())
.build();

assertThatExceptionOfType(MessageSendingFailedException.class)
.isThrownBy(() -> SaslPlainCredentialsSupplier.of(actorSystem).get(connection));
}

private Instant extractExpiryFromSharedAccessSignature(final String password) {
final Matcher matcher = Pattern.compile(".*&se=(?<se>\\d+).*").matcher(password);
if (matcher.find()) {
Expand Down

0 comments on commit 5fff3e5

Please sign in to comment.