From 07ce987d204dd4361976bff53b15f17d57e0b04d Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Sun, 16 Aug 2020 15:14:19 +0200 Subject: [PATCH] Prototype first ikey classes --- .../smackx/ikey/IkeyConstants.java | 8 ++++ .../jivesoftware/smackx/ikey/IkeyType.java | 6 +++ .../smackx/ikey/element/PlainIKeyElement.java | 40 +++++++++++++++++ .../ikey/element/SubordinateElement.java | 43 +++++++++++++++++++ .../ikey/element/SubordinateListElement.java | 40 +++++++++++++++++ .../element/SubordinateListElementTest.java | 24 +++++++++++ 6 files changed, 161 insertions(+) create mode 100644 domain/src/main/java/org/jivesoftware/smackx/ikey/IkeyConstants.java create mode 100644 domain/src/main/java/org/jivesoftware/smackx/ikey/IkeyType.java create mode 100644 domain/src/main/java/org/jivesoftware/smackx/ikey/element/PlainIKeyElement.java create mode 100644 domain/src/main/java/org/jivesoftware/smackx/ikey/element/SubordinateElement.java create mode 100644 domain/src/main/java/org/jivesoftware/smackx/ikey/element/SubordinateListElement.java create mode 100644 domain/src/test/java/org/jivesoftware/smackx/ikey/element/SubordinateListElementTest.java diff --git a/domain/src/main/java/org/jivesoftware/smackx/ikey/IkeyConstants.java b/domain/src/main/java/org/jivesoftware/smackx/ikey/IkeyConstants.java new file mode 100644 index 0000000..94cf000 --- /dev/null +++ b/domain/src/main/java/org/jivesoftware/smackx/ikey/IkeyConstants.java @@ -0,0 +1,8 @@ +package org.jivesoftware.smackx.ikey; + +public class IkeyConstants { + + public static final String NAMESPACE = "urn:xmpp:ikey:0"; + public static final String IKEY_NODE = NAMESPACE + ":ikey"; + public static final String SUB_NODE = NAMESPACE + ":sub"; +} diff --git a/domain/src/main/java/org/jivesoftware/smackx/ikey/IkeyType.java b/domain/src/main/java/org/jivesoftware/smackx/ikey/IkeyType.java new file mode 100644 index 0000000..3833c75 --- /dev/null +++ b/domain/src/main/java/org/jivesoftware/smackx/ikey/IkeyType.java @@ -0,0 +1,6 @@ +package org.jivesoftware.smackx.ikey; + +public enum IkeyType { + OX, + X509 +} diff --git a/domain/src/main/java/org/jivesoftware/smackx/ikey/element/PlainIKeyElement.java b/domain/src/main/java/org/jivesoftware/smackx/ikey/element/PlainIKeyElement.java new file mode 100644 index 0000000..00a8339 --- /dev/null +++ b/domain/src/main/java/org/jivesoftware/smackx/ikey/element/PlainIKeyElement.java @@ -0,0 +1,40 @@ +package org.jivesoftware.smackx.ikey.element; + +import org.jivesoftware.smack.packet.ExtensionElement; +import org.jivesoftware.smack.packet.XmlEnvironment; +import org.jivesoftware.smack.util.XmlStringBuilder; +import org.jivesoftware.smackx.ikey.IkeyConstants; +import org.jivesoftware.smackx.ikey.IkeyType; + +import javax.xml.namespace.QName; + +public class PlainIKeyElement implements ExtensionElement { + + public static final String NAMESPACE = IkeyConstants.NAMESPACE; + public static final String ELEMENT = "ikey"; + public static final String ATTR_IKEY_TYPE = "type"; + + private final IkeyType type; + + private final QName QNAME = new QName(IkeyConstants.NAMESPACE, ELEMENT); + + public PlainIKeyElement() { + this.type = IkeyType.OX; + } + + @Override + public String getNamespace() { + return NAMESPACE; + } + + @Override + public String getElementName() { + return ELEMENT; + } + + @Override + public XmlStringBuilder toXML(XmlEnvironment xmlEnvironment) { + XmlStringBuilder xml = new XmlStringBuilder(this, xmlEnvironment); + return xml; + } +} diff --git a/domain/src/main/java/org/jivesoftware/smackx/ikey/element/SubordinateElement.java b/domain/src/main/java/org/jivesoftware/smackx/ikey/element/SubordinateElement.java new file mode 100644 index 0000000..19c092f --- /dev/null +++ b/domain/src/main/java/org/jivesoftware/smackx/ikey/element/SubordinateElement.java @@ -0,0 +1,43 @@ +package org.jivesoftware.smackx.ikey.element; + +import org.jivesoftware.smack.packet.NamedElement; +import org.jivesoftware.smack.packet.XmlEnvironment; +import org.jivesoftware.smack.util.StringUtils; +import org.jivesoftware.smack.util.XmlStringBuilder; + +public class SubordinateElement implements NamedElement { + + public static final String ELEMENT = "sub"; + public static final String ATTR_SUB_URI = "uri"; + public static final String ATTR_SUB_FINGERPRINT = "fingerprint"; + + private final String subUri; + private final String subFingerprint; + + public SubordinateElement(String subKeyItemUri, String subKeyFingerprint) { + this.subUri = StringUtils.requireNotNullNorEmpty(subKeyItemUri, "uri MUST NOT be null nor empty."); + this.subFingerprint = StringUtils.requireNotNullNorEmpty(subKeyFingerprint, "fingerprint MUST NOT be null nor empty."); + } + + public String getUri() { + return subUri; + } + + public String getFingerprint() { + return subFingerprint; + } + + @Override + public String getElementName() { + return ELEMENT; + } + + @Override + public XmlStringBuilder toXML(XmlEnvironment xmlEnvironment) { + XmlStringBuilder xml = new XmlStringBuilder(this) + .attribute(ATTR_SUB_URI, getUri()) + .attribute(ATTR_SUB_FINGERPRINT, getFingerprint()) + .closeEmptyElement(); + return xml; + } +} diff --git a/domain/src/main/java/org/jivesoftware/smackx/ikey/element/SubordinateListElement.java b/domain/src/main/java/org/jivesoftware/smackx/ikey/element/SubordinateListElement.java new file mode 100644 index 0000000..ef934a5 --- /dev/null +++ b/domain/src/main/java/org/jivesoftware/smackx/ikey/element/SubordinateListElement.java @@ -0,0 +1,40 @@ +package org.jivesoftware.smackx.ikey.element; + +import org.jivesoftware.smack.packet.ExtensionElement; +import org.jivesoftware.smack.packet.XmlEnvironment; +import org.jivesoftware.smack.util.Objects; +import org.jivesoftware.smack.util.XmlStringBuilder; +import org.jivesoftware.smackx.ikey.IkeyConstants; + +import java.util.List; + +public class SubordinateListElement implements ExtensionElement { + + public static final String NAMESPACE = IkeyConstants.NAMESPACE; + public static final String ELEMENT = "subordinates"; + + private final List subordinates; + + public SubordinateListElement(List subordinates) { + this.subordinates = Objects.requireNonNullNorEmpty(subordinates, "List of subordinates MUST NOT be null nor empty."); + } + + @Override + public String getNamespace() { + return NAMESPACE; + } + + @Override + public String getElementName() { + return ELEMENT; + } + + @Override + public XmlStringBuilder toXML(XmlEnvironment xmlEnvironment) { + XmlStringBuilder xml = new XmlStringBuilder(this, xmlEnvironment) + .rightAngleBracket() + .append(subordinates) + .closeElement(this); + return xml; + } +} diff --git a/domain/src/test/java/org/jivesoftware/smackx/ikey/element/SubordinateListElementTest.java b/domain/src/test/java/org/jivesoftware/smackx/ikey/element/SubordinateListElementTest.java new file mode 100644 index 0000000..041f311 --- /dev/null +++ b/domain/src/test/java/org/jivesoftware/smackx/ikey/element/SubordinateListElementTest.java @@ -0,0 +1,24 @@ +package org.jivesoftware.smackx.ikey.element; + +import org.junit.Test; + +import java.util.Arrays; + +public class SubordinateListElementTest { + + @Test + public void test() { + SubordinateListElement listElement = buildElement( + new SubordinateElement("xmpp:hamlet@denmark.lit?;node=urn:xmpp:openpgp:0:public-keys:1357B01865B2503C18453D208CAC2A9678548E35" + + ";item=2020-01-21T10:46:21Z", "1357B01865B2503C18453D208CAC2A9678548E35"), + new SubordinateElement("xmpp:hamlet@denmark.lit?;node=urn:xmpp:omemo:1:bundles" + + ";item=123456", "e64dc9166dd34db64c9247bd502c5969e365a98f3aa41c87247d120487fdd32f") + ); + + System.out.println(listElement.toXML()); + } + + private SubordinateListElement buildElement(SubordinateElement... subordinateElements) { + return new SubordinateListElement(Arrays.asList(subordinateElements)); + } +}