aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/eu/siacs/conversations/entities
diff options
context:
space:
mode:
authoriNPUTmice <daniel@gultsch.de>2014-11-16 00:20:20 +0100
committeriNPUTmice <daniel@gultsch.de>2014-11-16 00:20:20 +0100
commit88c3537b6869996098da25954985fcb0c6971635 (patch)
tree07e407896b951de710ec9027468d98022ae40241 /src/main/java/eu/siacs/conversations/entities
parent0fb1772f18e71755ce72a97f18ea2c28cc771aba (diff)
parse otr-fingerprint in qr codes and nfc. include otr fingerprint in shareable uri where ever possible
Diffstat (limited to 'src/main/java/eu/siacs/conversations/entities')
-rw-r--r--src/main/java/eu/siacs/conversations/entities/Account.java45
-rw-r--r--src/main/java/eu/siacs/conversations/entities/Contact.java35
-rw-r--r--src/main/java/eu/siacs/conversations/entities/Conversation.java6
3 files changed, 50 insertions, 36 deletions
diff --git a/src/main/java/eu/siacs/conversations/entities/Account.java b/src/main/java/eu/siacs/conversations/entities/Account.java
index 10f2940c..1d0a025f 100644
--- a/src/main/java/eu/siacs/conversations/entities/Account.java
+++ b/src/main/java/eu/siacs/conversations/entities/Account.java
@@ -280,10 +280,11 @@ public class Account extends AbstractEntity {
return values;
}
- public OtrEngine getOtrEngine(XmppConnectionService context) {
- if (otrEngine == null) {
- otrEngine = new OtrEngine(context, this);
- }
+ public void initOtrEngine(XmppConnectionService context) {
+ this.otrEngine = new OtrEngine(context, this);
+ }
+
+ public OtrEngine getOtrEngine() {
return this.otrEngine;
}
@@ -298,23 +299,21 @@ public class Account extends AbstractEntity {
public String getOtrFingerprint() {
if (this.otrFingerprint == null) {
try {
- DSAPublicKey pubkey = (DSAPublicKey) this.otrEngine
- .getPublicKey();
- if (pubkey == null) {
+ if (this.otrEngine == null) {
return null;
}
- StringBuilder builder = new StringBuilder(
- new OtrCryptoEngineImpl().getFingerprint(pubkey));
- builder.insert(8, " ");
- builder.insert(17, " ");
- builder.insert(26, " ");
- builder.insert(35, " ");
- this.otrFingerprint = builder.toString();
+ DSAPublicKey publicKey = (DSAPublicKey) this.otrEngine.getPublicKey();
+ if (publicKey == null) {
+ return null;
+ }
+ this.otrFingerprint = new OtrCryptoEngineImpl().getFingerprint(publicKey);
+ return this.otrFingerprint;
} catch (final OtrCryptoException ignored) {
-
+ return null;
}
+ } else {
+ return this.otrFingerprint;
}
- return this.otrFingerprint;
}
public String getRosterVersion() {
@@ -329,11 +328,6 @@ public class Account extends AbstractEntity {
this.rosterVersion = version;
}
- public String getOtrFingerprint(XmppConnectionService service) {
- this.getOtrEngine(service);
- return this.getOtrFingerprint();
- }
-
public void updatePresence(String resource, int status) {
this.presences.updatePresence(resource, status);
}
@@ -411,4 +405,13 @@ public class Account extends AbstractEntity {
public boolean inGracePeriod() {
return SystemClock.elapsedRealtime() < this.mEndGracePeriod;
}
+
+ public String getShareableUri() {
+ String fingerprint = this.getOtrFingerprint();
+ if (fingerprint != null) {
+ return "xmpp:" + this.getJid().toBareJid().toString() + "?otr-fingerprint="+fingerprint;
+ } else {
+ return "xmpp:" + this.getJid().toBareJid().toString();
+ }
+ }
}
diff --git a/src/main/java/eu/siacs/conversations/entities/Contact.java b/src/main/java/eu/siacs/conversations/entities/Contact.java
index 9a827f85..32e4601d 100644
--- a/src/main/java/eu/siacs/conversations/entities/Contact.java
+++ b/src/main/java/eu/siacs/conversations/entities/Contact.java
@@ -7,6 +7,7 @@ import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
+import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
@@ -206,24 +207,26 @@ public class Contact implements ListItem {
return systemAccount;
}
- public Set<String> getOtrFingerprints() {
- Set<String> set = new HashSet<>();
+ public ArrayList<String> getOtrFingerprints() {
+ ArrayList<String> fingerprints = new ArrayList<String>();
try {
if (this.keys.has("otr_fingerprints")) {
- JSONArray fingerprints = this.keys
+ JSONArray prints = this.keys
.getJSONArray("otr_fingerprints");
- for (int i = 0; i < fingerprints.length(); ++i) {
- set.add(fingerprints.getString(i));
+ for (int i = 0; i < prints.length(); ++i) {
+ fingerprints.add(prints.getString(i));
}
}
- } catch (JSONException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
+ } catch (final JSONException ignored) {
+
}
- return set;
+ return fingerprints;
}
- public void addOtrFingerprint(String print) {
+ public boolean addOtrFingerprint(String print) {
+ if (getOtrFingerprints().contains(print)) {
+ return false;
+ }
try {
JSONArray fingerprints;
if (!this.keys.has("otr_fingerprints")) {
@@ -234,8 +237,9 @@ public class Contact implements ListItem {
}
fingerprints.put(print);
this.keys.put("otr_fingerprints", fingerprints);
+ return true;
} catch (final JSONException ignored) {
-
+ return false;
}
}
@@ -396,4 +400,13 @@ public class Contact implements ListItem {
public boolean trusted() {
return getOption(Options.FROM) && getOption(Options.TO);
}
+
+ public String getShareableUri() {
+ if (getOtrFingerprints().size() >= 1) {
+ String otr = getOtrFingerprints().get(0);
+ return "xmpp:"+getJid().toBareJid().toString()+"?otr-fingerprint="+otr.replace(" ","");
+ } else {
+ return "xmpp:"+getJid().toBareJid().toString();
+ }
+ }
}
diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java
index a9f4c0f1..b1df7ec7 100644
--- a/src/main/java/eu/siacs/conversations/entities/Conversation.java
+++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java
@@ -240,16 +240,14 @@ public class Conversation extends AbstractEntity {
this.mode = mode;
}
- public SessionImpl startOtrSession(XmppConnectionService service,
- String presence, boolean sendStart) {
+ public SessionImpl startOtrSession(String presence, boolean sendStart) {
if (this.otrSession != null) {
return this.otrSession;
} else {
final SessionID sessionId = new SessionID(this.getContactJid().toBareJid().toString(),
presence,
"xmpp");
- this.otrSession = new SessionImpl(sessionId, getAccount()
- .getOtrEngine(service));
+ this.otrSession = new SessionImpl(sessionId, getAccount().getOtrEngine());
try {
if (sendStart) {
this.otrSession.startSession();