Skip to content

Commit

Permalink
Replace whitelist/blacklist with allowlist/denylist (#1077)
Browse files Browse the repository at this point in the history
* replace whitelist/blacklist with allowlist/denylist and support both versions in CLI options

Signed-off-by: Sally MacFarlane <sally.macfarlane@consensys.net>
  • Loading branch information
macfarla authored Jun 16, 2020
1 parent 165be86 commit 4eef568
Show file tree
Hide file tree
Showing 74 changed files with 600 additions and 602 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,24 +16,25 @@

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

import org.hyperledger.besu.ethereum.permissioning.WhitelistPersistor;
import org.hyperledger.besu.ethereum.permissioning.AllowlistPersistor;
import org.hyperledger.besu.ethereum.permissioning.AllowlistPersistor.ALLOWLIST_TYPE;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;

import java.nio.file.Path;
import java.util.Collection;

public class WhiteListContainsKeyAndValue implements Condition {
private final WhitelistPersistor.WHITELIST_TYPE whitelistType;
private final Collection<String> whitelistValues;
public class AllowListContainsKeyAndValue implements Condition {
private final ALLOWLIST_TYPE allowlistType;
private final Collection<String> allowlistValues;
private final Path configFilePath;

public WhiteListContainsKeyAndValue(
final WhitelistPersistor.WHITELIST_TYPE whitelistType,
final Collection<String> whitelistValues,
public AllowListContainsKeyAndValue(
final ALLOWLIST_TYPE allowlistType,
final Collection<String> allowlistValues,
final Path configFilePath) {
this.whitelistType = whitelistType;
this.whitelistValues = whitelistValues;
this.allowlistType = allowlistType;
this.allowlistValues = allowlistValues;
this.configFilePath = configFilePath;
}

Expand All @@ -42,8 +43,8 @@ public void verify(final Node node) {
boolean result;
try {
result =
WhitelistPersistor.verifyConfigFileMatchesState(
whitelistType, whitelistValues, configFilePath);
AllowlistPersistor.verifyConfigFileMatchesState(
allowlistType, allowlistValues, configFilePath);
} catch (final Exception e) {
result = false;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
import static java.util.Arrays.asList;
import static java.util.stream.Collectors.toList;

import org.hyperledger.besu.ethereum.permissioning.WhitelistPersistor.WHITELIST_TYPE;
import org.hyperledger.besu.ethereum.permissioning.AllowlistPersistor.ALLOWLIST_TYPE;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.node.RunnableNode;
Expand All @@ -36,53 +36,53 @@ public PermissioningConditions(final PermissioningTransactions transactions) {

private final PermissioningTransactions transactions;

public Condition addAccountsToWhitelist(final String... accounts) {
return new AddAccountsToWhitelistSuccessfully(transactions.addAccountsToWhitelist(accounts));
public Condition addAccountsToAllowlist(final String... accounts) {
return new AddAccountsToWhitelistSuccessfully(transactions.addAccountsToAllowlist(accounts));
}

public Condition removeAccountsFromWhitelist(final String... accounts) {
public Condition removeAccountsFromAllowlist(final String... accounts) {
return new RemoveAccountsFromWhitelistSuccessfully(
transactions.removeAccountsFromWhitelist(accounts));
transactions.removeAccountsFromAllowlist(accounts));
}

public Condition expectAccountsWhitelist(final String... expectedAccounts) {
public Condition expectAccountsAllowlist(final String... expectedAccounts) {
return new GetExpectedAccountsWhitelist(
transactions.getAccountsWhiteList(), asList(expectedAccounts));
}

public Condition addNodesToWhitelist(final String... nodes) {
return addNodesToWhitelist(Stream.of(nodes).map(URI::create).collect(toList()));
public Condition addNodesToAllowlist(final String... nodes) {
return addNodesToAllowlist(Stream.of(nodes).map(URI::create).collect(toList()));
}

public Condition addNodesToWhitelist(final Node... nodes) {
public Condition addNodesToAllowlist(final Node... nodes) {
final List<URI> enodeList = toEnodeUris(nodes);
return addNodesToWhitelist(enodeList);
return addNodesToAllowlist(enodeList);
}

private Condition addNodesToWhitelist(final List<URI> enodeList) {
return new AddNodeSuccess(transactions.addNodesToWhitelist(enodeList));
private Condition addNodesToAllowlist(final List<URI> enodeList) {
return new AddNodeSuccess(transactions.addNodesToAllowlist(enodeList));
}

public Condition removeNodesFromWhitelist(final String... nodes) {
return removeNodesFromWhitelist(Stream.of(nodes).map(URI::create).collect(toList()));
public Condition removeNodesFromAllowlist(final String... nodes) {
return removeNodesFromAllowlist(Stream.of(nodes).map(URI::create).collect(toList()));
}

public Condition removeNodesFromWhitelist(final Node... nodes) {
public Condition removeNodesFromAllowlist(final Node... nodes) {
final List<URI> enodeList = toEnodeUris(nodes);
return removeNodesFromWhitelist(enodeList);
return removeNodesFromAllowlist(enodeList);
}

private Condition removeNodesFromWhitelist(final List<URI> enodeList) {
return new RemoveNodeSuccess(transactions.removeNodesFromWhitelist(enodeList));
private Condition removeNodesFromAllowlist(final List<URI> enodeList) {
return new RemoveNodeSuccess(transactions.removeNodesFromAllowlist(enodeList));
}

public Condition getNodesWhitelist(final int expectedNodeNum) {
public Condition getNodesAllowlist(final int expectedNodeNum) {
return new GetNodesWhitelistPopulated(transactions.getNodesWhiteList(), expectedNodeNum);
}

public Condition expectPermissioningWhitelistFileKeyValue(
final WHITELIST_TYPE whitelistType, final Path configFilePath, final String... val) {
return new WhiteListContainsKeyAndValue(whitelistType, asList(val), configFilePath);
public Condition expectPermissioningAllowlistFileKeyValue(
final ALLOWLIST_TYPE allowlistType, final Path configFilePath, final String... val) {
return new AllowListContainsKeyAndValue(allowlistType, asList(val), configFilePath);
}

private List<URI> toEnodeUris(final Node[] nodes) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -237,14 +237,14 @@ public void startNode(final BesuNode node) {
.flatMap(PermissioningConfiguration::getLocalConfig)
.ifPresent(
permissioningConfiguration -> {
if (permissioningConfiguration.isNodeWhitelistEnabled()) {
if (permissioningConfiguration.isNodeAllowlistEnabled()) {
params.add("--permissions-nodes-config-file-enabled");
}
if (permissioningConfiguration.getNodePermissioningConfigFilePath() != null) {
params.add("--permissions-nodes-config-file");
params.add(permissioningConfiguration.getNodePermissioningConfigFilePath());
}
if (permissioningConfiguration.isAccountWhitelistEnabled()) {
if (permissioningConfiguration.isAccountAllowlistEnabled()) {
params.add("--permissions-accounts-config-file-enabled");
}
if (permissioningConfiguration.getAccountPermissioningConfigFilePath() != null) {
Expand All @@ -257,14 +257,14 @@ public void startNode(final BesuNode node) {
.flatMap(PermissioningConfiguration::getSmartContractConfig)
.ifPresent(
permissioningConfiguration -> {
if (permissioningConfiguration.isSmartContractNodeWhitelistEnabled()) {
if (permissioningConfiguration.isSmartContractNodeAllowlistEnabled()) {
params.add("--permissions-nodes-contract-enabled");
}
if (permissioningConfiguration.getNodeSmartContractAddress() != null) {
params.add("--permissions-nodes-contract-address");
params.add(permissioningConfiguration.getNodeSmartContractAddress().toString());
}
if (permissioningConfiguration.isSmartContractAccountWhitelistEnabled()) {
if (permissioningConfiguration.isSmartContractAccountAllowlistEnabled()) {
params.add("--permissions-accounts-contract-enabled");
}
if (permissioningConfiguration.getAccountSmartContractAddress() != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ public BesuNodeConfigurationBuilder jsonRpcConfiguration(
public BesuNodeConfigurationBuilder jsonRpcEnabled() {
this.jsonRpcConfiguration.setEnabled(true);
this.jsonRpcConfiguration.setPort(0);
this.jsonRpcConfiguration.setHostsWhitelist(singletonList("*"));
this.jsonRpcConfiguration.setHostsAllowlist(singletonList("*"));

return this;
}
Expand All @@ -111,7 +111,7 @@ public BesuNodeConfigurationBuilder metricsEnabled() {
MetricsConfiguration.builder()
.enabled(true)
.port(0)
.hostsWhitelist(singletonList("*"))
.hostsAllowlist(singletonList("*"))
.build();

return this;
Expand Down Expand Up @@ -168,7 +168,7 @@ public BesuNodeConfigurationBuilder webSocketEnabled() {
final WebSocketConfiguration config = WebSocketConfiguration.createDefault();
config.setEnabled(true);
config.setPort(0);
config.setHostsWhitelist(Collections.singletonList("*"));
config.setHostsAllowlist(Collections.singletonList("*"));

this.webSocketConfiguration = config;
return this;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public JsonRpcConfiguration createJsonRpcEnabledConfig() {
final JsonRpcConfiguration config = JsonRpcConfiguration.createDefault();
config.setEnabled(true);
config.setPort(0);
config.setHostsWhitelist(singletonList("*"));
config.setHostsAllowlist(singletonList("*"));
return config;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,11 @@
import org.hyperledger.besu.ethereum.api.jsonrpc.RpcApi;
import org.hyperledger.besu.ethereum.api.jsonrpc.RpcApis;
import org.hyperledger.besu.ethereum.core.Address;
import org.hyperledger.besu.ethereum.permissioning.AllowlistPersistor;
import org.hyperledger.besu.ethereum.permissioning.AllowlistPersistor.ALLOWLIST_TYPE;
import org.hyperledger.besu.ethereum.permissioning.LocalPermissioningConfiguration;
import org.hyperledger.besu.ethereum.permissioning.PermissioningConfiguration;
import org.hyperledger.besu.ethereum.permissioning.SmartContractPermissioningConfiguration;
import org.hyperledger.besu.ethereum.permissioning.WhitelistPersistor;
import org.hyperledger.besu.ethereum.permissioning.WhitelistPersistor.WHITELIST_TYPE;
import org.hyperledger.besu.tests.acceptance.dsl.node.BesuNode;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.node.RunnableNode;
Expand Down Expand Up @@ -212,9 +212,9 @@ private LocalPermissioningConfiguration localConfigPermissioningConfiguration()
List<String> nodesAsListOfStrings =
localConfigPermittedNodes.stream().map(URI::toASCIIString).collect(Collectors.toList());
initPermissioningConfigurationFile(
WHITELIST_TYPE.NODES, nodesAsListOfStrings, localConfigNodesPermissioningFile);
ALLOWLIST_TYPE.NODES, nodesAsListOfStrings, localConfigNodesPermissioningFile);

localPermissioningConfiguration.setNodeWhitelist(localConfigPermittedNodes);
localPermissioningConfiguration.setNodeAllowlist(localConfigPermittedNodes);
localPermissioningConfiguration.setNodePermissioningConfigFilePath(
localConfigNodesPermissioningFile.toAbsolutePath().toString());
}
Expand All @@ -225,11 +225,11 @@ private LocalPermissioningConfiguration localConfigPermissioningConfiguration()
}

initPermissioningConfigurationFile(
WHITELIST_TYPE.ACCOUNTS,
ALLOWLIST_TYPE.ACCOUNTS,
localConfigPermittedAccounts,
localConfigAccountsPermissioningFile);

localPermissioningConfiguration.setAccountWhitelist(localConfigPermittedAccounts);
localPermissioningConfiguration.setAccountAllowlist(localConfigPermittedAccounts);
localPermissioningConfiguration.setAccountPermissioningConfigFilePath(
localConfigAccountsPermissioningFile.toAbsolutePath().toString());
}
Expand All @@ -243,13 +243,13 @@ private SmartContractPermissioningConfiguration smartContractPermissioningConfig
if (nodePermissioningSmartContractAddress != null) {
config.setNodeSmartContractAddress(
Address.fromHexString(nodePermissioningSmartContractAddress));
config.setSmartContractNodeWhitelistEnabled(true);
config.setSmartContractNodeAllowlistEnabled(true);
}

if (accountPermissioningSmartContractAddress != null) {
config.setAccountSmartContractAddress(
Address.fromHexString(accountPermissioningSmartContractAddress));
config.setSmartContractAccountWhitelistEnabled(true);
config.setSmartContractAccountAllowlistEnabled(true);
}

return config;
Expand All @@ -270,7 +270,7 @@ private JsonRpcConfiguration jsonRpcConfigWithPermApiEnabled() {
final JsonRpcConfiguration jsonRpcConfig = JsonRpcConfiguration.createDefault();
jsonRpcConfig.setEnabled(true);
jsonRpcConfig.setPort(0);
jsonRpcConfig.setHostsWhitelist(singletonList("*"));
jsonRpcConfig.setHostsAllowlist(singletonList("*"));
jsonRpcConfig.setCorsAllowedDomains(singletonList("*"));
final List<RpcApi> rpcApis = new ArrayList<>(jsonRpcConfig.getRpcApis());
rpcApis.add(RpcApis.PERM);
Expand All @@ -280,11 +280,11 @@ private JsonRpcConfiguration jsonRpcConfigWithPermApiEnabled() {
}

private void initPermissioningConfigurationFile(
final WhitelistPersistor.WHITELIST_TYPE listType,
final Collection<String> whitelistVal,
final ALLOWLIST_TYPE listType,
final Collection<String> allowlistVal,
final Path configFilePath) {
try {
WhitelistPersistor.addNewConfigItem(listType, whitelistVal, configFilePath);
AllowlistPersistor.addNewConfigItem(listType, allowlistVal, configFilePath);

Files.write(
configFilePath,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@

public class PermissioningTransactions {

public PermAddAccountsToWhitelistTransaction addAccountsToWhitelist(final String... accounts) {
public PermAddAccountsToWhitelistTransaction addAccountsToAllowlist(final String... accounts) {
return new PermAddAccountsToWhitelistTransaction(Arrays.asList(accounts));
}

public PermRemoveAccountsFromWhitelistTransaction removeAccountsFromWhitelist(
public PermRemoveAccountsFromWhitelistTransaction removeAccountsFromAllowlist(
final String... accounts) {
return new PermRemoveAccountsFromWhitelistTransaction(Arrays.asList(accounts));
}
Expand All @@ -35,11 +35,11 @@ public PermGetAccountsWhitelistTransaction getAccountsWhiteList() {
return new PermGetAccountsWhitelistTransaction();
}

public PermAddNodeTransaction addNodesToWhitelist(final List<URI> enodeList) {
public PermAddNodeTransaction addNodesToAllowlist(final List<URI> enodeList) {
return new PermAddNodeTransaction(enodeList);
}

public PermRemoveNodeTransaction removeNodesFromWhitelist(final List<URI> enodeList) {
public PermRemoveNodeTransaction removeNodesFromAllowlist(final List<URI> enodeList) {
return new PermRemoveNodeTransaction(enodeList);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,20 +56,20 @@ public void onlyAllowedAccountCanSubmitTransactions() {
}

@Test
public void manipulatingAccountsWhitelistViaJsonRpc() {
public void manipulatingAccountsAllowlistViaJsonRpc() {
Account beneficiary = accounts.createAccount("beneficiary");
node.verify(beneficiary.balanceEquals(0));

verifyTransferForbidden(senderB, beneficiary);

node.execute(permissioningTransactions.addAccountsToWhitelist(senderB.getAddress()));
node.verify(perm.expectAccountsWhitelist(senderA.getAddress(), senderB.getAddress()));
node.execute(permissioningTransactions.addAccountsToAllowlist(senderB.getAddress()));
node.verify(perm.expectAccountsAllowlist(senderA.getAddress(), senderB.getAddress()));

node.execute(accountTransactions.createTransfer(senderB, beneficiary, 1));
node.verify(beneficiary.balanceEquals(1));

node.execute(permissioningTransactions.removeAccountsFromWhitelist(senderB.getAddress()));
node.verify(perm.expectAccountsWhitelist(senderA.getAddress()));
node.execute(permissioningTransactions.removeAccountsFromAllowlist(senderB.getAddress()));
node.verify(perm.expectAccountsAllowlist(senderA.getAddress()));
verifyTransferForbidden(senderB, beneficiary);
}

Expand Down
Loading

0 comments on commit 4eef568

Please sign in to comment.