Skip to content

Commit fef23b3

Browse files
committed
Credential exchange is no user initiated. We also do some nudging to send it when an appropriate encounter was created.
1 parent 272f062 commit fef23b3

13 files changed

Lines changed: 138 additions & 97 deletions

libs/ASAPJava.jar

482 Bytes
Binary file not shown.

libs/SharkPKI.jar

79 Bytes
Binary file not shown.

libs/SharkPeer.jar

2.04 KB
Binary file not shown.

src/net/sharksystem/cmdline/sharkmessengerUI/MessageReceivedListener.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,14 @@ public MessageReceivedListener(SharkMessengerApp sharkMessengerApp) {
1515
public void sharkMessagesReceived(CharSequence uri) {
1616
try {
1717
SharkMessageList messages = this.sharkMessengerApp.getSharkMessengerComponent().getChannel(uri).getMessages();
18-
System.out.println("TODO in MessageReceivedListener: show messages");
19-
//cliModel.observer.displayMessages(messages);
18+
StringBuilder sb = new StringBuilder();
19+
sb.append(messages.size());
20+
sb.append("messages received in channel ");
21+
sb.append(uri);
22+
this.sharkMessengerApp.tellUI(sb.toString());
2023

2124
} catch (SharkMessengerException | IOException e) {
22-
System.out.println("TODO: exception in MessageReceivedListener:" + e.getLocalizedMessage());
23-
24-
// cliModel.observer.onChannelDisappeared(uri.toString());
25+
this.sharkMessengerApp.tellUIError("exception when receiving messages:" + e.getLocalizedMessage());
2526
}
2627
}
2728
}

