Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,11 @@
<groupId>net.respectnetwork</groupId>
<artifactId>sdk-csp</artifactId>
<packaging>jar</packaging>
<<<<<<< HEAD
<version>0.5-SNAPSHOT</version>
=======
<version>0.4.3</version>
>>>>>>> d5b513c598e394897f8af0334b387b87c9567ba9
<name>sdk-csp</name>
<description>Respect Network SDK for CSPs</description>

Expand All @@ -31,6 +35,7 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<github.global.server>github</github.global.server>
<org.slf4j-version>1.7.5</org.slf4j-version>
<xdi2-version>0.6-SNAPSHOT</xdi2-version>
</properties>

<build>
Expand Down Expand Up @@ -136,7 +141,11 @@
<dependency>
<groupId>xdi2</groupId>
<artifactId>xdi2-client</artifactId>
<<<<<<< HEAD
<version>${xdi2-version}</version>
=======
<version>0.6</version>
>>>>>>> d5b513c598e394897f8af0334b387b87c9567ba9
<scope>compile</scope>
</dependency>

Expand Down
290 changes: 280 additions & 10 deletions src/main/java/net/respectnetwork/sdk/csp/BasicCSP.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -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());

}

Expand Down Expand Up @@ -2183,6 +2213,246 @@ private List<XDI3Statement> 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<XDI3Statement> targetStatementsSet = new ArrayList<XDI3Statement> ();

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<XDI3Statement> targetStatementsSet = new ArrayList<XDI3Statement> ();

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<XDI3Statement> targetStatementsSet = new ArrayList<XDI3Statement> ();
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<XDI3Statement> targetStatementsDel = new ArrayList<XDI3Statement> ();
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);

}
}
Loading