mirror of https://github.com/hyperledger/besu
Nc 1942 Add account whitelisting and refactor into permissioning package (#460)
* WS sync subscription delay added * WS sync subscription delay added with unit testing * WS sync subscription delay added with unit testing * changed number to a constant in constructor * Use default from websocket class instead of making new one * Removed magic numbers * Added Controller * Refactor permissioning config and account whitelist into permissioning package * Refactor permissioning config and account whitelist into permissioning package * Refactor permissioning config and account whitelist into permissioning package * Merge branch 'master' of https://github.com/PegaSysEng/pantheon into NC-1942 # Conflicts: # consensus/ibft/src/test/java/tech/pegasys/pantheon/consensus/ibft/statemachine/IbftControllerTest.java # docs/Getting-Started/ExplorerBlockDetails.png # docs/Getting-Started/ExplorerSearch.png # docs/Getting-Started/ExplorerSummary.png # ethereum/permissioning/src/main/java/tech/pegasys/pantheon/ethereum/permissioning/PermissioningConfiguration.java # ethereum/permissioning/src/test/java/tech/pegasys/pantheon/ethereum/permissioning/PermissioningConfigurationTest.java # pantheon/src/main/java/tech/pegasys/pantheon/cli/PantheonCommand.java # pantheon/src/test/java/tech/pegasys/pantheon/cli/PantheonCommandTest.java * Merge branch 'master' of https://github.com/PegaSysEng/pantheon into NC-1942 # Conflicts: # consensus/ibft/src/test/java/tech/pegasys/pantheon/consensus/ibft/statemachine/IbftControllerTest.java # docs/Getting-Started/ExplorerBlockDetails.png # docs/Getting-Started/ExplorerSearch.png # docs/Getting-Started/ExplorerSummary.png # ethereum/permissioning/src/main/java/tech/pegasys/pantheon/ethereum/permissioning/PermissioningConfiguration.java # ethereum/permissioning/src/test/java/tech/pegasys/pantheon/ethereum/permissioning/PermissioningConfigurationTest.java # pantheon/src/main/java/tech/pegasys/pantheon/cli/PantheonCommand.java # pantheon/src/test/java/tech/pegasys/pantheon/cli/PantheonCommandTest.java * Iron out merge conflict introduced bugs * Iron out merge conflict introduced bugs * Iron out merge conflict introduced bugs * PR Change request actioned * PR Change request actioned * PR Change request actioned * PR Change request actioned * updated node whitelist acceptance test to conform to refactored permissioning package * text change
parent
8c37c46d63
commit
6b60370a35
@ -0,0 +1,33 @@ |
||||
/* |
||||
* Copyright 2018 ConsenSys AG. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on |
||||
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the |
||||
* specific language governing permissions and limitations under the License. |
||||
*/ |
||||
|
||||
apply plugin: 'java-library' |
||||
|
||||
jar { |
||||
baseName 'pantheon-permissioning' |
||||
manifest { |
||||
attributes( |
||||
'Specification-Title': baseName, |
||||
'Specification-Version': project.version, |
||||
'Implementation-Title': baseName, |
||||
'Implementation-Version': calculateVersion() |
||||
) |
||||
} |
||||
} |
||||
|
||||
dependencies { |
||||
|
||||
testImplementation 'junit:junit' |
||||
testImplementation 'org.assertj:assertj-core' |
||||
testImplementation 'org.mockito:mockito-core' |
||||
} |
@ -0,0 +1,51 @@ |
||||
/* |
||||
* Copyright 2018 ConsenSys AG. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on |
||||
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the |
||||
* specific language governing permissions and limitations under the License. |
||||
*/ |
||||
package tech.pegasys.pantheon.ethereum.permissioning; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
|
||||
public class AccountWhitelistController { |
||||
|
||||
private final List<String> accountWhitelist; |
||||
private boolean accountWhitelistSet = false; |
||||
|
||||
public AccountWhitelistController(final PermissioningConfiguration configuration) { |
||||
accountWhitelist = new ArrayList<>(); |
||||
if (configuration != null && configuration.getAccountWhitelist() != null) { |
||||
for (String hexString : configuration.getAccountWhitelist()) { |
||||
accountWhitelist.add(hexString); |
||||
} |
||||
if (configuration.isNodeWhitelistSet()) { |
||||
accountWhitelistSet = true; |
||||
} |
||||
} |
||||
} |
||||
|
||||
public boolean addAccount(final String account) { |
||||
accountWhitelistSet = true; |
||||
return accountWhitelist.add(account); |
||||
} |
||||
|
||||
public boolean removeAccount(final String account) { |
||||
return accountWhitelist.remove(account); |
||||
} |
||||
|
||||
public boolean contains(final String account) { |
||||
return (!accountWhitelistSet || (accountWhitelistSet && accountWhitelist.contains(account))); |
||||
} |
||||
|
||||
public boolean isAccountWhiteListSet() { |
||||
return accountWhitelistSet; |
||||
} |
||||
} |
Loading…
Reference in new issue