diff --git a/pom.xml b/pom.xml index 6293014..17d66a5 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,11 @@ net.respectnetwork sdk-csp jar +<<<<<<< HEAD + 0.5-SNAPSHOT +======= 0.4.3 +>>>>>>> d5b513c598e394897f8af0334b387b87c9567ba9 sdk-csp Respect Network SDK for CSPs @@ -31,6 +35,7 @@ UTF-8 github 1.7.5 + 0.6-SNAPSHOT @@ -136,7 +141,11 @@ xdi2 xdi2-client +<<<<<<< HEAD + ${xdi2-version} +======= 0.6 +>>>>>>> d5b513c598e394897f8af0334b387b87c9567ba9 compile diff --git a/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java b/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java index 1c437ea..48d6b96 100644 --- a/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java +++ b/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java @@ -35,8 +35,11 @@ import xdi2.core.constants.XDIConstants; import xdi2.core.constants.XDIDictionaryConstants; import xdi2.core.constants.XDILinkContractConstants; +import xdi2.core.features.linkcontracts.GenericLinkContract; import xdi2.core.features.linkcontracts.PublicLinkContract; import xdi2.core.features.linkcontracts.RootLinkContract; +import xdi2.core.features.linkcontracts.policy.PolicyAnd; +import xdi2.core.features.linkcontracts.policy.PolicyUtil; import xdi2.core.features.nodetypes.XdiAbstractMemberUnordered; import xdi2.core.features.nodetypes.XdiInnerRoot; import xdi2.core.features.nodetypes.XdiLocalRoot; @@ -91,6 +94,8 @@ public class BasicCSP implements CSP { public static final XDI3Segment XRI_S_FIRST_MEMBER = XDI3Segment.create("#first#member"); public static final XDI3Segment XRI_S_AS_AVAILABLE = XDI3Segment.create("<#available>"); + + public static final XDI3Segment XRI_S_REGISTRAR = XDI3Segment.create("#registrar"); private CSPInformation cspInformation; @@ -1220,16 +1225,41 @@ public void setGuardianshipInCloud(CSPInformation cspInformation, CloudNumber gu throw new Xdi2ClientException("Consent required for this operation", new ErrorMessageResult()); } - message2.createSetOperation(targetStatements2.iterator()); - - // send message - String cloudXdiEndpoint2 = this.makeCloudXdiEndpoint(dependent); - XDIClient xdiClientCloud2 = new XDIHttpClient(cloudXdiEndpoint2); - log.debug("setGuardianshipInCloud :: Message2 " + messageEnvelope2.getGraph().toString()); - xdiClientCloud2.send(messageEnvelope2, null); - - // done - log.debug("In Dependent User Cloud: Creating Guardian Relationship between " + dependent.toString() + " and " + guardian.toString() ); + // Set link contract and policies so that parent/guardian can fetch all + // the information from child's cloud. + Graph parentChildLinkContractGraph = MemoryGraphFactory.getInstance().openGraph(); + GenericLinkContract linkContract = GenericLinkContract.findGenericLinkContract(parentChildLinkContractGraph, + dependent.getXri(), guardian.getXri(), XDI3Segment.create(""), true); + + PolicyAnd policy = linkContract.getPolicyRoot(true).createAndPolicy(true); + PolicyUtil.createSenderIsOperator(policy, guardian.getXri()); + PolicyUtil.createSignatureValidOperator(policy); + + linkContract.setPermissionTargetAddress(XDILinkContractConstants.XRI_S_ALL, + XDI3Util.concatXris(XDIConstants.XRI_S_ROOT)); + + log.info("Sending following XDI data to child cloud: {}", + parentChildLinkContractGraph.toString("XDI DISPLAY", null)); + MessageEnvelope msgEnvelope = new MessageEnvelope(); + Message parentChildMsg = msgEnvelope.createMessage(dependent.getXri()); + parentChildMsg.setToPeerRootXri(dependent.getPeerRootXri()); + parentChildMsg.setLinkContractXri(RootLinkContract.createRootLinkContractXri(dependent.getXri())); + parentChildMsg.setSecretToken(dependentToken); + parentChildMsg.createSetOperation(parentChildLinkContractGraph); + + message2.createSetOperation(targetStatements2.iterator()); + + // send message + String cloudXdiEndpoint2 = this.makeCloudXdiEndpoint(dependent); + XDIClient xdiClientCloud2 = new XDIHttpClient(cloudXdiEndpoint2); + log.debug("setGuardianshipInCloud :: Message2 " + messageEnvelope2.getGraph().toString()); + xdiClientCloud2.send(messageEnvelope2, null); + log.debug("setGuardianshipInCloud :: parent child link contract "); + printMessage(msgEnvelope); + xdiClientCloud2.send(msgEnvelope, null); + // done + log.debug("In Dependent User Cloud: Creating Guardian Relationship between " + dependent.toString() + " and " + + guardian.toString()); } @@ -2183,6 +2213,246 @@ private List createSignedBillingXDI3Statements(CloudNumber busine } + @Override + public CloudNumber checkCloudNameInCSP(CloudName cloudName) throws Xdi2ClientException { + CloudNumber cloudNumber = null; + + // prepare message to RN + MessageEnvelope messageEnvelope = new MessageEnvelope(); + MessageCollection messageCollection = this.createMessageCollectionToRN(messageEnvelope); + + Message message = messageCollection.createMessage(); + + XDI3Statement targetStatement = XDI3Statement.fromComponents( + XDI3Segment.fromComponent(cloudName.getPeerRootXri()), XDIDictionaryConstants.XRI_S_REF, + XDIConstants.XRI_S_VARIABLE); + + message.createGetOperation(targetStatement); + + // send message and read result + this.prepareMessageToCSP(message); + + log.debug("checkCloudNameInCSP :: Message envelope to CSP \n"); + printMessage(messageEnvelope); + + MessageResult messageResult = this.getXdiClientCSPRegistry().send(messageEnvelope, null); + + Relation relation = messageResult.getGraph().getDeepRelation( + XDI3Segment.fromComponent(cloudName.getPeerRootXri()), XDIDictionaryConstants.XRI_S_REF); + + if (relation != null) { + cloudNumber = CloudNumber.fromPeerRootXri(relation.getTargetContextNodeXri()); + } + + // done + log.debug("In CSP: For Cloud Name " + cloudName + " found Cloud Number " + cloudNumber); + return cloudNumber; + } + + @Override + public void updatePhoneInRN(CloudNumber cloudNumber, String verifiedPhone, String oldVerifiedPhone) throws Xdi2ClientException { + // prepare message to RN + + MessageEnvelope messageEnvelope = new MessageEnvelope(); + MessageCollection messageCollection = this.createMessageCollectionToRN(messageEnvelope); + + Message message = messageCollection.createMessage(); + + List targetStatementsSet = new ArrayList (); + + if (oldVerifiedPhone != null) { + targetStatementsSet.add(XDI3Statement.fromRelationComponents( + XDI3Util.concatXris(this.getCspInformation().getRnCloudNumber().getXri(), XRI_S_AC_VERIFIED_DIGEST_PHONE, XDI3Segment.fromComponent(XdiAbstractMemberUnordered.createDigestArcXri(oldVerifiedPhone, true))), + XRI_S_IS_PHONE, + cloudNumber.getXri())); + } + + this.prepareMessageToRN(message); + message.createDelOperation(targetStatementsSet.iterator()); + + // send message + this.getXdiClientRNRegistrationService().send(messageEnvelope, null); + //update(set) new phone number + setPhoneAndEmailInRN(cloudNumber, verifiedPhone, null); + // done + + log.debug("Updated RN: Verified phone " + oldVerifiedPhone + " with new Verified phone " + verifiedPhone + " for Cloud Number " + cloudNumber); + } + + @Override + public void updateEmailInRN(CloudNumber cloudNumber, String verifiedEmail, String oldVerifiedEmail) throws Xdi2ClientException { + + // prepare message to RN + + MessageEnvelope messageEnvelope = new MessageEnvelope(); + MessageCollection messageCollection = this.createMessageCollectionToRN(messageEnvelope); + + Message message = messageCollection.createMessage(); + + List targetStatementsSet = new ArrayList (); + + if (oldVerifiedEmail != null) { + targetStatementsSet.add(XDI3Statement.fromRelationComponents( + XDI3Util.concatXris(this.getCspInformation().getRnCloudNumber().getXri(), XRI_S_AC_VERIFIED_DIGEST_EMAIL, XDI3Segment.fromComponent(XdiAbstractMemberUnordered.createDigestArcXri(oldVerifiedEmail, true))), + XRI_S_IS_EMAIL, + cloudNumber.getXri())); + } + + this.prepareMessageToRN(message); + message.createDelOperation(targetStatementsSet.iterator()); + + // send message + this.getXdiClientRNRegistrationService().send(messageEnvelope, null); + + //update(set) new email + setPhoneAndEmailInRN(cloudNumber, null, verifiedEmail); + // done + + log.debug("Updated RN: Verified phone " + oldVerifiedEmail + " with new Verified phone " + verifiedEmail + " for Cloud Number " + cloudNumber); + + } + + @Override + public CloudNumber getMemberRegistrar(CloudNumber cloudNumber) throws Xdi2ClientException { + + // prepare message to CSP + + MessageEnvelope messageEnvelope = new MessageEnvelope(); + MessageCollection messageCollection = this.createMessageCollectionToRN(messageEnvelope); + + Message message = messageCollection.createMessage(); + + + XDI3Statement targetAddress = XDI3Statement.fromRelationComponents(cloudNumber.getXri(),XRI_S_REGISTRAR, XDIConstants.XRI_S_VARIABLE); + message.createGetOperation(targetAddress); + + // send message and read results + + this.prepareMessageToRN(message); + + MessageResult messageResult = this.getXdiClientRNRegistrationService().send(messageEnvelope, null); + + Relation relation = messageResult.getGraph().getDeepRelation(cloudNumber.getXri(), XRI_S_REGISTRAR); + CloudNumber cspCloudNumber = null; + if (relation != null) { + cspCloudNumber = CloudNumber.fromXri(relation.getTargetContextNodeXri()); + } + + // done + + log.debug("In RN: For Cloud Number " + cloudNumber + " found CSP Cloud Number " + cspCloudNumber); + return cspCloudNumber; + + } + + @Override + public void transferCloudInCSP(CloudNumber cloudNumber, CloudName[] cloudNames, String secretToken) throws Xdi2ClientException{ + //register cloud in CSP + registerCloudInCSP(cloudNumber, secretToken); + + //register cloudNames in CSP + MessageEnvelope messageEnvelope = new MessageEnvelope(); + MessageCollection messageCollection = this.createMessageCollectionToCSP(messageEnvelope); + + Message message = messageCollection.createMessage(); + List targetStatementsSet = new ArrayList (); + for(CloudName cloudName:cloudNames){ + targetStatementsSet.add(XDI3Statement.fromRelationComponents( + XDI3Segment.fromComponent(cloudName.getPeerRootXri()), + XDIDictionaryConstants.XRI_S_REF, + XDI3Segment.fromComponent(cloudNumber.getPeerRootXri()))); + + targetStatementsSet.add(XDI3Statement.fromRelationComponents( + XDI3Segment.fromComponent(cloudNumber.getPeerRootXri()), + XDIDictionaryConstants.XRI_S_IS_REF, + XDI3Segment.fromComponent(cloudName.getPeerRootXri()))); + } + message.createSetOperation(targetStatementsSet.iterator()); + // send message + + this.prepareMessageToCSP(message); + log.debug("registerCloudNamesInCSP :: Message "+ messageEnvelope.getGraph().toString()); + this.getXdiClientCSPRegistry().send(messageEnvelope, null); + + //set registrar + setCloudXdiEndpointInCSP(cloudNumber, null); + } + + @Override + public void deleteCloudInCSP(CloudNumber cloudNumber, String secretToken) throws Xdi2ClientException{ + // prepare message to CSP + MessageEnvelope messageEnvelope = new MessageEnvelope(); + MessageCollection messageCollection = this.createMessageCollectionToCSP(messageEnvelope); + Message message = messageCollection.createMessage(); + + XDI3Segment targetAddress = XDI3Segment.fromComponent(cloudNumber.getPeerRootXri()); + message.createDelOperation(targetAddress); + + // send message + this.prepareMessageToCSP(message); + this.getXdiClientCSPRegistry().send(messageEnvelope, null); + } + + + @Override + public void changeMemberRegistrarInRN(CloudNumber cloudNumber) throws Xdi2ClientException { + //check if cloudNumber has a registrar assignd already + CloudNumber currentMemberRegistrar = getMemberRegistrar(cloudNumber); + //delete existing registrar + if(currentMemberRegistrar!=null){ + deleteMemberRegistrar(cloudNumber, currentMemberRegistrar); + } + currentMemberRegistrar = getMemberRegistrar(cloudNumber); + //if delete successfull update with new registrar + if(currentMemberRegistrar==null){ + // prepare message to CSP + + MessageEnvelope messageEnvelope = new MessageEnvelope(); + MessageCollection messageCollection = this.createMessageCollectionToRN(messageEnvelope); + + Message message = messageCollection.createMessage(); + + + XDI3Statement targetAddress = XDI3Statement.fromRelationComponents(cloudNumber.getXri(),XRI_S_REGISTRAR,getCspInformation().getCspCloudNumber().getXri()); + message.createSetOperation(targetAddress); + + // send message and read results + + this.prepareMessageToRN(message); + + this.getXdiClientRNRegistrationService().send(messageEnvelope, null); + + log.debug("In RN: updated member registrar for:" + cloudNumber +" with CSP Cloud Number: "+getCspInformation().getCspCloudNumber().getXri()); + } + } + + /** + * deletes current member registrar for cloud number + * @param cloudNumber + * @param oldMemberRegistrar + * @throws Xdi2ClientException + */ + private void deleteMemberRegistrar(CloudNumber cloudNumber, CloudNumber currentMemberRegistrar) throws Xdi2ClientException { + + // prepare message to CSP + MessageEnvelope messageEnvelope = new MessageEnvelope(); + MessageCollection messageCollection = this.createMessageCollectionToRN(messageEnvelope); + + Message message = messageCollection.createMessage(); + + List targetStatementsDel = new ArrayList (); + XDI3Statement targetAddress = XDI3Statement.fromRelationComponents(cloudNumber.getXri(),XRI_S_REGISTRAR,currentMemberRegistrar.getXri()); + targetStatementsDel.add(targetAddress); + message.createDelOperation(targetStatementsDel.iterator()); + + // send message and read results + this.prepareMessageToRN(message); + this.getXdiClientRNRegistrationService().send(messageEnvelope, null); + + + log.debug("Deleted current member registrar for:" + cloudNumber); + + } } diff --git a/src/main/java/net/respectnetwork/sdk/csp/CSP.java b/src/main/java/net/respectnetwork/sdk/csp/CSP.java index 805e6e6..c151d42 100644 --- a/src/main/java/net/respectnetwork/sdk/csp/CSP.java +++ b/src/main/java/net/respectnetwork/sdk/csp/CSP.java @@ -399,7 +399,65 @@ public void registerBusinessNameInCSP(CloudName businessCloudName, CloudNumber b */ public void registerBusinessNameInCloud(CloudName businessCloudName, CloudNumber businessCloudNumber, CloudNumber contactCloudNumber) throws Xdi2ClientException; +<<<<<<< HEAD + /** + * updates phone number for a given cloud number with new phone number + * @param cloudNumber + * @param verifiedPhone + * @param oldVerifiedPhone + * @throws Xdi2ClientException + */ + public void updatePhoneInRN(CloudNumber cloudNumber, String verifiedPhone, String oldVerifiedPhone ) throws Xdi2ClientException; + + /** + * updates email for a given cloud number with new email + * @param cloudNumber + * @param verifiedEmail + * @param oldVerifiedEmail + * @throws Xdi2ClientException + */ + public void updateEmailInRN(CloudNumber cloudNumber, String verifiedEmail, String oldVerifiedEmail ) throws Xdi2ClientException; + /** + * retrieves csp cloudNumber for a member + * @param cloudNumber + * @return + * @throws Xdi2ClientException + */ + public CloudNumber getMemberRegistrar(CloudNumber cloudNumber) throws Xdi2ClientException; + + /** + * deletes cloud in CSP + * @param cloudNumber + * @param secretToken + * @throws Xdi2ClientException + */ + public void deleteCloudInCSP(CloudNumber cloudNumber, String secretToken) throws Xdi2ClientException; + + /** + * transfers users cloud to a different csp + * @param cloudNumber + * @param cloudNames + * @param secretToken + * @throws Xdi2ClientException + */ + public void transferCloudInCSP(CloudNumber cloudNumber, CloudName[] cloudNames, String secretToken) throws Xdi2ClientException; + + /** + * change member registrar for a given cloud number, deletes current member registrar + * @param cloudNumber + * @throws Xdi2ClientException + */ + public void changeMemberRegistrarInRN(CloudNumber cloudNumber) throws Xdi2ClientException; +======= + /** + * This method checks that Cloud Name exist in the CSP Cloud. + * @param cloudName + * @return + * @throws Xdi2ClientException + */ + public CloudNumber checkCloudNameInCSP(CloudName cloudName) throws Xdi2ClientException; +>>>>>>> d5b513c598e394897f8af0334b387b87c9567ba9 } diff --git a/src/main/java/net/respectnetwork/sdk/csp/example/CSPInformationEmmettStage.java b/src/main/java/net/respectnetwork/sdk/csp/example/CSPInformationEmmettStage.java new file mode 100644 index 0000000..5fb62be --- /dev/null +++ b/src/main/java/net/respectnetwork/sdk/csp/example/CSPInformationEmmettStage.java @@ -0,0 +1,30 @@ +package net.respectnetwork.sdk.csp.example; + +import net.respectnetwork.sdk.csp.BasicCSPInformation; +import net.respectnetwork.sdk.csp.ssl.TLSv1Support; +import xdi2.core.xri3.CloudNumber; +import xdi2.core.xri3.XDI3Segment; +import xdi2.discovery.XDIDiscoveryClient; + +public class CSPInformationEmmettStage extends BasicCSPInformation { + + private static final long serialVersionUID = -1186435920408698291L; + + public CSPInformationEmmettStage() { + + super( + CloudNumber.create("[+]!:uuid:690404d0-df12-4a60-a98c-fd975ea79e5b"), + "https://mycloud-stg.cloudnames.biz/emmettglobal-registry", + "https://mycloud-stg.cloudnames.biz/emmettglobal-users/", + "P3hpJ0ErjqIq", + null, + CloudNumber.create("[+]!:uuid:ca51aeb9-e09e-4305-89d7-87a944a1e1fa"), + "http://registration-stage.respectnetwork.net/registration", + XDI3Segment.create("([+]!:uuid:ca51aeb9-e09e-4305-89d7-87a944a1e1fa/#registrar)$do"), + null, + XDIDiscoveryClient.NEUSTAR_OTE_DISCOVERY_CLIENT + ); + + TLSv1Support.supportTLSv1(); + } +} diff --git a/src/main/java/net/respectnetwork/sdk/csp/example/CSPInformationTestCSPDev.java b/src/main/java/net/respectnetwork/sdk/csp/example/CSPInformationTestCSPDev.java new file mode 100644 index 0000000..62c341b --- /dev/null +++ b/src/main/java/net/respectnetwork/sdk/csp/example/CSPInformationTestCSPDev.java @@ -0,0 +1,30 @@ +package net.respectnetwork.sdk.csp.example; + +import net.respectnetwork.sdk.csp.BasicCSPInformation; +import net.respectnetwork.sdk.csp.ssl.TLSv1Support; +import xdi2.core.xri3.CloudNumber; +import xdi2.core.xri3.XDI3Segment; +import xdi2.discovery.XDIDiscoveryClient; + +public class CSPInformationTestCSPDev extends BasicCSPInformation { + + private static final long serialVersionUID = -1186435920408698291L; + + public CSPInformationTestCSPDev() { + + super( + CloudNumber.create("[+]!:uuid:20e3d77c-5a0e-44d5-b949-85153fbb6577"), + "https://mycloud-stg.cloudnames.biz/testcsp-registry", + "https://mycloud-stg.cloudnames.biz/testcsp-users/", + "whitelabel123", + null, + CloudNumber.create("[+]!:uuid:ca51aeb9-e09e-4305-89d7-87a944a1e1fa"), + "https://registration-dev.respectnetwork.net/registration", + XDI3Segment.create("([+]!:uuid:ca51aeb9-e09e-4305-89d7-87a944a1e1fa/#registrar)$do"), + null, + XDIDiscoveryClient.NEUSTAR_OTE_DISCOVERY_CLIENT + ); + + TLSv1Support.supportTLSv1(); + } +} diff --git a/src/main/java/net/respectnetwork/sdk/csp/example/CSPInformationTestCSPOTE.java b/src/main/java/net/respectnetwork/sdk/csp/example/CSPInformationTestCSPOTE.java index 571412f..69d8f64 100644 --- a/src/main/java/net/respectnetwork/sdk/csp/example/CSPInformationTestCSPOTE.java +++ b/src/main/java/net/respectnetwork/sdk/csp/example/CSPInformationTestCSPOTE.java @@ -14,12 +14,12 @@ public CSPInformationTestCSPOTE() { super( CloudNumber.create("[+]!:uuid:20e3d77c-5a0e-44d5-b949-85153fbb6577"), - "https://mycloud-ote.neustar.biz/testcsp-registry", - "https://mycloud-ote.neustar.biz/testcsp-users/", + "https://mycloud-stg.cloudnames.biz/testcsp-registry", + "https://mycloud-stg.cloudnames.biz/testcsp-users/", "whitelabel123", null, CloudNumber.create("[+]!:uuid:ca51aeb9-e09e-4305-89d7-87a944a1e1fa"), - "https://registration-dev.respectnetwork.net/registration", + "https://registration-ote.respectnetwork.net/registration", XDI3Segment.create("([+]!:uuid:ca51aeb9-e09e-4305-89d7-87a944a1e1fa/#registrar)$do"), null, XDIDiscoveryClient.NEUSTAR_OTE_DISCOVERY_CLIENT diff --git a/src/main/java/net/respectnetwork/sdk/csp/example/CSPInformationTestCSPStage.java b/src/main/java/net/respectnetwork/sdk/csp/example/CSPInformationTestCSPStage.java new file mode 100644 index 0000000..4a3e2f7 --- /dev/null +++ b/src/main/java/net/respectnetwork/sdk/csp/example/CSPInformationTestCSPStage.java @@ -0,0 +1,30 @@ +package net.respectnetwork.sdk.csp.example; + +import net.respectnetwork.sdk.csp.BasicCSPInformation; +import net.respectnetwork.sdk.csp.ssl.TLSv1Support; +import xdi2.core.xri3.CloudNumber; +import xdi2.core.xri3.XDI3Segment; +import xdi2.discovery.XDIDiscoveryClient; + +public class CSPInformationTestCSPStage extends BasicCSPInformation { + + private static final long serialVersionUID = -1186435920408698291L; + + public CSPInformationTestCSPStage() { + + super( + CloudNumber.create("[+]!:uuid:20e3d77c-5a0e-44d5-b949-85153fbb6577"), + "https://mycloud-stg.cloudnames.biz/testcsp-registry", + "https://mycloud-stg.cloudnames.biz/testcsp-users/", + "whitelabel123", + null, + CloudNumber.create("[+]!:uuid:ca51aeb9-e09e-4305-89d7-87a944a1e1fa"), + "https://registration-stage.respectnetwork.net/registration", + XDI3Segment.create("([+]!:uuid:ca51aeb9-e09e-4305-89d7-87a944a1e1fa/#registrar)$do"), + null, + XDIDiscoveryClient.NEUSTAR_OTE_DISCOVERY_CLIENT + ); + + TLSv1Support.supportTLSv1(); + } +} diff --git a/src/main/java/net/respectnetwork/sdk/csp/example/ExampleChangeMemberRegistrar.java b/src/main/java/net/respectnetwork/sdk/csp/example/ExampleChangeMemberRegistrar.java new file mode 100644 index 0000000..04880df --- /dev/null +++ b/src/main/java/net/respectnetwork/sdk/csp/example/ExampleChangeMemberRegistrar.java @@ -0,0 +1,74 @@ +package net.respectnetwork.sdk.csp.example; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +import net.respectnetwork.sdk.csp.BasicCSP; +import net.respectnetwork.sdk.csp.BasicCSPInformation; +import net.respectnetwork.sdk.csp.CSP; +import net.respectnetwork.sdk.csp.CSPInformation; +import xdi2.core.xri3.CloudName; +import xdi2.core.xri3.CloudNumber; + +public class ExampleChangeMemberRegistrar { + + /* CHOOSE rn csp secret token here */ + private static String rnCspSecretToken = "testcsp"; + + /* CHOOSE THE INDIVIDUAL's CLOUD NUMBER HERE */ + private static CloudNumber cloudNumber; + + /* CHOOSE THE INDIVIDUAL's CLOUD NAME HERE */ + private static CloudName cloudName; + + + static { + + try { + + System.out.print("Enter Cloud Name: "); + cloudName = CloudName.create(new BufferedReader(new InputStreamReader(System.in)).readLine()); + + if (cloudName == null) { + + System.err.println("Invalid Cloud Name."); + System.exit(0); + } + } catch (IOException ex) { + + throw new RuntimeException(ex.getMessage(), ex); + } + } + + public static void main(String[] args) throws Exception { + + // Step 0: Set up CSP + CSPInformation cspInformation = new CSPInformationTestCSPStage(); + + CSP csp = new BasicCSP(cspInformation); + ((BasicCSPInformation) csp.getCspInformation()).setCspSignaturePrivateKey(null); + ((BasicCSPInformation) csp.getCspInformation()).setRnCspSecretToken(rnCspSecretToken); + + // Step 1: Check cloudName is in RN + cloudNumber = csp.checkCloudNameInRN(cloudName); + + if (cloudNumber != null) { + CloudNumber cspCloudNumber = csp.getMemberRegistrar(cloudNumber); + + // Step 2: Set up new CSP + CSPInformation cspInformation2 = new CSPInformationEmmettStage(); + CSP csp2 = new BasicCSP(cspInformation2); + csp2.changeMemberRegistrarInRN(cloudNumber); + + // Step 3:get new member registrar + cspCloudNumber = csp2.getMemberRegistrar(cloudNumber); + //RND-193 change cloud end point in member graph use setCloudXdiEndpointInRN + //csp2.setCloudXdiEndpointInRN(cloudNumber, cspInformation2.getCspCloudBaseXdiEndpoint()+URLEncoder.encode(cloudNumber.toString(), "UTF-8")); + System.out.println("Registrar for cloudNumber " + cloudNumber + ": " + cspCloudNumber); + } else { + System.out.println("Cloud Name : " + cloudName + " does not exist"); + } + + } +} diff --git a/src/main/java/net/respectnetwork/sdk/csp/example/ExampleCloudDeleteInCSP.java b/src/main/java/net/respectnetwork/sdk/csp/example/ExampleCloudDeleteInCSP.java new file mode 100644 index 0000000..906f991 --- /dev/null +++ b/src/main/java/net/respectnetwork/sdk/csp/example/ExampleCloudDeleteInCSP.java @@ -0,0 +1,45 @@ +package net.respectnetwork.sdk.csp.example; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +import net.respectnetwork.sdk.csp.BasicCSP; +import net.respectnetwork.sdk.csp.CSP; +import net.respectnetwork.sdk.csp.CSPInformation; +import xdi2.core.xri3.CloudName; +import xdi2.core.xri3.CloudNumber; + +public class ExampleCloudDeleteInCSP { + + /* CHOOSE THE INDIVIDUAL's CLOUD NUMBER HERE */ + private static CloudNumber cloudNumber; + + static { + try { + System.out.print("Enter Cloud Number: "); + cloudNumber = CloudNumber.create(new BufferedReader(new InputStreamReader(System.in)).readLine()); + + if (cloudNumber == null) { + System.err.println("Invalid Cloud Number."); + System.exit(0); + } + } catch (IOException ex) { + throw new RuntimeException(ex.getMessage(), ex); + } + } + + public static void main(String[] args) throws Exception { + + // Step 0: Set up CSP + + CSPInformation cspInformation = new CSPInformationTestCSPOTE(); + CSP csp = new BasicCSP(cspInformation); + CloudName[] cloudNames = csp.checkCloudNamesInCSP(cloudNumber); + System.out.println("Before Delete CloudNames size:"+cloudNames.length); + csp.deleteCloudInCSP(cloudNumber, null); + System.out.println("Done deleting Cloud Number:"+cloudNumber); + cloudNames = csp.checkCloudNamesInCSP(cloudNumber); + System.out.println("After Delete CloudNames size======="+cloudNames.length); + } +} diff --git a/src/main/java/net/respectnetwork/sdk/csp/example/ExampleCloudTransferInCSP.java b/src/main/java/net/respectnetwork/sdk/csp/example/ExampleCloudTransferInCSP.java new file mode 100644 index 0000000..2d65dc6 --- /dev/null +++ b/src/main/java/net/respectnetwork/sdk/csp/example/ExampleCloudTransferInCSP.java @@ -0,0 +1,60 @@ +package net.respectnetwork.sdk.csp.example; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +import net.respectnetwork.sdk.csp.BasicCSP; +import net.respectnetwork.sdk.csp.CSP; +import net.respectnetwork.sdk.csp.CSPInformation; +import xdi2.core.xri3.CloudName; +import xdi2.core.xri3.CloudNumber; + +public class ExampleCloudTransferInCSP { + + /* CHOOSE THE INDIVIDUAL's CLOUD NUMBER HERE */ + private static CloudNumber cloudNumber; + + private static String secretToken = "mysecret"; + + static { + + try { + + System.out.print("Enter Cloud Number: "); + cloudNumber = CloudNumber.create(new BufferedReader(new InputStreamReader(System.in)).readLine()); + + if (cloudNumber == null) { + + System.err.println("Invalid Cloud Number."); + System.exit(0); + } + } catch (IOException ex) { + + throw new RuntimeException(ex.getMessage(), ex); + } + } + + public static void main(String[] args) throws Exception { + + // Step 0: Set up CSP + + CSPInformation cspInformation = new CSPInformationTestCSPOTE(); + + CSP csp = new BasicCSP(cspInformation); + CloudName[] cloudNames = csp.checkCloudNamesInCSP(cloudNumber); + + + CSPInformation cspInformation2 = new CSPInformationEmmettStage(); + CSP csp2 = new BasicCSP(cspInformation2); + for(CloudName cloudName:cloudNames){ + System.out.println(cloudName.getXri().toString()); + } + csp2.transferCloudInCSP(cloudNumber, cloudNames, secretToken); + cloudNames = csp2.checkCloudNamesInCSP(cloudNumber); + if(cloudNames.length>0){ + System.out.println("Cloud transferred to new CSP"); + } + + } +} diff --git a/src/main/java/net/respectnetwork/sdk/csp/example/ExampleMemberRegistrar.java b/src/main/java/net/respectnetwork/sdk/csp/example/ExampleMemberRegistrar.java new file mode 100644 index 0000000..a13915f --- /dev/null +++ b/src/main/java/net/respectnetwork/sdk/csp/example/ExampleMemberRegistrar.java @@ -0,0 +1,65 @@ +package net.respectnetwork.sdk.csp.example; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +import net.respectnetwork.sdk.csp.BasicCSP; +import net.respectnetwork.sdk.csp.BasicCSPInformation; +import net.respectnetwork.sdk.csp.CSP; +import net.respectnetwork.sdk.csp.CSPInformation; +import xdi2.core.xri3.CloudName; +import xdi2.core.xri3.CloudNumber; + +public class ExampleMemberRegistrar { + + /* CHOOSE rn csp secret token here */ + private static String rnCspSecretToken = "testcsp"; + + /* CHOOSE THE INDIVIDUAL's CLOUD NUMBER HERE */ + private static CloudNumber cloudNumber; + + /* CHOOSE THE INDIVIDUAL's CLOUD NAME HERE */ + private static CloudName cloudName; + + + static { + + try { + + System.out.print("Enter Cloud Name: "); + cloudName = CloudName.create(new BufferedReader(new InputStreamReader(System.in)).readLine()); + + if (cloudName == null) { + + System.err.println("Invalid Cloud Name."); + System.exit(0); + } + } catch (IOException ex) { + + throw new RuntimeException(ex.getMessage(), ex); + } + } + + public static void main(String[] args) throws Exception { + + // Step 0: Set up CSP + CSPInformation cspInformation = new CSPInformationTestCSPOTE(); + + CSP csp = new BasicCSP(cspInformation); + + // Step 1: Check cloudName is in RN + cloudNumber = csp.checkCloudNameInRN(cloudName); + + if(cloudNumber!=null){ + // Step 2: set cspsecret token to null & set RnCspSecretToken as it is required to set phone and email + ((BasicCSPInformation) csp.getCspInformation()).setCspSignaturePrivateKey(null); + ((BasicCSPInformation) csp.getCspInformation()).setRnCspSecretToken(rnCspSecretToken); + //Step 3:get member registrar + CloudNumber cspCloudNumber = csp.getMemberRegistrar(cloudNumber); + System.out.println("Registrar for cloudNumber "+ cloudNumber +": "+cspCloudNumber); + }else{ + System.out.println("Cloud Name : "+cloudName+" does not exist"); + } + } +} diff --git a/src/main/java/net/respectnetwork/sdk/csp/example/ExampleSetPhoneAndEmailInRN.java b/src/main/java/net/respectnetwork/sdk/csp/example/ExampleSetPhoneAndEmailInRN.java new file mode 100644 index 0000000..6daa096 --- /dev/null +++ b/src/main/java/net/respectnetwork/sdk/csp/example/ExampleSetPhoneAndEmailInRN.java @@ -0,0 +1,88 @@ +package net.respectnetwork.sdk.csp.example; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + +import net.respectnetwork.sdk.csp.BasicCSP; +import net.respectnetwork.sdk.csp.BasicCSPInformation; +import net.respectnetwork.sdk.csp.CSP; +import net.respectnetwork.sdk.csp.CSPInformation; +import xdi2.core.xri3.CloudName; +import xdi2.core.xri3.CloudNumber; + +public class ExampleSetPhoneAndEmailInRN { + + /* CHOOSE THE INDIVIDUAL's PHONE NUMBER HERE */ + private static String phone = "RNPhone-" + UUID.randomUUID().toString(); + + /* CHOOSE THE INDIVIDUAL's EMAIL HERE */ + private static String email = "RNEmail" + UUID.randomUUID().toString() + "@test.com"; + + /* CHOOSE rn csp secret token here */ + private static String rnCspSecretToken = "testcsp"; + + /* CHOOSE THE INDIVIDUAL's CLOUD NUMBER HERE */ + private static CloudNumber cloudNumber; + + /* CHOOSE THE INDIVIDUAL's CLOUD NAME HERE */ + private static CloudName cloudName; + + + static { + + try { + + System.out.print("Enter Cloud Name: "); + cloudName = CloudName.create(new BufferedReader(new InputStreamReader(System.in)).readLine()); + + if (cloudName == null) { + + System.err.println("Invalid Cloud Name."); + System.exit(0); + } + } catch (IOException ex) { + + throw new RuntimeException(ex.getMessage(), ex); + } + } + + public static void main(String[] args) throws Exception { + + // Step 0: Set up CSP + + CSPInformation cspInformation = new CSPInformationTestCSPOTE(); + + CSP csp = new BasicCSP(cspInformation); + + // Step 1: Check cloudName is in RN + cloudNumber = csp.checkCloudNameInRN(cloudName); + + if(cloudNumber!=null){ + // Step 2: set cspsecret token to null & set RnCspSecretToken as it is required to set phone and email + ((BasicCSPInformation) csp.getCspInformation()).setCspSignaturePrivateKey(null); + ((BasicCSPInformation) csp.getCspInformation()).setRnCspSecretToken(rnCspSecretToken); + + // Step 3: Set phone & email + csp.setPhoneAndEmailInRN(cloudNumber, phone, email); + System.out.println("Set phone & email for cloudNumber: "+cloudNumber.getXri().toString()); + + // Step 3: Verify phone & email is set for correct cloudNumber + CloudNumber[] existingCloudNumbers = csp.checkPhoneAndEmailAvailableInRN(phone, email); + Set existingCloudNumbersSet = new HashSet(); + existingCloudNumbersSet.addAll(Arrays.asList(existingCloudNumbers)); + + + System.out.println("Cloud Numbers for verifiedPhone & verifiedEmail is "+existingCloudNumbersSet.size()); + if(existingCloudNumbersSet.size()==1 && existingCloudNumbersSet.iterator().next().equals(cloudNumber)){ + System.out.println("Verified phone & email for cloudNUmber: "+cloudNumber.getXri().toString()); + } + }else{ + System.out.println("Cloud Name : "+cloudName+" does not exist"); + } + } +} diff --git a/src/main/java/net/respectnetwork/sdk/csp/example/ExampleUpdatePhoneInRN.java b/src/main/java/net/respectnetwork/sdk/csp/example/ExampleUpdatePhoneInRN.java new file mode 100644 index 0000000..9332a84 --- /dev/null +++ b/src/main/java/net/respectnetwork/sdk/csp/example/ExampleUpdatePhoneInRN.java @@ -0,0 +1,111 @@ +package net.respectnetwork.sdk.csp.example; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + +import net.respectnetwork.sdk.csp.BasicCSP; +import net.respectnetwork.sdk.csp.BasicCSPInformation; +import net.respectnetwork.sdk.csp.CSP; +import net.respectnetwork.sdk.csp.CSPInformation; +import xdi2.core.xri3.CloudName; +import xdi2.core.xri3.CloudNumber; + +public class ExampleUpdatePhoneInRN { + + /* CHOOSE THE INDIVIDUAL's PHONE NUMBER HERE */ + private static String phone = "RNPhone-" + UUID.randomUUID().toString(); + + /* CHOOSE THE INDIVIDUAL's EMAIL HERE */ + private static String email = "RNEmail" + UUID.randomUUID().toString() + "@test.com"; + + /* CHOOSE THE INDIVIDUAL's NEW PHONE NUMBER HERE */ + private static String newPhone = "RNPhone-Updated" + UUID.randomUUID().toString(); + + /* CHOOSE THE INDIVIDUAL's NEW EMAIL HERE */ + private static String newEmail = "RNPhone-Updated" + UUID.randomUUID().toString(); + + + /* CHOOSE rn csp secret token here */ + private static String rnCspSecretToken = "testcsp"; + + /* CHOOSE THE INDIVIDUAL's CLOUD NUMBER HERE */ + private static CloudNumber cloudNumber; + + /* CHOOSE THE INDIVIDUAL's CLOUD NAME HERE */ + private static CloudName cloudName; + + + static { + + try { + + System.out.print("Enter Cloud Name: "); + cloudName = CloudName.create(new BufferedReader(new InputStreamReader(System.in)).readLine()); + + if (cloudName == null) { + + System.err.println("Invalid Cloud Name."); + System.exit(0); + } + } catch (IOException ex) { + + throw new RuntimeException(ex.getMessage(), ex); + } + } + + public static void main(String[] args) throws Exception { + + // Step 0: Set up CSP + + CSPInformation cspInformation = new CSPInformationTestCSPOTE(); + + CSP csp = new BasicCSP(cspInformation); + + // Step 1: Check cloudName is in RN + cloudNumber = csp.checkCloudNameInRN(cloudName); + + if(cloudNumber!=null){ + // Step 2: set cspsecret token to null & set RnCspSecretToken as it is required to set phone and email + ((BasicCSPInformation) csp.getCspInformation()).setCspSignaturePrivateKey(null); + ((BasicCSPInformation) csp.getCspInformation()).setRnCspSecretToken(rnCspSecretToken); + + // Step 3: Set phone & email + csp.setPhoneAndEmailInRN(cloudNumber, phone, email); + System.out.println("Set phone & email for cloudNumber: "+cloudNumber.getXri().toString()); + + // Step 4: Verify phone & email is set for correct cloudNumber + CloudNumber[] existingCloudNumbers = csp.checkPhoneAndEmailAvailableInRN(phone, email); + Set existingCloudNumbersSet = new HashSet(); + existingCloudNumbersSet.addAll(Arrays.asList(existingCloudNumbers)); + + System.out.println("Cloud Numbers for phone & email is "+existingCloudNumbersSet.size()); + if(existingCloudNumbersSet.size()==1 && existingCloudNumbersSet.iterator().next().equals(cloudNumber)){ + System.out.println("Verified phone & email for cloudNUmber: "+cloudNumber.getXri().toString()); + } + + // Step 5: Update with new phone + csp.updatePhoneInRN(cloudNumber, newPhone, phone); + + // Step 6: Update with new email + csp.updatePhoneInRN(cloudNumber, newEmail, email); + + // Step 7: Verify new phone & new email are updated for cloudNumber + existingCloudNumbers = csp.checkPhoneAndEmailAvailableInRN(newPhone, newEmail); + existingCloudNumbersSet = new HashSet(); + existingCloudNumbersSet.addAll(Arrays.asList(existingCloudNumbers)); + existingCloudNumbersSet.removeAll(Collections.singleton(null)); + System.out.println("Cloud Numbers for new phone & email is "+existingCloudNumbersSet.size()); + if(existingCloudNumbersSet.size()==1 && existingCloudNumbersSet.iterator().next().equals(cloudNumber)){ + System.out.println("Updated new phone & new email for cloudNumber: "+cloudNumber.getXri().toString()); + } + }else{ + System.out.println("Cloud Name : "+cloudName+" does not exist"); + } + } +}