=lion
=danb
=================================================
Group D: "Observers"
=les
=hananya
=hubert
=================================================
CODE FOR GROUP A - FIRST PART THAT CREATES LINK CONTRACT
import java.net.URL;
import xdi2.client.http.XDIHttpClient;
import xdi2.core.Graph;
import xdi2.core.constants.XDILinkContractConstants;
import xdi2.core.features.linkcontracts.instance.GenericLinkContract;
import xdi2.core.features.linkcontracts.instance.RootLinkContract;
import xdi2.core.impl.memory.MemoryGraphFactory;
import xdi2.core.syntax.CloudName;
import xdi2.core.syntax.CloudNumber;
import xdi2.core.syntax.XDIAddress;
import xdi2.core.util.XDIAddressUtil;
import xdi2.discovery.XDIDiscoveryClient;
import xdi2.discovery.XDIDiscoveryResult;
import xdi2.messaging.Message;
import xdi2.messaging.MessageEnvelope;
public class GroupA {
public static void main(String[] args) throws Exception {
// let's find the cloud of =markus (AA) and =pakkanaughty (RA)
CloudName cloudNameAA = CloudName.create("=markus");
XDIDiscoveryResult resultAA =
XDIDiscoveryClient.DEFAULT_DISCOVERY_CLIENT.discoverFromRegistry(cloudNameAA.getXDIAddress(),
null);
CloudNumber cloudNumberAA = resultAA.getCloudNumber();
URL urlAA = resultAA.getXdiEndpointUrl();
CloudName cloudNameRA = CloudName.create("=boyle");
XDIDiscoveryResult resultRA =
XDIDiscoveryClient.DEFAULT_DISCOVERY_CLIENT.discoverFromRegistry(cloudNameRA.getXDIAddress(),
null);
CloudNumber cloudNumberRA = resultRA.getCloudNumber();
URL urlRA = resultRA.getXdiEndpointUrl();
// prepare link contract to write into my cloud
// it allows $set operations on [=]!:uuid:1111[<#inbox>]
Graph tempGraph = MemoryGraphFactory.getInstance().openGraph();
GenericLinkContract linkContract = GenericLinkContract.findGenericLinkContract(
tempGraph,
cloudNumberAA.getXDIAddress(),
cloudNumberRA.getXDIAddress(),
XDIAddress.create("#inbox"),
true);
linkContract.setPermissionTargetXDIAddress(
XDILinkContractConstants.XDI_ADD_SET,
XDIAddressUtil.concatXDIAddresses(cloudNumberAA.getXDIAddress(), XDIAddress.create("[<#inbox>]")));
// normally there would be a policy on the link contract that requires a valid signature
// but we will leave this out (or do it later), since it is not supported by all CSPs
System.out.println("We are sending the following XDI data to my cloud:");
System.out.println(tempGraph.toString("XDI DISPLAY", null));
// send the XDI data my cloud
MessageEnvelope messageEnvelope = new MessageEnvelope();
Message message = messageEnvelope.createMessage(cloudNumberAA.getXDIAddress());
message.setToPeerRootXDIArc(cloudNumberAA.getPeerRootXDIArc());
message.setLinkContract(RootLinkContract.class);
message.setSecretToken("test11!!");
message.createSetOperation(tempGraph);
new XDIHttpClient(urlAA).send(messageEnvelope, null);
System.out.println("Success");
}
}
CODE FOR GROUP A - SECOND PART THAT READS INBOX
import java.net.URL;
import xdi2.client.http.XDIHttpClient;
import xdi2.core.Literal;
import xdi2.core.features.linkcontracts.instance.RootLinkContract;
import xdi2.core.syntax.CloudName;
import xdi2.core.syntax.CloudNumber;
import xdi2.core.syntax.XDIAddress;
import xdi2.core.util.XDIAddressUtil;
import xdi2.discovery.XDIDiscoveryClient;
import xdi2.discovery.XDIDiscoveryResult;
import xdi2.messaging.Message;
import xdi2.messaging.MessageEnvelope;
import xdi2.messaging.MessageResult;
public class GroupAPart2 {
public static void main(String[] args) throws Exception {
// let's find the cloud of =markus (AA)
CloudName cloudNameAA = CloudName.create("=markus");
XDIDiscoveryResult resultAA =
XDIDiscoveryClient.DEFAULT_DISCOVERY_CLIENT.discoverFromRegistry(cloudNameAA.getXDIAddress(),
null);
CloudNumber cloudNumberAA = resultAA.getCloudNumber();
URL urlAA = resultAA.getXdiEndpointUrl();
// send the XDI data my cloud
MessageEnvelope messageEnvelope = new MessageEnvelope();
Message message = messageEnvelope.createMessage(cloudNumberAA.getXDIAddress());
message.setToPeerRootXDIArc(cloudNumberAA.getPeerRootXDIArc());
message.setLinkContract(RootLinkContract.class);
message.setSecretToken("test11!!");
message.createGetOperation(XDIAddressUtil.concatXDIAddresses(cloudNumberAA.getXDIAddress(),
XDIAddress.create("[<#inbox>]")));
MessageResult messageResult = new XDIHttpClient(urlAA).send(messageEnvelope, null);
System.out.println(messageResult.getGraph().toString("XDI DISPLAY", null));
for (Literal literal : messageResult.getGraph().getRootContextNode().getAllLiterals()) {
System.out.println(literal.getLiteralData());
}
}
}
CODE FOR GROUP B
import java.net.URL;
import xdi2.client.http.XDIHttpClient;
import xdi2.core.Graph;
import xdi2.core.features.linkcontracts.instance.GenericLinkContract;
import xdi2.core.features.nodetypes.XdiAttribute;
import xdi2.core.features.nodetypes.XdiCommonRoot;
import xdi2.core.impl.memory.MemoryGraphFactory;
import xdi2.core.syntax.CloudName;
import xdi2.core.syntax.CloudNumber;
import xdi2.core.syntax.XDIAddress;
import xdi2.discovery.XDIDiscoveryClient;
import xdi2.discovery.XDIDiscoveryResult;
import xdi2.messaging.Message;
import xdi2.messaging.MessageEnvelope;
public class GroupB {
public static void main(String[] args) throws Exception {
// this is what =pakkanaughty would do now.
// let's find the cloud of =lion (AA) and =markus (RA)
CloudName cloudNameAA = CloudName.create("=lion");
XDIDiscoveryResult resultAA =
XDIDiscoveryClient.DEFAULT_DISCOVERY_CLIENT.discoverFromRegistry(cloudNameAA.getXDIAddress(),
null);
CloudNumber cloudNumberAA = resultAA.getCloudNumber();
URL urlAA = resultAA.getXdiEndpointUrl();
CloudName cloudNameRA = CloudName.create("=markus");
XDIDiscoveryResult resultRA =
XDIDiscoveryClient.DEFAULT_DISCOVERY_CLIENT.discoverFromRegistry(cloudNameRA.getXDIAddress(),
null);
CloudNumber cloudNumberRA = resultRA.getCloudNumber();
URL urlRA = resultRA.getXdiEndpointUrl();
// prepare message for =markus' inbox
// the message will be somewhere in [=]!:uuid:1111[<#inbox>]<!:uuid:1234>
Graph tempGraph = MemoryGraphFactory.getInstance().openGraph();
XdiAttribute inboxMessage = XdiCommonRoot.findCommonRoot(tempGraph)
.getXdiEntity(cloudNumberAA.getXDIAddress(), true)
.getXdiAttributeCollection(XDIAddress.create("[<#inbox>]"), true)
.setXdiMemberUnordered(null);
inboxMessage.getXdiValue(true).setLiteralString("[This messages has
been marked as SPAM] Click <here> to enlarge your cloud now!");
System.out.println("We are sending the following XDI data to my cloud:");
System.out.println(tempGraph.toString("XDI DISPLAY", null));
// send the XDI data my cloud
MessageEnvelope messageEnvelope = new MessageEnvelope();
Message message = messageEnvelope.createMessage(cloudNumberRA.getXDIAddress());
message.setToPeerRootXDIArc(cloudNumberAA.getPeerRootXDIArc());
message.setLinkContractXDIAddress(
GenericLinkContract.createGenericLinkContractXDIAddress(
cloudNumberAA.getXDIAddress(),
cloudNumberRA.getXDIAddress(),
XDIAddress.create("#inbox")));
message.createSetOperation(tempGraph);
// normally we would put a signature on a message,
// only works with DanubeClouds CSP
new XDIHttpClient(urlAA).send(messageEnvelope, null);
System.out.println("Success");
}
}
Here's the output of Group B's execution.
We are sending the following XDI data to my cloud:
[=]!:uuid:91f28153-f600-ae24-91f2-8153f600ae24[<#inbox>]<!:uuid:813830ce-f9b9-4787-afaf-3cae0635d199>&/&/"Hello
this is a message from =pakkanaughty to =markus"
Success
MANUAL PROCESS FOR GROUP A PART 1 (CREATE LINK CONTRACT FOR INBOX)
1. Find out out cloud number of both RA and AA (using XDI Discoverer tool)
2. Find out the XDI endpoint URI of AA (using XDI Discoverer tool)
3. Determine address of ROOT link contract:
(<-- AA cloudnumber -->/<-- AA cloudnumber -->)$do
3. Determine inbox link contract:
(<-- AA cloudnumber -->/<-- RA cloudnumber -->)#inbox$do/$set/<-- AA cloudnumber -->[<#inbox>]
(normally we would have a policy on the link contract to require a valid signature from the RA, but not all CSPs support it)
4. Send XDI message (using XDI Messenger tool):
<-- AA cloudnumber -->[$msg]!1/$is()/(<-- AA cloudnumber -->)
<-- AA cloudnumber -->[$msg]!1/$do/<-- address of ROOT link contract -->
<-- AA cloudnumber -->[$msg]!1<$secret><$token>&/&/"<-- AA password -->"
(<-- AA cloudnumber -->[$msg]!1$do/$set)<-- inbox link contract -->
MANUAL PROCESS FOR GROUP A PART 2 (VIEW INBOX)
1. Find out out cloud number of AA (using XDI Discoverer tool)
2. Find out the XDI endpoint URI of AA (using XDI Discoverer tool)
3. Determine address of ROOT link contract:
(<-- AA cloudnumber -->/<-- AA cloudnumber -->)$do
4. Send XDI message (using XDI Messenger tool):
<-- AA cloudnumber -->[$msg]!1/$is()/(<-- AA cloudnumber -->)
<-- AA cloudnumber -->[$msg]!1/$do/<-- address of ROOT link contract -->
<-- AA cloudnumber -->[$msg]!1<$secret><$token>&/&/"<-- AA password -->""
<-- AA cloudnumber -->[$msg]!1$do/$get/<-- AA cloudnumber -->[<#inbox>]
MANUAL PROCESS FOR GROUP B (SEND MESSAGE TO INBOX)
1. Find out out cloud number of both RA and AA (using XDI Discoverer tool)
2. Find out the XDI endpoint URI of AA (using XDI Discoverer tool)
3. Determine address of inbox link contract:
(<-- AA cloudnumber -->/<-- RA cloudnumber -->)#inbox$do
4. Send XDI message (using XDI Messenger tool):
<-- RA cloudnumber -->[$msg]!1/$is()/(<-- AA cloudnumber -->)
<-- RA cloudnumber -->[$msg]!1/$do/<-- address of link contract -->
(<--
RA cloudnumber -->[$msg]!1$do/$set)<-- AA cloudnumber
-->[<#inbox>]<!:uuid:34562834567384>&/&/"message
text here"
normally there would be signature on the message if the link contract policy requires it:
<-- RA cloudnumber -->[$msg]!1<$sig>&/&/"...."
VIEW AND MANAGE LINK CONTRACTS IN THE DASHBOARD: