diff --git a/fabcar/java/pom.xml b/fabcar/java/pom.xml index 7287003d..db663c5d 100644 --- a/fabcar/java/pom.xml +++ b/fabcar/java/pom.xml @@ -1,54 +1,56 @@ - - 4.0.0 - fabcar-java - fabcar-java - 1.4.0-SNAPSHOT - - - - maven-compiler-plugin - 3.8.0 - - 1.8 - 1.8 - - - - - - - hyperledger - Hyperledger Nexus - https://nexus.hyperledger.org/content/repositories/snapshots - - - - - org.hyperledger.fabric - fabric-gateway-java - 1.4.0-SNAPSHOT - - - org.junit.platform - junit-platform-launcher - 1.4.2 - - - org.junit.jupiter - junit-jupiter-engine - 5.4.1 - test - - - org.junit.vintage - junit-vintage-engine - 5.4.2 - - - org.assertj - assertj-core - 3.12.2 - test - - + + 4.0.0 + fabcar-java + fabcar-java + 1.4.0-SNAPSHOT + + + + maven-compiler-plugin + 3.8.0 + + 1.8 + 1.8 + + + + + + + hyperledger + Hyperledger Nexus + https://nexus.hyperledger.org/content/repositories/snapshots + + + + + org.hyperledger.fabric + fabric-gateway-java + 1.4.0-SNAPSHOT + + + org.junit.platform + junit-platform-launcher + 1.4.2 + + + org.junit.jupiter + junit-jupiter-engine + 5.4.1 + test + + + org.junit.vintage + junit-vintage-engine + 5.4.2 + + + org.assertj + assertj-core + 3.12.2 + test + + \ No newline at end of file diff --git a/fabcar/java/src/main/java/org/example/ClientApp.java b/fabcar/java/src/main/java/org/example/ClientApp.java index d7ace73b..43fb7619 100755 --- a/fabcar/java/src/main/java/org/example/ClientApp.java +++ b/fabcar/java/src/main/java/org/example/ClientApp.java @@ -2,160 +2,47 @@ package org.example; import java.nio.file.Path; import java.nio.file.Paths; -import java.security.PrivateKey; -import java.util.Properties; -import java.util.Set; import org.hyperledger.fabric.gateway.Contract; import org.hyperledger.fabric.gateway.Gateway; import org.hyperledger.fabric.gateway.Network; import org.hyperledger.fabric.gateway.Wallet; -import org.hyperledger.fabric.gateway.Wallet.Identity; -import org.hyperledger.fabric.sdk.Enrollment; -import org.hyperledger.fabric.sdk.User; -import org.hyperledger.fabric.sdk.security.CryptoSuite; -import org.hyperledger.fabric.sdk.security.CryptoSuiteFactory; -import org.hyperledger.fabric_ca.sdk.EnrollmentRequest; -import org.hyperledger.fabric_ca.sdk.HFCAClient; -import org.hyperledger.fabric_ca.sdk.RegistrationRequest; public class ClientApp { public static void main(String[] args) throws Exception { - // Create a new file system based wallet for managing identities. + // Load a file system based wallet for managing identities. Path walletPath = Paths.get("wallet"); - Wallet wallet = Wallet.createFileSystemWallet(walletPath); - loadWallet(wallet); + Wallet wallet = Wallet.createFileSystemWallet(walletPath); - // load a CCP - Path networkConfigPath = Paths.get("..", "..", "first-network", "connection-org1.yaml"); + // load a CCP + Path networkConfigPath = Paths.get("..", "..", "first-network", "connection-org1.yaml"); - Gateway.Builder builder = Gateway.createBuilder(); - builder.identity(wallet, "user1").networkConfig(networkConfigPath).discovery(true); + Gateway.Builder builder = Gateway.createBuilder(); + builder.identity(wallet, "user1").networkConfig(networkConfigPath).discovery(true); - // create a gateway connection - try (Gateway gateway = builder.connect()) { + // create a gateway connection + try (Gateway gateway = builder.connect()) { - // get the network and contract - Network network = gateway.getNetwork("mychannel"); - Contract contract = network.getContract("fabcar"); + // get the network and contract + Network network = gateway.getNetwork("mychannel"); + Contract contract = network.getContract("fabcar"); - byte[] result; + byte[] result; - result = contract.evaluateTransaction("queryAllCars"); - System.out.println(new String(result)); + result = contract.evaluateTransaction("queryAllCars"); + System.out.println(new String(result)); - contract.submitTransaction("createCar", "CAR10", "VW", "Polo", "Grey", "Mary"); + contract.submitTransaction("createCar", "CAR10", "VW", "Polo", "Grey", "Mary"); - result = contract.evaluateTransaction("queryCar", "CAR10"); - System.out.println(new String(result)); + result = contract.evaluateTransaction("queryCar", "CAR10"); + System.out.println(new String(result)); - contract.submitTransaction("changeCarOwner", "CAR10", "Archie"); + contract.submitTransaction("changeCarOwner", "CAR10", "Archie"); - result = contract.evaluateTransaction("queryCar", "CAR10"); - System.out.println(new String(result)); - - } catch (Exception ex) { - ex.printStackTrace(); - } - - } - - private static void loadWallet(Wallet wallet) throws Exception { - // Create a CA client for interacting with the CA. - Properties props = new Properties(); - props.put("pemFile", "../../first-network/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem"); - props.put("allowAllHostNames", "true"); - HFCAClient caClient = HFCAClient.createNewInstance("https://localhost:7054", props); - CryptoSuite cryptoSuite = CryptoSuiteFactory.getDefault().getCryptoSuite(); - caClient.setCryptoSuite(cryptoSuite); - - enrollAdmin(wallet, caClient); - registerUser(wallet, caClient); - - } - - private static void enrollAdmin(Wallet wallet, HFCAClient caClient) throws Exception { - // Check to see if we've already enrolled the admin user. - boolean adminExists = wallet.exists("admin"); - if (adminExists) { - System.out.println("An identity for the admin user \"admin\" already exists in the wallet"); - return; - } - - // Enroll the admin user, and import the new identity into the wallet. - final EnrollmentRequest enrollmentRequestTLS = new EnrollmentRequest(); - enrollmentRequestTLS.addHost("localhost"); - enrollmentRequestTLS.setProfile("tls"); - Enrollment enrollment = caClient.enroll("admin", "adminpw", enrollmentRequestTLS); - Identity user = Identity.createIdentity("Org1MSP", enrollment.getCert(), enrollment.getKey()); - wallet.put("admin", user); - } - - private static void registerUser(Wallet wallet, HFCAClient caClient) throws Exception { - // Check to see if we've already enrolled the user. - boolean userExists = wallet.exists("user1"); - if (userExists) { - System.out.println("An identity for the user \"user1\" already exists in the wallet"); - return; + result = contract.evaluateTransaction("queryCar", "CAR10"); + System.out.println(new String(result)); } - - Identity adminIdentity = wallet.get("admin"); - User admin = new User() { - - @Override - public String getName() { - return "admin"; - } - - @Override - public Set getRoles() { - return null; - } - - @Override - public String getAccount() { - return null; - } - - @Override - public String getAffiliation() { - return "org1.department1"; - } - - @Override - public Enrollment getEnrollment() { - return new Enrollment() { - - @Override - public PrivateKey getKey() { - return adminIdentity.getPrivateKey(); - } - - @Override - public String getCert() { - return adminIdentity.getCertificate(); - } - }; - } - - @Override - public String getMspId() { - return "Org1MSP"; - } - - }; - - // Register the user, enroll the user, and import the new identity into the wallet. - RegistrationRequest registrationRequest = new RegistrationRequest("user1"); - registrationRequest.setAffiliation("org1.department1"); - registrationRequest.setEnrollmentID("user1"); - String enrollmentSecret = caClient.register(registrationRequest, admin); - Enrollment enrollment = caClient.enroll("user1", enrollmentSecret); - Identity user = Identity.createIdentity("Org1MSP", enrollment.getCert(), enrollment.getKey()); - wallet.put("user1", user); - System.out.println("Successfully enrolled user \"user1\" and imported it into the wallet"); - } } diff --git a/fabcar/java/src/main/java/org/example/EnrollAdmin.java b/fabcar/java/src/main/java/org/example/EnrollAdmin.java new file mode 100644 index 00000000..a5b2fa04 --- /dev/null +++ b/fabcar/java/src/main/java/org/example/EnrollAdmin.java @@ -0,0 +1,46 @@ +package org.example; + +import java.nio.file.Paths; +import java.util.Properties; + +import org.hyperledger.fabric.gateway.Wallet; +import org.hyperledger.fabric.gateway.Wallet.Identity; +import org.hyperledger.fabric.sdk.Enrollment; +import org.hyperledger.fabric.sdk.security.CryptoSuite; +import org.hyperledger.fabric.sdk.security.CryptoSuiteFactory; +import org.hyperledger.fabric_ca.sdk.EnrollmentRequest; +import org.hyperledger.fabric_ca.sdk.HFCAClient; + +public class EnrollAdmin { + + public static void main(String[] args) throws Exception { + + // Create a CA client for interacting with the CA. + Properties props = new Properties(); + props.put("pemFile", + "../../first-network/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem"); + props.put("allowAllHostNames", "true"); + HFCAClient caClient = HFCAClient.createNewInstance("https://localhost:7054", props); + CryptoSuite cryptoSuite = CryptoSuiteFactory.getDefault().getCryptoSuite(); + caClient.setCryptoSuite(cryptoSuite); + + // Create a wallet for managing identities + Wallet wallet = Wallet.createFileSystemWallet(Paths.get("wallet")); + + // Check to see if we've already enrolled the admin user. + boolean adminExists = wallet.exists("admin"); + if (adminExists) { + System.out.println("An identity for the admin user \"admin\" already exists in the wallet"); + return; + } + + // Enroll the admin user, and import the new identity into the wallet. + final EnrollmentRequest enrollmentRequestTLS = new EnrollmentRequest(); + enrollmentRequestTLS.addHost("localhost"); + enrollmentRequestTLS.setProfile("tls"); + Enrollment enrollment = caClient.enroll("admin", "adminpw", enrollmentRequestTLS); + Identity user = Identity.createIdentity("Org1MSP", enrollment.getCert(), enrollment.getKey()); + wallet.put("admin", user); + System.out.println("Successfully enrolled user \"admin\" and imported it into the wallet"); + } +} diff --git a/fabcar/java/src/main/java/org/example/RegisterUser.java b/fabcar/java/src/main/java/org/example/RegisterUser.java new file mode 100644 index 00000000..0055dfac --- /dev/null +++ b/fabcar/java/src/main/java/org/example/RegisterUser.java @@ -0,0 +1,103 @@ +package org.example; + +import java.nio.file.Paths; +import java.security.PrivateKey; +import java.util.Properties; +import java.util.Set; + +import org.hyperledger.fabric.gateway.Wallet; +import org.hyperledger.fabric.gateway.Wallet.Identity; +import org.hyperledger.fabric.sdk.Enrollment; +import org.hyperledger.fabric.sdk.User; +import org.hyperledger.fabric.sdk.security.CryptoSuite; +import org.hyperledger.fabric.sdk.security.CryptoSuiteFactory; +import org.hyperledger.fabric_ca.sdk.HFCAClient; +import org.hyperledger.fabric_ca.sdk.RegistrationRequest; + +public class RegisterUser { + + public static void main(String[] args) throws Exception { + + // Create a CA client for interacting with the CA. + Properties props = new Properties(); + props.put("pemFile", + "../../first-network/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem"); + props.put("allowAllHostNames", "true"); + HFCAClient caClient = HFCAClient.createNewInstance("https://localhost:7054", props); + CryptoSuite cryptoSuite = CryptoSuiteFactory.getDefault().getCryptoSuite(); + caClient.setCryptoSuite(cryptoSuite); + + // Create a wallet for managing identities + Wallet wallet = Wallet.createFileSystemWallet(Paths.get("wallet")); + + // Check to see if we've already enrolled the user. + boolean userExists = wallet.exists("user1"); + if (userExists) { + System.out.println("An identity for the user \"user1\" already exists in the wallet"); + return; + } + + userExists = wallet.exists("admin"); + if (!userExists) { + System.out.println("\"admin\" needs to be enrolled and added to the wallet first"); + return; + } + + Identity adminIdentity = wallet.get("admin"); + User admin = new User() { + + @Override + public String getName() { + return "admin"; + } + + @Override + public Set getRoles() { + return null; + } + + @Override + public String getAccount() { + return null; + } + + @Override + public String getAffiliation() { + return "org1.department1"; + } + + @Override + public Enrollment getEnrollment() { + return new Enrollment() { + + @Override + public PrivateKey getKey() { + return adminIdentity.getPrivateKey(); + } + + @Override + public String getCert() { + return adminIdentity.getCertificate(); + } + }; + } + + @Override + public String getMspId() { + return "Org1MSP"; + } + + }; + + // Register the user, enroll the user, and import the new identity into the wallet. + RegistrationRequest registrationRequest = new RegistrationRequest("user1"); + registrationRequest.setAffiliation("org1.department1"); + registrationRequest.setEnrollmentID("user1"); + String enrollmentSecret = caClient.register(registrationRequest, admin); + Enrollment enrollment = caClient.enroll("user1", enrollmentSecret); + Identity user = Identity.createIdentity("Org1MSP", enrollment.getCert(), enrollment.getKey()); + wallet.put("user1", user); + System.out.println("Successfully enrolled user \"user1\" and imported it into the wallet"); + } + +} diff --git a/fabcar/java/src/test/java/org/example/ClientTest.java b/fabcar/java/src/test/java/org/example/ClientTest.java index 9a6a9a1d..3acfe1b7 100644 --- a/fabcar/java/src/test/java/org/example/ClientTest.java +++ b/fabcar/java/src/test/java/org/example/ClientTest.java @@ -6,6 +6,8 @@ public class ClientTest { @Test public void testFabCar() throws Exception { + EnrollAdmin.main(null); + RegisterUser.main(null); ClientApp.main(null); } } diff --git a/fabcar/startFabric.sh b/fabcar/startFabric.sh index 797e97fd..c839a203 100755 --- a/fabcar/startFabric.sh +++ b/fabcar/startFabric.sh @@ -213,11 +213,11 @@ Java: Then, install dependencies and run the test using: mvn test -The test will invoke the sample client app which perform the following: - - Enroll admin and user1 and import them into the wallet (if they don't already exist there) - - Submit a transaction to create a new car - - Evaluate a transaction (query) to return details of this car - - Submit a transaction to change the owner of this car - - Evaluate a transaction (query) to return the updated details of this car + The test will invoke the sample client app which perform the following: + - Enroll admin and user1 and import them into the wallet (if they don't already exist there) + - Submit a transaction to create a new car + - Evaluate a transaction (query) to return details of this car + - Submit a transaction to change the owner of this car + - Evaluate a transaction (query) to return the updated details of this car EOF