diff --git a/src/main/java/io/kamax/mxisd/as/processor/command/LookupCommandProcessor.java b/src/main/java/io/kamax/mxisd/as/processor/command/LookupCommandProcessor.java index ba5a5b0..40f148d 100644 --- a/src/main/java/io/kamax/mxisd/as/processor/command/LookupCommandProcessor.java +++ b/src/main/java/io/kamax/mxisd/as/processor/command/LookupCommandProcessor.java @@ -57,11 +57,16 @@ public class LookupCommandProcessor implements CommandProcessor { SingleLookupReply lookup = r.get(); StrBuilder b = new StrBuilder(); - b.append("Result for 3PID lookup on ").append(medium).append(" ").appendln(address).appendNewLine(); + b.append("Result for 3PID lookup of ").append(medium).append(" ").appendln(address).appendNewLine(); b.append("Matrix ID: ").appendln(lookup.getMxid().getId()); b.appendln("Validity:") - .append("\tNot Before: ").appendln(lookup.getNotBefore()) - .append("\tNot After: ").appendln(lookup.getNotAfter()); + .append(" Not Before: ").appendln(lookup.getNotBefore()) + .append(" Not After: ").appendln(lookup.getNotAfter()); + b.appendln("Signatures:"); + lookup.getSignatures().forEach((host, signs) -> { + b.append(" ").append(host).appendln(":"); + signs.forEach((key, sign) -> b.append(" ").append(key).append(" -> ").appendln("OK")); + }); room.sendNotice(b.toString()); } diff --git a/src/main/java/io/kamax/mxisd/http/io/identity/SingeLookupReplyJson.java b/src/main/java/io/kamax/mxisd/http/io/identity/SingeLookupReplyJson.java index 32c1d91..e1e662c 100644 --- a/src/main/java/io/kamax/mxisd/http/io/identity/SingeLookupReplyJson.java +++ b/src/main/java/io/kamax/mxisd/http/io/identity/SingeLookupReplyJson.java @@ -22,6 +22,9 @@ package io.kamax.mxisd.http.io.identity; import io.kamax.mxisd.lookup.SingleLookupReply; +import java.util.HashMap; +import java.util.Map; + public class SingeLookupReplyJson { private String address; @@ -30,6 +33,7 @@ public class SingeLookupReplyJson { private long not_after; private long not_before; private long ts; + private Map> signatures = new HashMap<>(); public SingeLookupReplyJson(SingleLookupReply reply) { this.address = reply.getRequest().getThreePid(); @@ -64,4 +68,8 @@ public class SingeLookupReplyJson { return ts; } + public Map> getSignatures() { + return signatures; + } + } diff --git a/src/main/java/io/kamax/mxisd/lookup/SingleLookupReply.java b/src/main/java/io/kamax/mxisd/lookup/SingleLookupReply.java index 2d7bcb3..de291d9 100644 --- a/src/main/java/io/kamax/mxisd/lookup/SingleLookupReply.java +++ b/src/main/java/io/kamax/mxisd/lookup/SingleLookupReply.java @@ -27,6 +27,8 @@ import io.kamax.matrix._MatrixID; import io.kamax.mxisd.http.io.identity.SingeLookupReplyJson; import java.time.Instant; +import java.util.HashMap; +import java.util.Map; public class SingleLookupReply { @@ -39,6 +41,7 @@ public class SingleLookupReply { private Instant notBefore; private Instant notAfter; private Instant timestamp; + private Map> signatures = new HashMap<>(); public static SingleLookupReply fromRecursive(SingleLookupRequest request, String body) { SingleLookupReply reply = new SingleLookupReply(); @@ -52,6 +55,7 @@ public class SingleLookupReply { reply.notAfter = Instant.ofEpochMilli(json.getNot_after()); reply.notBefore = Instant.ofEpochMilli(json.getNot_before()); reply.timestamp = Instant.ofEpochMilli(json.getTs()); + reply.signatures = new HashMap<>(json.getSignatures()); } catch (JsonSyntaxException e) { // stub - we only want to try, nothing more } @@ -107,4 +111,12 @@ public class SingleLookupReply { return timestamp; } + public Map> getSignatures() { + return signatures; + } + + public Map getSignature(String host) { + return signatures.computeIfAbsent(host, k -> new HashMap<>()); + } + }