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");
+ }
+ }
+}