From d1f882893a450875b5c48ff1e4dabf4b5b38cf65 Mon Sep 17 00:00:00 2001 From: Barry Beechinor Date: Mon, 21 Jul 2014 11:51:25 -0700 Subject: [PATCH 01/17] Advancing the POM Version to next SNAPSHOT --- pom.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 25066da..f306b4e 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ net.respectnetwork sdk-csp jar - 0.4-SNAPSHOT + 0.5-SNAPSHOT sdk-csp Respect Network SDK for CSPs @@ -31,6 +31,7 @@ UTF-8 github 1.7.5 + 0.6-SNAPSHOT @@ -136,7 +137,7 @@ xdi2 xdi2-client - 0.5-SNAPSHOT + ${xdi2-version} compile From 77a335e9841c0b83376ea325e158c5937067ffc5 Mon Sep 17 00:00:00 2001 From: peacekeeper Date: Fri, 25 Jul 2014 17:45:03 +0200 Subject: [PATCH 02/17] fix for creating statements --- .../java/net/respectnetwork/sdk/csp/BasicCSP.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java b/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java index 57e7cae..1c437ea 100644 --- a/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java +++ b/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java @@ -46,13 +46,16 @@ import xdi2.core.impl.memory.MemoryGraph; import xdi2.core.impl.memory.MemoryGraphFactory; import xdi2.core.io.XDIWriterRegistry; +import xdi2.core.util.GraphUtil; import xdi2.core.util.XDI3Util; import xdi2.core.util.iterators.IteratorArrayMaker; import xdi2.core.util.iterators.MappingCloudNameIterator; import xdi2.core.util.iterators.MappingCloudNumberIterator; import xdi2.core.util.iterators.MappingRelationTargetContextNodeXriIterator; +import xdi2.core.util.iterators.MappingStatementXriIterator; import xdi2.core.util.iterators.NotNullIterator; import xdi2.core.util.iterators.ReadOnlyIterator; +import xdi2.core.util.iterators.SelectingNotImpliedStatementIterator; import xdi2.core.xri3.CloudName; import xdi2.core.xri3.CloudNumber; import xdi2.core.xri3.XDI3Segment; @@ -471,12 +474,13 @@ public void registerCloudNameInCloud(CloudName cloudName, CloudNumber cloudNumbe cloudName.getXri())); Graph publicLinkContractGraph = MemoryGraphFactory.getInstance().openGraph(); + GraphUtil.setOwnerXri(publicLinkContractGraph, cloudNumber.getXri()); PublicLinkContract publicLinkContract = PublicLinkContract.findPublicLinkContract(publicLinkContractGraph, true); publicLinkContract.setPermissionTargetStatement(XDILinkContractConstants.XRI_S_GET, XDI3Statement.fromRelationComponents(cloudName.getXri(), XDIDictionaryConstants.XRI_S_REF, cloudNumber.getXri())); - for (Statement publicLinkContractStatement : publicLinkContractGraph.getAllStatements()) { + for (XDI3Statement publicLinkContractStatementXri : new MappingStatementXriIterator(new SelectingNotImpliedStatementIterator(publicLinkContractGraph.getAllStatements()))) { - targetStatementsSet.add(publicLinkContractStatement.getXri()); + targetStatementsSet.add(publicLinkContractStatementXri); } message.createSetOperation(targetStatementsSet.iterator()); @@ -626,9 +630,9 @@ public void setRespectNetworkMembershipInRN(CloudNumber cloudNumber, Date expira XdiInnerRoot expirationTimeXdiInnerRoot = XdiLocalRoot.findLocalRoot(expirationTimeGraph).getInnerRoot(this.getCspInformation().getRnCloudNumber().getXri(), XRI_S_MEMBER, true); expirationTimeXdiInnerRoot.getContextNode().setStatement(XDI3Statement.fromLiteralComponents(XDI3Util.concatXris(cloudNumber.getXri(), XRI_S_AS_MEMBER_EXPIRATION_TIME, XDIConstants.XRI_S_VALUE), Timestamps.timestampToString(expirationTime))); - for (Statement expirationTimeStatement : expirationTimeGraph.getAllStatements()) { + for (XDI3Statement expirationTimeStatementXri : new MappingStatementXriIterator(new SelectingNotImpliedStatementIterator(expirationTimeGraph.getAllStatements()))) { - targetStatements.add(expirationTimeStatement.getXri()); + targetStatements.add(expirationTimeStatementXri); } } From b3ea8ffec3e50a9bd0ccdffc0ca8ef3d355c074f Mon Sep 17 00:00:00 2001 From: peacekeeper Date: Fri, 25 Jul 2014 17:45:17 +0200 Subject: [PATCH 03/17] using xdi2 0.6-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 25066da..b8d5b99 100644 --- a/pom.xml +++ b/pom.xml @@ -136,7 +136,7 @@ xdi2 xdi2-client - 0.5-SNAPSHOT + 0.6-SNAPSHOT compile From ec026d20e4877ab36881b649d4dc48c7d2cec316 Mon Sep 17 00:00:00 2001 From: peacekeeper Date: Fri, 25 Jul 2014 18:00:05 +0200 Subject: [PATCH 04/17] advancing to 0.5-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b8d5b99..a097fd4 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ net.respectnetwork sdk-csp jar - 0.4-SNAPSHOT + 0.5-SNAPSHOT sdk-csp Respect Network SDK for CSPs From 5f758922d407fb46d5ce5ca61d462fb66b2dc2d4 Mon Sep 17 00:00:00 2001 From: Barry Beechinor Date: Fri, 25 Jul 2014 16:02:09 -0700 Subject: [PATCH 05/17] Updating CSPInformationTestCSPOTE to point to RN Staging and NS Staging --- .../sdk/csp/example/CSPInformationTestCSPOTE.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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..946bd9c 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-stage.respectnetwork.net/registration", XDI3Segment.create("([+]!:uuid:ca51aeb9-e09e-4305-89d7-87a944a1e1fa/#registrar)$do"), null, XDIDiscoveryClient.NEUSTAR_OTE_DISCOVERY_CLIENT From 1309247bfe02ffec05516461e2956ebdc1db4ed3 Mon Sep 17 00:00:00 2001 From: rsr2006 Date: Mon, 28 Jul 2014 21:10:14 -0500 Subject: [PATCH 06/17] RND-159:CreateExample Class for setPhoneAndEmail InCloud in DEV. --- .../example/ExampleSetPhoneAndEmailInRN.java | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 src/main/java/net/respectnetwork/sdk/csp/example/ExampleSetPhoneAndEmailInRN.java 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"); + } + } +} From 38d08ec2c7b753d832c149dc98176778140c68fe Mon Sep 17 00:00:00 2001 From: rsr2006 Date: Wed, 30 Jul 2014 08:37:10 -0500 Subject: [PATCH 07/17] RND-161:Create updatePhoneInRN in SDK-CSP RND-162:Create updateEmailInRN in SDK-CSP --- .../net/respectnetwork/sdk/csp/BasicCSP.java | 65 ++++++++++ .../java/net/respectnetwork/sdk/csp/CSP.java | 16 +++ .../csp/example/ExampleUpdatePhoneInRN.java | 111 ++++++++++++++++++ 3 files changed, 192 insertions(+) create mode 100644 src/main/java/net/respectnetwork/sdk/csp/example/ExampleUpdatePhoneInRN.java diff --git a/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java b/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java index 1c437ea..5d4b0cc 100644 --- a/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java +++ b/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java @@ -2184,5 +2184,70 @@ private List createSignedBillingXDI3Statements(CloudNumber busine } + @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); + + } + } diff --git a/src/main/java/net/respectnetwork/sdk/csp/CSP.java b/src/main/java/net/respectnetwork/sdk/csp/CSP.java index 805e6e6..1245ac5 100644 --- a/src/main/java/net/respectnetwork/sdk/csp/CSP.java +++ b/src/main/java/net/respectnetwork/sdk/csp/CSP.java @@ -400,6 +400,22 @@ public void registerBusinessNameInCSP(CloudName businessCloudName, CloudNumber b public void registerBusinessNameInCloud(CloudName businessCloudName, CloudNumber businessCloudNumber, CloudNumber contactCloudNumber) throws Xdi2ClientException; + /** + * 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; } 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"); + } + } +} From 9fcfa46cbd7c5716fc0f7d1700f55a1f95598969 Mon Sep 17 00:00:00 2001 From: peacekeeper Date: Thu, 31 Jul 2014 18:52:16 +0200 Subject: [PATCH 08/17] adding CSPInformation for registration-dev --- .../csp/example/CSPInformationTestCSPDev.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/main/java/net/respectnetwork/sdk/csp/example/CSPInformationTestCSPDev.java 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(); + } +} From 65fee9c4c0ddab651fcaf68e6e626c75dac83955 Mon Sep 17 00:00:00 2001 From: rsr2006 Date: Thu, 31 Jul 2014 14:29:34 -0500 Subject: [PATCH 09/17] RND-165:Create CSP-SDK Method getMemberRegistrar RND-166:Create Example Class for getMemberRegistrar --- .../net/respectnetwork/sdk/csp/BasicCSP.java | 33 ++++++++++ .../java/net/respectnetwork/sdk/csp/CSP.java | 9 +++ .../csp/example/ExampleMemberRegistrar.java | 65 +++++++++++++++++++ 3 files changed, 107 insertions(+) create mode 100644 src/main/java/net/respectnetwork/sdk/csp/example/ExampleMemberRegistrar.java diff --git a/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java b/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java index 5d4b0cc..dc025d6 100644 --- a/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java +++ b/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java @@ -2249,5 +2249,38 @@ public void updateEmailInRN(CloudNumber cloudNumber, String verifiedEmail, Strin } + @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(), XDIDictionaryConstants.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(), XDIDictionaryConstants.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; + + } + } diff --git a/src/main/java/net/respectnetwork/sdk/csp/CSP.java b/src/main/java/net/respectnetwork/sdk/csp/CSP.java index 1245ac5..b0e1ad7 100644 --- a/src/main/java/net/respectnetwork/sdk/csp/CSP.java +++ b/src/main/java/net/respectnetwork/sdk/csp/CSP.java @@ -417,5 +417,14 @@ public void registerBusinessNameInCloud(CloudName businessCloudName, CloudNumber * @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; + } 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"); + } + } +} From 43677c338bdea2c13fc326272377a5245b96c286 Mon Sep 17 00:00:00 2001 From: rsr2006 Date: Thu, 31 Jul 2014 23:02:30 -0500 Subject: [PATCH 10/17] RND-165:Create CSP-SDK Method getMemberRegistrar RND-166:Create Example Class for getMemberRegistrar --- src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java b/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java index dc025d6..68e676b 100644 --- a/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java +++ b/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java @@ -91,6 +91,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; @@ -2260,7 +2262,7 @@ public CloudNumber getMemberRegistrar(CloudNumber cloudNumber) throws Xdi2Client Message message = messageCollection.createMessage(); - XDI3Statement targetAddress = XDI3Statement.fromRelationComponents(cloudNumber.getXri(), XDIDictionaryConstants.XRI_S_REGISTRAR, XDIConstants.XRI_S_VARIABLE); + XDI3Statement targetAddress = XDI3Statement.fromRelationComponents(cloudNumber.getXri(),XRI_S_REGISTRAR, XDIConstants.XRI_S_VARIABLE); message.createGetOperation(targetAddress); // send message and read results @@ -2269,7 +2271,7 @@ public CloudNumber getMemberRegistrar(CloudNumber cloudNumber) throws Xdi2Client MessageResult messageResult = this.getXdiClientRNRegistrationService().send(messageEnvelope, null); - Relation relation = messageResult.getGraph().getDeepRelation(cloudNumber.getXri(), XDIDictionaryConstants.XRI_S_REGISTRAR); + Relation relation = messageResult.getGraph().getDeepRelation(cloudNumber.getXri(), XRI_S_REGISTRAR); CloudNumber cspCloudNumber = null; if (relation != null) { cspCloudNumber = CloudNumber.fromXri(relation.getTargetContextNodeXri()); From 0fee3ca3fe4968388df9c38a5d9b956ca8c7c05b Mon Sep 17 00:00:00 2001 From: Barry Beechinor Date: Fri, 1 Aug 2014 11:52:38 -0700 Subject: [PATCH 11/17] Updating/ Adding TestCSP Information --- .../csp/example/CSPInformationTestCSPDev.java | 30 +++++++++++++++++++ .../csp/example/CSPInformationTestCSPOTE.java | 2 +- .../example/CSPInformationTestCSPStage.java | 30 +++++++++++++++++++ 3 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 src/main/java/net/respectnetwork/sdk/csp/example/CSPInformationTestCSPDev.java create mode 100644 src/main/java/net/respectnetwork/sdk/csp/example/CSPInformationTestCSPStage.java 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 946bd9c..69d8f64 100644 --- a/src/main/java/net/respectnetwork/sdk/csp/example/CSPInformationTestCSPOTE.java +++ b/src/main/java/net/respectnetwork/sdk/csp/example/CSPInformationTestCSPOTE.java @@ -19,7 +19,7 @@ public CSPInformationTestCSPOTE() { "whitelabel123", null, CloudNumber.create("[+]!:uuid:ca51aeb9-e09e-4305-89d7-87a944a1e1fa"), - "https://registration-stage.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(); + } +} From 804b10baf5739aedbe2ebe8461e95819377f9926 Mon Sep 17 00:00:00 2001 From: rsr2006 Date: Mon, 18 Aug 2014 19:11:07 -0500 Subject: [PATCH 12/17] RND-191 Checkin --- .../net/respectnetwork/sdk/csp/BasicCSP.java | 46 ++++++++++++++ .../java/net/respectnetwork/sdk/csp/CSP.java | 19 +++++- .../example/CSPInformationEmmettStage.java | 30 ++++++++++ .../csp/example/ExampleCloudDeleteInCSP.java | 45 ++++++++++++++ .../example/ExampleCloudTransferInCSP.java | 60 +++++++++++++++++++ 5 files changed, 199 insertions(+), 1 deletion(-) create mode 100644 src/main/java/net/respectnetwork/sdk/csp/example/CSPInformationEmmettStage.java create mode 100644 src/main/java/net/respectnetwork/sdk/csp/example/ExampleCloudDeleteInCSP.java create mode 100644 src/main/java/net/respectnetwork/sdk/csp/example/ExampleCloudTransferInCSP.java diff --git a/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java b/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java index 68e676b..db7b094 100644 --- a/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java +++ b/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java @@ -2284,5 +2284,51 @@ public CloudNumber getMemberRegistrar(CloudNumber cloudNumber) throws Xdi2Client } + @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); + } } diff --git a/src/main/java/net/respectnetwork/sdk/csp/CSP.java b/src/main/java/net/respectnetwork/sdk/csp/CSP.java index b0e1ad7..2148a36 100644 --- a/src/main/java/net/respectnetwork/sdk/csp/CSP.java +++ b/src/main/java/net/respectnetwork/sdk/csp/CSP.java @@ -425,6 +425,23 @@ public void registerBusinessNameInCloud(CloudName businessCloudName, CloudNumber * @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; + } 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/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"); + } + + } +} From 71cd6ee6471dd56de7feb61f098536821a1fe604 Mon Sep 17 00:00:00 2001 From: rsr2006 Date: Wed, 20 Aug 2014 19:14:21 -0500 Subject: [PATCH 13/17] RND-193 Checkin --- .../net/respectnetwork/sdk/csp/BasicCSP.java | 61 +++++++++++++++ .../java/net/respectnetwork/sdk/csp/CSP.java | 6 ++ .../example/ExampleChangeMemberRegistrar.java | 74 +++++++++++++++++++ 3 files changed, 141 insertions(+) create mode 100644 src/main/java/net/respectnetwork/sdk/csp/example/ExampleChangeMemberRegistrar.java diff --git a/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java b/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java index db7b094..1047411 100644 --- a/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java +++ b/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java @@ -2331,4 +2331,65 @@ public void deleteCloudInCSP(CloudNumber cloudNumber, String secretToken) throws 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 2148a36..2e43d02 100644 --- a/src/main/java/net/respectnetwork/sdk/csp/CSP.java +++ b/src/main/java/net/respectnetwork/sdk/csp/CSP.java @@ -443,5 +443,11 @@ public void registerBusinessNameInCloud(CloudName businessCloudName, CloudNumber */ 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; } 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"); + } + + } +} From 7c09d8f8d7d9d6013a2b396e35067d47c0465f72 Mon Sep 17 00:00:00 2001 From: kvats Date: Fri, 29 May 2015 15:29:05 +0530 Subject: [PATCH 14/17] Update BasicCSP.java Added method to check cloud name in CSP cloud. Code for new link contract while setting up the guardian ship in dependents cloud. By this link contract parent personal cloud can access everything from dependent cloud graph usin its private key. --- .../net/respectnetwork/sdk/csp/BasicCSP.java | 80 ++++++++++++++++--- 1 file changed, 70 insertions(+), 10 deletions(-) diff --git a/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java b/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java index 1c437ea..c972a2c 100644 --- a/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java +++ b/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java @@ -1220,16 +1220,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 +2208,41 @@ 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; + } } From d69c817f18aeb2bbdf0d1e4ba7b0c218f204d632 Mon Sep 17 00:00:00 2001 From: kvats Date: Fri, 29 May 2015 15:31:19 +0530 Subject: [PATCH 15/17] Update CSP.java Added method to check cloud name in CSP cloud. --- src/main/java/net/respectnetwork/sdk/csp/CSP.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/respectnetwork/sdk/csp/CSP.java b/src/main/java/net/respectnetwork/sdk/csp/CSP.java index 805e6e6..fc78d9b 100644 --- a/src/main/java/net/respectnetwork/sdk/csp/CSP.java +++ b/src/main/java/net/respectnetwork/sdk/csp/CSP.java @@ -399,7 +399,12 @@ public void registerBusinessNameInCSP(CloudName businessCloudName, CloudNumber b */ public void registerBusinessNameInCloud(CloudName businessCloudName, CloudNumber businessCloudNumber, CloudNumber contactCloudNumber) 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; } From d5b513c598e394897f8af0334b387b87c9567ba9 Mon Sep 17 00:00:00 2001 From: kvats Date: Fri, 29 May 2015 20:10:19 +0530 Subject: [PATCH 16/17] Update BasicCSP.java Missed couple of import statements. --- src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java b/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java index c972a2c..9bfadac 100644 --- a/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java +++ b/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java @@ -37,6 +37,8 @@ import xdi2.core.constants.XDILinkContractConstants; 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; From d6ea241367a525cf5a960c3ffbe5d4b47aede6ea Mon Sep 17 00:00:00 2001 From: kvats Date: Fri, 29 May 2015 20:35:12 +0530 Subject: [PATCH 17/17] Update BasicCSP.java --- src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java b/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java index 9bfadac..d4e3b99 100644 --- a/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java +++ b/src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java @@ -35,6 +35,7 @@ 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;