src/net/sharksystem/cmdline/sharkmessengerUI/ProductionUI.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ public static void main(String[] args) throws SharkException, IOException {
123123
// TCP connection management
124124
smUI.addCommand(new UICommandOpenTCP(sharkMessengerApp, smUI, "openTCP", false));
125125
smUI.addCommand(new UICommandConnectTCP(sharkMessengerApp, smUI, "connectTCP", false));
126-
smUI.addCommand(new UICommandCloseTCP(sharkMessengerApp, smUI, "closeTCPPort", false));
126+
smUI.addCommand(new UICommandCloseTCP(sharkMessengerApp, smUI, "closeTCP", false));
127127
smUI.addCommand(new UICommandShowOpenTCPPorts(sharkMessengerApp, smUI, "showOpenTCPPorts", false));
128128

129129
// encounter control
@@ -133,6 +133,7 @@ public static void main(String[] args) throws SharkException, IOException {
133133
smUI.addCommand(new UICommandShowCertificatesByIssuer(sharkMessengerApp, smUI, "certByIssuer", true));
134134
smUI.addCommand(new UICommandShowCertificatesBySubject(sharkMessengerApp, smUI, "certBySubject", true));
135135
smUI.addCommand(new UICommandShowPendingCredentials(sharkMessengerApp, smUI, "showCredentials", true));
136+
smUI.addCommand(new UICommandSendCredentialMessage(sharkMessengerApp, smUI, "sendCredential", true));
136137
smUI.addCommand(new UICommandAcceptCredential(sharkMessengerApp, smUI, "acceptCredential", true));
137138
smUI.addCommand(new UICommandRefuseCredential(sharkMessengerApp, smUI, "refuseCredential", true));
138139

src/net/sharksystem/cmdline/sharkmessengerUI/SharkMessengerApp.java

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,12 @@
22

33
import net.sharksystem.SharkException;
44
import net.sharksystem.SharkPeer;
5+
import net.sharksystem.SharkPeerEncounterChangedListener;
56
import net.sharksystem.SharkPeerFS;
67
import net.sharksystem.asap.*;
78
import net.sharksystem.asap.apps.TCPServerSocketAcceptor;
9+
import net.sharksystem.asap.pki.ASAPCertificate;
10+
import net.sharksystem.asap.utils.DateTimeHelper;
811
import net.sharksystem.fs.ExtraData;
912
import net.sharksystem.fs.FSUtils;
1013
import net.sharksystem.hub.HubConnectionManager;
@@ -27,7 +30,7 @@
2730
* Proposed and suggested pattern for Shark app. Implement a central entity (could even be a singleton)
2831
* that provides access to any component that is part of this application
2932
*/
30-
public class SharkMessengerApp {
33+
public class SharkMessengerApp implements SharkPeerEncounterChangedListener {
3134
private final SharkPeerFS sharkPeerFS;
3235

3336
//private static final CharSequence ROOTFOLDER = "sharkMessengerDataStorage";
@@ -79,9 +82,13 @@ public SharkMessengerApp(String peerName, ExtraData settings) throws SharkExcept
7982
//System.out.println("Fill PKI with example data - for testing purposes");
8083
//HelperPKITests.fillWithExampleData(this.pkiComponent);
8184

85+
// get informed about encounter changes
86+
this.sharkPeerFS.addSharkPeerEncounterChangedListener(this);
87+
8288
//////////////////////// setup hub connection management
8389
// TODO: that's still a design flaw. We need something that extracts a connection handler from a peer. Do we?
8490
ASAPPeer asapPeer = this.sharkPeerFS.getASAPPeer();
91+
8592
ASAPConnectionHandler asapHandler = (ASAPConnectionHandler) asapPeer;
8693
// this code runs on service side - this peer should be a connection handler
8794
if (asapPeer instanceof ASAPConnectionHandler) { // TODO: aaaaargs
@@ -262,6 +269,46 @@ public void acceptPendingCredentialMessageOnIndex(int index) throws ASAPSecurity
262269
this.actionOnPendingCredentialMessageOnIndex(index, true);
263270
}
264271

272+
/////////////////////////////////////////////////////////////////////////////////////////////
273+
// environment changed handling //
274+
/////////////////////////////////////////////////////////////////////////////////////////////
275+
276+
@Override
277+
public void encounterStarted(CharSequence peerID) {
278+
this.tellUI("\nnew encounter: " + peerID);
279+
280+
// check if better ask for a (fresh) certificate?
281+
try {
282+
try {
283+
ASAPCertificate certificateByIssuerAndSubject =
284+
this.getSharkPKIComponent().
285+
getCertificateByIssuerAndSubject(peerID, this.getSharkPeer().getPeerID());
286+
287+
;
288+
StringBuilder sb = new StringBuilder();
289+
sb.append("\nYou have an encounter with peer ");
290+
sb.append(peerID);
291+
sb.append(". It issued a certificate for you that runs out ");
292+
sb.append(DateTimeHelper.
293+
long2DateString(certificateByIssuerAndSubject.getValidUntil().getTimeInMillis()));
294+
this.tellUI(sb.toString());
295+
}
296+
catch(ASAPSecurityException ase) {
297+
StringBuilder sb = new StringBuilder();
298+
sb.append("\nPeer ");
299+
sb.append(peerID);
300+
sb.append(" has not yet issued a certificate for you. You are connected now. A good time to ask for one?");
301+
this.tellUI(sb.toString());
302+
}
303+
} catch (SharkException e) {
304+
this.tellUIError("unexpected problems when dealing with present certificates: " + e.getLocalizedMessage());
305+
}
306+
}
307+
308+
@Override
309+
public void encounterTerminated(CharSequence peerID) {
310+
this.tellUI("\nterminated encounter: " + peerID);
311+
}
265312
/////////////////////////////////////////////////////////////////////////////////////////////
266313
// communicate with UI //
267314
/////////////////////////////////////////////////////////////////////////////////////////////
@@ -278,4 +325,5 @@ public void tellUI(String message) {
278325
public void tellUIError(String message) {
279326
this.errStream.println(message);
280327
}
328+
281329
}

src/net/sharksystem/cmdline/sharkmessengerUI/commands/encounter/UICommandShowEncounter.java

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,32 +3,20 @@
33
import net.sharksystem.asap.ASAPEncounterManagerAdmin;
44
import net.sharksystem.cmdline.sharkmessengerUI.SharkMessengerApp;
55
import net.sharksystem.cmdline.sharkmessengerUI.SharkMessengerUI;
6-
import net.sharksystem.cmdline.sharkmessengerUI.UICommand;
7-
import net.sharksystem.cmdline.sharkmessengerUI.commandarguments.UICommandQuestionnaire;
6+
import net.sharksystem.cmdline.sharkmessengerUI.commands.helper.AbstractCommandNoParameter;
87

98
import java.util.Iterator;
109
import java.util.List;
1110

12-
public class UICommandShowEncounter extends UICommand {
11+
public class UICommandShowEncounter extends AbstractCommandNoParameter {
1312
public UICommandShowEncounter(SharkMessengerApp sharkMessengerApp, SharkMessengerUI sharkMessengerUI,
1413
String identifier, boolean rememberCommand) {
1514
super(sharkMessengerApp, sharkMessengerUI, identifier, rememberCommand);
1615
}
1716

18-
@Override
19-
protected boolean handleArguments(List<String> arguments) {
20-
return true;
21-
}
22-
23-
@Override
24-
protected UICommandQuestionnaire specifyCommandStructure() {
25-
return null;
26-
}
27-
2817
@Override
2918
protected void execute() throws Exception {
3019
ASAPEncounterManagerAdmin encounterManagerAdmin = this.getSharkMessengerApp().getEncounterManagerAdmin();
31-
3220
Iterator<CharSequence> connectPeersIter = encounterManagerAdmin.getConnectedPeerIDs().iterator();
3321

3422
if(connectPeersIter == null || !connectPeersIter.hasNext()) {
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package net.sharksystem.cmdline.sharkmessengerUI.commands.helper;
2+
3+
import net.sharksystem.cmdline.sharkmessengerUI.SharkMessengerApp;
4+
import net.sharksystem.cmdline.sharkmessengerUI.SharkMessengerUI;
5+
import net.sharksystem.cmdline.sharkmessengerUI.UICommand;
6+
import net.sharksystem.cmdline.sharkmessengerUI.commandarguments.UICommandIntegerArgument;
7+
import net.sharksystem.cmdline.sharkmessengerUI.commandarguments.UICommandQuestionnaire;
8+
import net.sharksystem.cmdline.sharkmessengerUI.commandarguments.UICommandStringArgument;
9+
10+
import java.util.List;
11+
12+
public abstract class AbstractCommandWithSingleString extends UICommand {
13+
private UICommandStringArgument stringArgument;
14+
15+
public AbstractCommandWithSingleString(SharkMessengerApp sharkMessengerApp, SharkMessengerUI sharkMessengerUI,
16+
String identifier, boolean rememberCommand) {
17+
super(sharkMessengerApp, sharkMessengerUI, identifier, rememberCommand);
18+
19+
this.stringArgument = new UICommandStringArgument(sharkMessengerApp);
20+
}
21+
22+
@Override
23+
protected boolean handleArguments(List<String> arguments) {
24+
if (arguments.size() < 1) {
25+
this.getSharkMessengerApp().tellUI("string argument required");
26+
return false;
27+
} else {
28+
boolean isParsable = this.stringArgument.tryParse(arguments.get(0));
29+
if (!isParsable) {
30+
System.err.println("failed to parse string value" + arguments.get(0));
31+
}
32+
return isParsable;
33+
}
34+
}
35+
36+
protected String getStringArgument() {
37+
return this.stringArgument.getValue();
38+
}
39+
40+
@Override
41+
protected UICommandQuestionnaire specifyCommandStructure() {
42+
// TODO Auto-generated method stub
43+
throw new UnsupportedOperationException("Unimplemented method 'specifyCommandStructure'");
44+
}
45+
}

src/net/sharksystem/cmdline/sharkmessengerUI/commands/pki/UICommandCreateCredentialMessage.java

Lines changed: 0 additions & 40 deletions
This file was deleted.
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package net.sharksystem.cmdline.sharkmessengerUI.commands.pki;
2+
3+
import net.sharksystem.cmdline.sharkmessengerUI.SharkMessengerApp;
4+
import net.sharksystem.cmdline.sharkmessengerUI.SharkMessengerUI;
5+
import net.sharksystem.cmdline.sharkmessengerUI.commands.helper.AbstractCommandWithSingleString;
6+
7+
public class UICommandSendCredentialMessage extends AbstractCommandWithSingleString {
8+
public UICommandSendCredentialMessage(SharkMessengerApp sharkMessengerApp, SharkMessengerUI sharkMessengerUI,
9+
String identifier, boolean rememberCommand) {
10+
super(sharkMessengerApp, sharkMessengerUI, identifier, rememberCommand);
11+
}
12+
13+
@Override
14+
protected void execute() throws Exception {
15+
String peerID = this.getStringArgument();
16+
this.getSharkMessengerApp().tellUI("going to send credential message to peer " + peerID);
17+
this.getSharkMessengerApp().getSharkPKIComponent().sendOnlineCredentialMessage(peerID);
18+
}
19+
20+
@Override
21+
public String getDescription() {
22+
StringBuilder sb = new StringBuilder();
23+
sb.append("Send a credential message to a specific peer to ask for a certificate.");
24+
return sb.toString();
25+
}
26+
}

0 commit comments

Comments
 (0)