Skip to content

Commit

Permalink
Revert "fix base64 double encode issue"
Browse files Browse the repository at this point in the history
This reverts commit d714aa66
  • Loading branch information
namtruong committed Apr 21, 2021
1 parent 89174b9 commit c5f341d
Show file tree
Hide file tree
Showing 5 changed files with 91 additions and 190 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -34,22 +34,19 @@ class DefaultRuntimeContext implements RuntimeContext {

private final boolean orionMode;

private final boolean multiplePrivateStates;

protected DefaultRuntimeContext(
List<KeyPair> keys,
KeyEncryptor keyEncryptor,
List<PublicKey> alwaysSendTo,
List<URI> peers,
Client p2pClient,
boolean remoteKeyValidation,
boolean enhancedPrivacy,
URI p2pServerUri,
boolean disablePeerDiscovery,
boolean useWhiteList,
boolean recoveryMode,
boolean orionMode,
boolean multiplePrivateStates) {
List<KeyPair> keys,
KeyEncryptor keyEncryptor,
List<PublicKey> alwaysSendTo,
List<URI> peers,
Client p2pClient,
boolean remoteKeyValidation,
boolean enhancedPrivacy,
URI p2pServerUri,
boolean disablePeerDiscovery,
boolean useWhiteList,
boolean recoveryMode,
boolean orionMode) {
this.keys = List.copyOf(keys);
this.keyEncryptor = keyEncryptor;
this.alwaysSendTo = List.copyOf(alwaysSendTo);
Expand All @@ -62,7 +59,6 @@ protected DefaultRuntimeContext(
this.useWhiteList = useWhiteList;
this.recoveryMode = recoveryMode;
this.orionMode = orionMode;
this.multiplePrivateStates = multiplePrivateStates;
}

public List<KeyPair> getKeys() {
Expand Down Expand Up @@ -118,40 +114,33 @@ public boolean isOrionMode() {
return orionMode;
}

@Override
public boolean isMultiplePrivateStates() {
return multiplePrivateStates;
}

@Override
public String toString() {
return "DefaultRuntimeContext{"
+ "keys="
+ keys
+ ", keyEncryptor="
+ keyEncryptor
+ ", alwaysSendTo="
+ alwaysSendTo
+ ", peers="
+ peers
+ ", p2pClient="
+ p2pClient
+ ", remoteKeyValidation="
+ remoteKeyValidation
+ ", enhancedPrivacy="
+ enhancedPrivacy
+ ", p2pServerUri="
+ p2pServerUri
+ ", disablePeerDiscovery="
+ disablePeerDiscovery
+ ", useWhiteList="
+ useWhiteList
+ ", recoveryMode="
+ recoveryMode
+ ", orionMode="
+ orionMode
+ ", multiplePrivateStates="
+ multiplePrivateStates
+ '}';
+ "keys="
+ keys
+ ", keyEncryptor="
+ keyEncryptor
+ ", alwaysSendTo="
+ alwaysSendTo
+ ", peers="
+ peers
+ ", p2pClient="
+ p2pClient
+ ", remoteKeyValidation="
+ remoteKeyValidation
+ ", enhancedPrivacy="
+ enhancedPrivacy
+ ", p2pServerUri="
+ p2pServerUri
+ ", disablePeerDiscovery="
+ disablePeerDiscovery
+ ", useWhiteList="
+ useWhiteList
+ ", recoveryMode="
+ recoveryMode
+ ", orionMode="
+ orionMode
+ '}';
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,13 @@ public RuntimeContext create(Config config) {
}

EncryptorConfig encryptorConfig =
Optional.ofNullable(config.getEncryptor())
.orElse(
new EncryptorConfig() {
{
setType(EncryptorType.NACL);
}
});
Optional.ofNullable(config.getEncryptor())
.orElse(
new EncryptorConfig() {
{
setType(EncryptorType.NACL);
}
});

KeyEncryptor keyEncryptor = KeyEncryptorFactory.newFactory().create(encryptorConfig);
final KeyVaultConfigValidations vaultConfigValidation = KeyVaultConfigValidations.create();
Expand All @@ -58,9 +58,9 @@ public RuntimeContext create(Config config) {
if (Objects.nonNull(config.getKeys())) {

List<ConfigKeyPair> configKeyPairs =
config.getKeys().getKeyData().stream()
.map(o -> KeyDataUtil.unmarshal(o, keyEncryptor))
.collect(Collectors.toList());
config.getKeys().getKeyData().stream()
.map(o -> KeyDataUtil.unmarshal(o, keyEncryptor))
.collect(Collectors.toList());

Set<ConstraintViolation<?>> violations = vaultConfigValidation.validate(config.getKeys(), configKeyPairs);

Expand All @@ -78,41 +78,40 @@ public RuntimeContext create(Config config) {
List<ServerConfig> servers = config.getServerConfigs();

ServerConfig p2pServerContext =
servers.stream()
.filter(s -> s.getApp() == AppType.P2P)
.findFirst()
.orElseThrow(() -> new IllegalStateException("No P2P server configured"));
servers.stream()
.filter(s -> s.getApp() == AppType.P2P)
.findFirst()
.orElseThrow(() -> new IllegalStateException("No P2P server configured"));

Client p2pClient = RestClientFactory.create().buildFrom(p2pServerContext);

List<PublicKey> alwaysSendTo =
Stream.of(config)
.map(Config::getAlwaysSendTo)
.filter(Objects::nonNull)
.flatMap(List::stream)
.map(Base64.getDecoder()::decode)
.map(PublicKey::from)
.collect(Collectors.toList());
Stream.of(config)
.map(Config::getAlwaysSendTo)
.filter(Objects::nonNull)
.flatMap(List::stream)
.map(Base64.getDecoder()::decode)
.map(PublicKey::from)
.collect(Collectors.toList());

RuntimeContext context =
runtimeContextBuilder
.withP2pServerUri(config.getP2PServerConfig().getServerUri())
.withP2pClient(p2pClient)
.withKeyEncryptor(keyEncryptor)
.withDisablePeerDiscovery(config.isDisablePeerDiscovery())
.withRemoteKeyValidation(config.getFeatures().isEnableRemoteKeyValidation())
.withEnhancedPrivacy(config.getFeatures().isEnablePrivacyEnhancements())
.withPeers(
config.getPeers().stream()
.map(Peer::getUrl)
.map(URI::create)
.collect(Collectors.toList()))
.withAlwaysSendTo(alwaysSendTo)
.withUseWhiteList(config.isUseWhiteList())
.withRecoveryMode(config.isRecoveryMode())
.withOrionMode(config.getClientMode() == ClientMode.ORION)
.withMultiplePrivateStates(config.getFeatures().isEnableMultiplePrivateStates())
.build();
runtimeContextBuilder
.withP2pServerUri(config.getP2PServerConfig().getServerUri())
.withP2pClient(p2pClient)
.withKeyEncryptor(keyEncryptor)
.withDisablePeerDiscovery(config.isDisablePeerDiscovery())
.withRemoteKeyValidation(config.getFeatures().isEnableRemoteKeyValidation())
.withEnhancedPrivacy(config.getFeatures().isEnablePrivacyEnhancements())
.withPeers(
config.getPeers().stream()
.map(Peer::getUrl)
.map(URI::create)
.collect(Collectors.toList()))
.withAlwaysSendTo(alwaysSendTo)
.withUseWhiteList(config.isUseWhiteList())
.withRecoveryMode(config.isRecoveryMode())
.withOrionMode(config.getClientMode() == ClientMode.ORION)
.build();

contextHolder.setContext(context);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,6 @@ public interface RuntimeContext {

boolean isOrionMode();

boolean isMultiplePrivateStates();

default Set<PublicKey> getPublicKeys() {
return getKeys().stream().map(KeyPair::getPublicKey).collect(Collectors.toSet());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,6 @@ public class RuntimeContextBuilder {

private boolean orionMode;

private boolean multiplePrivateStates;

private RuntimeContextBuilder() {}

public static RuntimeContextBuilder create() {
Expand Down Expand Up @@ -108,11 +106,6 @@ public RuntimeContextBuilder withOrionMode(boolean orionMode) {
return this;
}

public RuntimeContextBuilder withMultiplePrivateStates(boolean multiplePrivateStates) {
this.multiplePrivateStates = multiplePrivateStates;
return this;
}

public RuntimeContext build() {

LOGGER.debug("Building {}", this);
Expand All @@ -122,20 +115,19 @@ public RuntimeContext build() {
Objects.requireNonNull(p2pClient, "No p2pClient provided. ");

RuntimeContext instance =
new DefaultRuntimeContext(
keys,
keyEncryptor,
alwaysSendTo,
peers,
p2pClient,
remoteKeyValidation,
enhancedPrivacy,
p2pServerUri,
disablePeerDiscovery,
useWhiteList,
recoveryMode,
orionMode,
multiplePrivateStates);
new DefaultRuntimeContext(
keys,
keyEncryptor,
alwaysSendTo,
peers,
p2pClient,
remoteKeyValidation,
enhancedPrivacy,
p2pServerUri,
disablePeerDiscovery,
useWhiteList,
recoveryMode,
orionMode);
LOGGER.debug("Built {}", this);
return instance;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,15 +60,15 @@ public void createMinimal() {
FeatureToggles featureToggles = mock(FeatureToggles.class);
when(confg.getFeatures()).thenReturn(featureToggles);

when(confg.getClientMode()).thenReturn(ClientMode.ORION);

RuntimeContext result = runtimeContextFactory.create(confg);

assertThat(result).isNotNull();
assertThat(result.isRecoveryMode()).isFalse();
assertThat(result.isEnhancedPrivacy()).isFalse();

assertThat(result.isOrionMode()).isFalse();

assertThat(result.isMultiplePrivateStates()).isFalse();
assertThat(result.isOrionMode()).isTrue();

verify(contextHolder).getContext();
verify(contextHolder).setContext(any(RuntimeContext.class));
Expand Down Expand Up @@ -226,83 +226,6 @@ public void createWithExistingContextPopulated() {
assertThat(result).isSameAs(runtimeContext);
}

@Test
public void createMinimalOrionMode() {

when(contextHolder.getContext()).thenReturn(Optional.empty());

Config config = mock(Config.class);
EncryptorConfig encryptorConfig = mock(EncryptorConfig.class);
when(encryptorConfig.getType()).thenReturn(EncryptorType.NACL);

when(config.getEncryptor()).thenReturn(encryptorConfig);

when(config.getKeys()).thenReturn(mock(KeyConfiguration.class));

ServerConfig serverConfig = mock(ServerConfig.class);
when(serverConfig.getApp()).thenReturn(AppType.P2P);
when(serverConfig.getCommunicationType()).thenReturn(CommunicationType.REST);
when(config.getP2PServerConfig()).thenReturn(serverConfig);
when(serverConfig.getServerUri()).thenReturn(URI.create("http://bogus"));
when(serverConfig.getBindingUri()).thenReturn(URI.create("http://bogus"));
when(serverConfig.getProperties()).thenReturn(Collections.emptyMap());

when(config.getServerConfigs()).thenReturn(List.of(serverConfig));
when(config.getFeatures()).thenReturn(mock(FeatureToggles.class));

when(config.getClientMode()).thenReturn(ClientMode.ORION);

RuntimeContext result = runtimeContextFactory.create(config);

assertThat(result).isNotNull();
assertThat(result.isRecoveryMode()).isFalse();
assertThat(result.isEnhancedPrivacy()).isFalse();

assertThat(result.isOrionMode()).isTrue();

verify(contextHolder).getContext();
verify(contextHolder).setContext(any(RuntimeContext.class));
}

@Test
public void createMinimalMultiplePrivateStates() {

when(contextHolder.getContext()).thenReturn(Optional.empty());

Config config = mock(Config.class);
EncryptorConfig encryptorConfig = mock(EncryptorConfig.class);
when(encryptorConfig.getType()).thenReturn(EncryptorType.NACL);

when(config.getEncryptor()).thenReturn(encryptorConfig);

when(config.getKeys()).thenReturn(mock(KeyConfiguration.class));

ServerConfig serverConfig = mock(ServerConfig.class);
when(serverConfig.getApp()).thenReturn(AppType.P2P);
when(serverConfig.getCommunicationType()).thenReturn(CommunicationType.REST);
when(config.getP2PServerConfig()).thenReturn(serverConfig);
when(serverConfig.getServerUri()).thenReturn(URI.create("http://bogus"));
when(serverConfig.getBindingUri()).thenReturn(URI.create("http://bogus"));
when(serverConfig.getProperties()).thenReturn(Collections.emptyMap());

when(config.getServerConfigs()).thenReturn(List.of(serverConfig));

FeatureToggles features = mock(FeatureToggles.class);
when(features.isEnableMultiplePrivateStates()).thenReturn(true);
when(config.getFeatures()).thenReturn(features);

RuntimeContext result = runtimeContextFactory.create(config);

assertThat(result).isNotNull();
assertThat(result.isRecoveryMode()).isFalse();
assertThat(result.isEnhancedPrivacy()).isFalse();

assertThat(result.isMultiplePrivateStates()).isTrue();

verify(contextHolder).getContext();
verify(contextHolder).setContext(any(RuntimeContext.class));
}

@Test
public void createDefaultInstance() {
assertThat(new DefaultRuntimeContextFactory()).isNotNull();
Expand Down

0 comments on commit c5f341d

Please sign in to comment.