diff --git a/msp/Org1/admin.context b/msp/Org1/admin.context new file mode 100644 index 0000000..4e2b42e Binary files /dev/null and b/msp/Org1/admin.context differ diff --git a/src/main/java/blockchain/client/CAClientWrapper.java b/src/main/java/blockchain/client/CAClientWrapper.java index 15e5b71..5df0efb 100644 --- a/src/main/java/blockchain/client/CAClientWrapper.java +++ b/src/main/java/blockchain/client/CAClientWrapper.java @@ -1,7 +1,10 @@ package blockchain.client; import blockchain.user.UserContext; -import org.bouncycastle.jcajce.provider.asymmetric.ec.KeyFactorySpi; +import blockchain.utility.Util; +import org.apache.log4j.BasicConfigurator; +import org.apache.log4j.Logger; +import org.hyperledger.fabric.sdk.Enrollment; import org.hyperledger.fabric.sdk.exception.CryptoException; import org.hyperledger.fabric.sdk.exception.InvalidArgumentException; import org.hyperledger.fabric.sdk.security.CryptoSuite; @@ -12,14 +15,15 @@ import java.net.MalformedURLException; import java.util.Properties; public class CAClientWrapper { + private static Logger logger = Logger.getLogger(CAClientWrapper.class); private String caUrl; private Properties properties; private HFCAClient hfcaClient; private UserContext adminContext; - public void setAdminContext(UserContext adminContext) { - this.adminContext = adminContext; - } + public void setAdminContext(UserContext adminContext) { this.adminContext = adminContext; } + + public UserContext getAdminContext(){ return adminContext; } public HFCAClient getHfcaClient(){ return hfcaClient; @@ -37,11 +41,28 @@ public class CAClientWrapper { hfcaClient.setCryptoSuite(cryptoSuite); } - //TODO - public UserContext enrollAdmin(String username, String password) throws Exception{ - UserContext userContext = new UserContext(); + public UserContext enrollAdmin(String username, String password, String affiliation) throws Exception{ + BasicConfigurator.configure(); + UserContext checkAdmin; + checkAdmin = Util.readUserContext(affiliation, username); - return null; + //SANITY CHECK + if(adminContext.getName().isEmpty()) throw new NullPointerException(); + + if(checkAdmin!=null){ + logger.warn("Admin already enrolled, skip"); + return checkAdmin; + } + + logger.info("Try hfcaClient.enroll"); + Enrollment enrollment = hfcaClient.enroll(username,password); + + logger.info("Admin enrolled"); + adminContext.setEnrollment(enrollment); + + logger.info("Write admin in msp directory"); + Util.writeUserContext(adminContext); + return adminContext; } diff --git a/src/main/java/blockchain/configuration/Config.java b/src/main/java/blockchain/configuration/Config.java new file mode 100644 index 0000000..0f0b9ee --- /dev/null +++ b/src/main/java/blockchain/configuration/Config.java @@ -0,0 +1,28 @@ +package blockchain.configuration; + +public class Config { + + public static final String ORG1_MSP = "Org1MSP"; + + public static final String ORG1 = "Org1"; + + public static final String ADMIN = "admin"; + + public static final String ADMIN_PASSWORD = "adminpw"; + + public static final String CA_ORG1_URL = "http://vps577432.ovh.net:7054"; + + public static final String ORDERER_URL = "http://vps577432.ovh.net:7050"; + + public static final String ORDERER_NAME = "orderer.example.com"; + + public static final String CHANNEL_NAME = "mychannel"; + + public static final String CHAINCODE_NAME = "mycc"; + + public static final String ORG1_PEER_0 = "peer0.org1.example.com"; + + public static final String ORG1_PEER_0_URL = "http://vps577432.ovh.net:7051"; + + +} diff --git a/src/main/java/blockchain/utility/Util.java b/src/main/java/blockchain/utility/Util.java index 6d29293..464c9b1 100644 --- a/src/main/java/blockchain/utility/Util.java +++ b/src/main/java/blockchain/utility/Util.java @@ -15,6 +15,8 @@ public class Util { ObjectOutputStream out = null; FileOutputStream fileOutputStream = null; try { + logger.info("Write user "+userContext.getName()+" of "+userContext.getAffiliation()); + String directoryPath = "msp/" + userContext.getAffiliation(); String filePath = directoryPath + "/" + userContext.getName() + ".context"; File directory = new File(directoryPath); diff --git a/src/test/java/blockchain/client/TestEnrollAdmin.java b/src/test/java/blockchain/client/TestEnrollAdmin.java new file mode 100644 index 0000000..3b27963 --- /dev/null +++ b/src/test/java/blockchain/client/TestEnrollAdmin.java @@ -0,0 +1,40 @@ +package blockchain.client; + +import blockchain.configuration.Config; +import blockchain.user.UserContext; +import org.hyperledger.fabric.sdk.Enrollment; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class TestEnrollAdmin { + @Test + public void TestAEnrollAdmin(){ + String caUrl = Config.CA_ORG1_URL; + try { + CAClientWrapper caClientWrapper = new CAClientWrapper(caUrl,null); + + UserContext adminContext = new UserContext(); + adminContext.setName(Config.ADMIN); + adminContext.setAffiliation(Config.ORG1); + adminContext.setMspId(Config.ORG1_MSP); + + caClientWrapper.setAdminContext(adminContext); + + UserContext verifyUser = caClientWrapper.getAdminContext(); + assertEquals(Config.ADMIN, verifyUser.getName()); + assertEquals(Config.ORG1, verifyUser.getAffiliation()); + assertEquals(Config.ORG1_MSP, verifyUser.getMspId()); + + adminContext = caClientWrapper.enrollAdmin(adminContext.getName(),Config.ADMIN_PASSWORD,adminContext.getAffiliation()); + + //Check Admin Enrollement + Enrollment enrollment = adminContext.getEnrollment(); + System.out.println("admin cert : "+enrollment.getCert()); + System.out.println("admin keys : "+enrollment.getKey()); + }catch (Exception e){ + e.printStackTrace(); + } + + } +} diff --git a/target/classes/blockchain/client/CAClientWrapper.class b/target/classes/blockchain/client/CAClientWrapper.class index 6e94daa..9edb457 100644 Binary files a/target/classes/blockchain/client/CAClientWrapper.class and b/target/classes/blockchain/client/CAClientWrapper.class differ diff --git a/target/classes/blockchain/configuration/Config.class b/target/classes/blockchain/configuration/Config.class new file mode 100644 index 0000000..2a8480f Binary files /dev/null and b/target/classes/blockchain/configuration/Config.class differ diff --git a/target/classes/blockchain/utility/Util.class b/target/classes/blockchain/utility/Util.class index 5f9ec2d..3a430d4 100644 Binary files a/target/classes/blockchain/utility/Util.class and b/target/classes/blockchain/utility/Util.class differ diff --git a/target/test-classes/blockchain/client/TestEnrollAdmin.class b/target/test-classes/blockchain/client/TestEnrollAdmin.class new file mode 100644 index 0000000..83d44dd Binary files /dev/null and b/target/test-classes/blockchain/client/TestEnrollAdmin.class differ