aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Vitaly Takmazov2018-10-04 15:47:17 +0300
committerGravatar Vitaly Takmazov2018-10-04 15:47:17 +0300
commit50c3ab940b9c9fdf5e864d969cea25f509af14b8 (patch)
treeea4e1fd97b8774dd4e1b7aa374d5500fc770faa4
parent2ed731f66cccdf0a38fbfda33ada8025ad186920 (diff)
RFC6415: Web Host Metadata (WIP)
-rw-r--r--juick-server/src/main/java/com/cliqset/xrd/Alias.java62
-rw-r--r--juick-server/src/main/java/com/cliqset/xrd/Expires.java58
-rw-r--r--juick-server/src/main/java/com/cliqset/xrd/Link.java151
-rw-r--r--juick-server/src/main/java/com/cliqset/xrd/Property.java75
-rw-r--r--juick-server/src/main/java/com/cliqset/xrd/Signature.java21
-rw-r--r--juick-server/src/main/java/com/cliqset/xrd/Subject.java62
-rw-r--r--juick-server/src/main/java/com/cliqset/xrd/Title.java68
-rw-r--r--juick-server/src/main/java/com/cliqset/xrd/XRD.java166
-rw-r--r--juick-server/src/main/java/com/cliqset/xrd/XRDConstants.java26
-rw-r--r--juick-server/src/main/java/com/cliqset/xrd/XRDException.java35
-rw-r--r--juick-server/src/main/java/com/cliqset/xrd/package-info.java33
-rw-r--r--juick-server/src/main/java/com/juick/server/api/hostmeta/HostMeta.java25
-rw-r--r--juick-server/src/test/java/com/juick/server/tests/ServerTests.java6
13 files changed, 788 insertions, 0 deletions
diff --git a/juick-server/src/main/java/com/cliqset/xrd/Alias.java b/juick-server/src/main/java/com/cliqset/xrd/Alias.java
new file mode 100644
index 00000000..49e4052b
--- /dev/null
+++ b/juick-server/src/main/java/com/cliqset/xrd/Alias.java
@@ -0,0 +1,62 @@
+/*
+ Copyright 2010 Cliqset Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package com.cliqset.xrd;
+
+import java.net.URI;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAnyAttribute;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlValue;
+import javax.xml.namespace.QName;
+
+@XmlType(name="Alias", namespace=XRDConstants.XRD_NAMESPACE)
+@XmlAccessorType(XmlAccessType.FIELD)
+public class Alias {
+
+ @XmlAnyAttribute()
+ private Map<QName, Object> unknownAttributes;
+
+ @XmlValue
+ private URI value;
+
+ public void setValue(URI value) {
+ this.value = value;
+ }
+
+ public URI getValue() {
+ return value;
+ }
+
+ public void setUnknownAttributes(Map<QName, Object> unknownAttributes) {
+ this.unknownAttributes = unknownAttributes;
+ }
+
+ public Map<QName, Object> getUnknownAttributes() {
+ if (null == this.unknownAttributes) {
+ this.unknownAttributes = new HashMap<QName, Object>();
+ }
+ return unknownAttributes;
+ }
+
+ public boolean hasUnknownAttributes() {
+ return !(null == this.unknownAttributes || this.unknownAttributes.size() < 1);
+ }
+}
diff --git a/juick-server/src/main/java/com/cliqset/xrd/Expires.java b/juick-server/src/main/java/com/cliqset/xrd/Expires.java
new file mode 100644
index 00000000..b4bcdd24
--- /dev/null
+++ b/juick-server/src/main/java/com/cliqset/xrd/Expires.java
@@ -0,0 +1,58 @@
+/*
+ Copyright 2010 Cliqset Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package com.cliqset.xrd;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.xml.namespace.QName;
+import javax.xml.bind.annotation.*;
+
+@XmlType(name="Expires", namespace=XRDConstants.XRD_NAMESPACE)
+@XmlAccessorType(XmlAccessType.FIELD)
+public class Expires {
+
+ @XmlAnyAttribute
+ private Map<QName, Object> unknownAttributes;
+
+ @XmlValue
+ private Date value;
+
+ public void setValue(Date value) {
+ this.value = value;
+ }
+
+ public Date getValue() {
+ return value;
+ }
+
+ public void setUnknownAttributes(Map<QName, Object> unknownAttributes) {
+ this.unknownAttributes = unknownAttributes;
+ }
+
+ public Map<QName, Object> getUnknownAttributes() {
+ if (null == this.unknownAttributes) {
+ this.unknownAttributes = new HashMap<QName, Object>();
+ }
+ return unknownAttributes;
+ }
+
+ public boolean hasUnknownAttributes() {
+ return !(null == this.unknownAttributes || this.unknownAttributes.size() < 1);
+ }
+}
diff --git a/juick-server/src/main/java/com/cliqset/xrd/Link.java b/juick-server/src/main/java/com/cliqset/xrd/Link.java
new file mode 100644
index 00000000..ec8522f0
--- /dev/null
+++ b/juick-server/src/main/java/com/cliqset/xrd/Link.java
@@ -0,0 +1,151 @@
+/*
+ Copyright 2010 Cliqset Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package com.cliqset.xrd;
+
+import java.net.URI;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.namespace.QName;
+import javax.xml.bind.annotation.XmlAnyElement;
+import javax.xml.bind.annotation.XmlAnyAttribute;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+
+import org.w3c.dom.Element;
+
+@XmlType(name="Link", namespace=XRDConstants.XRD_NAMESPACE)
+@XmlAccessorType(XmlAccessType.FIELD)
+public class Link {
+
+ @XmlAttribute(name="rel")
+ private URI rel;
+
+ @XmlAttribute(name="type")
+ private String type;
+
+ @XmlAttribute(name="href")
+ private URI href;
+
+ @XmlAttribute(name="template")
+ private String template;
+
+ @XmlElement(name="Title")
+ private List<Title> titles;
+
+ @XmlElement(name="Property")
+ private List<Property> properties;
+
+ @XmlAnyElement
+ private List<Element> unknownElements;
+
+ @XmlAnyAttribute
+ private Map<QName,Object> unknownAttributes;
+
+ private URI processedTemplate;
+
+ public void setRel(URI rel) {
+ this.rel = rel;
+ }
+
+ public URI getRel() {
+ return rel;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setHref(URI href) {
+ this.href = href;
+ }
+
+ public URI getHref() {
+ return href;
+ }
+
+ public void setTemplate(String template) {
+ this.template = template;
+ }
+
+ public String getTemplate() {
+ return template;
+ }
+
+ public void setTitles(List<Title> titles) {
+ this.titles = titles;
+ }
+
+ public List<Title> getTitles() {
+ return titles;
+ }
+
+ public void setProperties(List<Property> properties) {
+ this.properties = properties;
+ }
+
+ public List<Property> getProperties() {
+ return properties;
+ }
+
+ public void setUnknownElements(List<Element> unknownElements) {
+ this.unknownElements = unknownElements;
+ }
+
+ public List<Element> getUnknownElements() {
+ return unknownElements;
+ }
+
+ public void setUnknownAttributes(Map<QName,Object> unknownAttributes) {
+ this.unknownAttributes = unknownAttributes;
+ }
+
+ public Map<QName,Object> getUnknownAttributes() {
+ if (null == this.unknownAttributes) {
+ this.unknownAttributes = new HashMap<QName, Object>();
+ }
+ return unknownAttributes;
+ }
+
+ public boolean hasTemplate() {
+ return null != this.template;
+ }
+
+ public boolean hasHref() {
+ return null != this.href;
+ }
+
+ public boolean hasUnknownAttributes() {
+ return !(null == this.unknownAttributes || this.unknownAttributes.size() < 1);
+ }
+
+ public void setProcessedTemplate(URI processedTemplate) {
+ this.processedTemplate = processedTemplate;
+ }
+
+ public URI getProcessedTemplate() {
+ return processedTemplate;
+ }
+}
diff --git a/juick-server/src/main/java/com/cliqset/xrd/Property.java b/juick-server/src/main/java/com/cliqset/xrd/Property.java
new file mode 100644
index 00000000..35c7d0cc
--- /dev/null
+++ b/juick-server/src/main/java/com/cliqset/xrd/Property.java
@@ -0,0 +1,75 @@
+/*
+ Copyright 2010 Cliqset Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package com.cliqset.xrd;
+
+import java.net.URI;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAnyAttribute;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlValue;
+import javax.xml.namespace.QName;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@XmlType(name="Property", namespace=XRDConstants.XRD_NAMESPACE)
+@XmlAccessorType(XmlAccessType.FIELD)
+public class Property {
+
+ @XmlAttribute(name="type", required=true)
+ private URI type;
+
+ @XmlAnyAttribute()
+ private Map<QName, Object> unknownAttributes;
+
+ @XmlValue()
+ private URI value;
+
+ public void setType(URI type) {
+ this.type = type;
+ }
+
+ public URI getType() {
+ return type;
+ }
+
+ public void setValue(URI value) {
+ this.value = value;
+ }
+
+ public URI getValue() {
+ return value;
+ }
+
+ public void setUnknownAttributes(Map<QName, Object> unknownAttributes) {
+ this.unknownAttributes = unknownAttributes;
+ }
+
+ public Map<QName, Object> getUnknownAttributes() {
+ if (null == this.unknownAttributes) {
+ this.unknownAttributes = new HashMap<QName, Object>();
+ }
+ return unknownAttributes;
+ }
+
+ public boolean hasUnknownAttributes() {
+ return !(null == this.unknownAttributes || this.unknownAttributes.size() < 1);
+ }
+}
diff --git a/juick-server/src/main/java/com/cliqset/xrd/Signature.java b/juick-server/src/main/java/com/cliqset/xrd/Signature.java
new file mode 100644
index 00000000..f52f9218
--- /dev/null
+++ b/juick-server/src/main/java/com/cliqset/xrd/Signature.java
@@ -0,0 +1,21 @@
+/*
+ Copyright 2010 Cliqset Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package com.cliqset.xrd;
+
+public class Signature {
+
+}
diff --git a/juick-server/src/main/java/com/cliqset/xrd/Subject.java b/juick-server/src/main/java/com/cliqset/xrd/Subject.java
new file mode 100644
index 00000000..f6815317
--- /dev/null
+++ b/juick-server/src/main/java/com/cliqset/xrd/Subject.java
@@ -0,0 +1,62 @@
+/*
+ Copyright 2010 Cliqset Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package com.cliqset.xrd;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAnyAttribute;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlValue;
+import javax.xml.namespace.QName;
+
+import java.net.URI;
+import java.util.HashMap;
+import java.util.Map;
+
+@XmlType(name="Subject", namespace=XRDConstants.XRD_NAMESPACE)
+@XmlAccessorType(XmlAccessType.FIELD)
+public class Subject {
+
+ @XmlAnyAttribute()
+ private Map<QName, Object> unknownAttributes;
+
+ @XmlValue
+ private URI value;
+
+ public void setValue(URI value) {
+ this.value = value;
+ }
+
+ public URI getValue() {
+ return value;
+ }
+
+ public void setUnknownAttributes(Map<QName, Object> unknownAttributes) {
+ this.unknownAttributes = unknownAttributes;
+ }
+
+ public Map<QName, Object> getUnknownAttributes() {
+ if (null == this.unknownAttributes) {
+ this.unknownAttributes = new HashMap<QName, Object>();
+ }
+ return unknownAttributes;
+ }
+
+ public boolean hasUnknownAttributes() {
+ return !(null == this.unknownAttributes || this.unknownAttributes.size() < 1);
+ }
+}
diff --git a/juick-server/src/main/java/com/cliqset/xrd/Title.java b/juick-server/src/main/java/com/cliqset/xrd/Title.java
new file mode 100644
index 00000000..7d6597bd
--- /dev/null
+++ b/juick-server/src/main/java/com/cliqset/xrd/Title.java
@@ -0,0 +1,68 @@
+/*
+ Copyright 2010 Cliqset Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package com.cliqset.xrd;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.xml.bind.annotation.*;
+import javax.xml.namespace.QName;
+
+@XmlType(name="Title", namespace=XRDConstants.XRD_NAMESPACE)
+@XmlAccessorType(XmlAccessType.FIELD)
+public class Title {
+
+ @XmlAttribute(name="lang", namespace=XRDConstants.XML_NAMESPACE)
+ private String lang;
+
+ @XmlAnyAttribute()
+ private Map<QName, Object> unknownAttributes;
+
+ @XmlValue
+ private String value;
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public void setLang(String lang) {
+ this.lang = lang;
+ }
+
+ public String getLang() {
+ return lang;
+ }
+
+ public void setUnknownAttributes(Map<QName, Object> unknownAttributes) {
+ this.unknownAttributes = unknownAttributes;
+ }
+
+ public Map<QName, Object> getUnknownAttributes() {
+ if (null == this.unknownAttributes) {
+ this.unknownAttributes = new HashMap<QName, Object>();
+ }
+ return unknownAttributes;
+ }
+
+ public boolean hasUnknownAttributes() {
+ return !(null == this.unknownAttributes || this.unknownAttributes.size() < 1);
+ }
+}
diff --git a/juick-server/src/main/java/com/cliqset/xrd/XRD.java b/juick-server/src/main/java/com/cliqset/xrd/XRD.java
new file mode 100644
index 00000000..393e977b
--- /dev/null
+++ b/juick-server/src/main/java/com/cliqset/xrd/XRD.java
@@ -0,0 +1,166 @@
+/*
+ Copyright 2010 Cliqset Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package com.cliqset.xrd;
+
+import javax.xml.namespace.QName;
+import javax.xml.bind.annotation.*;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+
+import org.w3c.dom.Element;
+
+import java.io.InputStream;
+import java.util.List;
+import java.util.Map;
+
+@XmlRootElement(name="XRD", namespace=XRDConstants.XRD_NAMESPACE)
+@XmlAccessorType(XmlAccessType.FIELD)
+public class XRD {
+
+ @XmlAttribute(name="id", namespace=XRDConstants.XML_NAMESPACE)
+ private String id;
+
+ @XmlAnyAttribute
+ private Map<QName, Object> unknownAttributes;
+
+ @XmlElement(name="Expires", namespace=XRDConstants.XRD_NAMESPACE)
+ private Expires expires;
+
+ @XmlElement(name="Subject", namespace=XRDConstants.XRD_NAMESPACE)
+ private Subject subject;
+
+ @XmlElement(name="Alias", namespace=XRDConstants.XRD_NAMESPACE)
+ private List<Alias> aliases;
+
+ @XmlElement(name="Property", namespace=XRDConstants.XRD_NAMESPACE)
+ private List<Property> properties;
+
+ @XmlElement(name="Link", namespace=XRDConstants.XRD_NAMESPACE)
+ private List<Link> links;
+
+ @XmlElement(name="Signature", namespace=XRDConstants.XML_SIG_NAMESPACE)
+ private List<Signature> signatures;
+
+ @XmlAnyElement
+ private List<Element> unknownElements;
+
+ public void setExpires(Expires expires) {
+ this.expires = expires;
+ }
+
+ public Expires getExpires() {
+ return expires;
+ }
+
+ public void setSubject(Subject subject) {
+ this.subject = subject;
+ }
+
+ public Subject getSubject() {
+ return subject;
+ }
+
+ public void setAliases(List<Alias> aliases) {
+ this.aliases = aliases;
+ }
+
+ public List<Alias> getAliases() {
+ return aliases;
+ }
+
+ public void setProperties(List<Property> properties) {
+ this.properties = properties;
+ }
+
+ public List<Property> getProperties() {
+ return properties;
+ }
+
+ public void setLinks(List<Link> links) {
+ this.links = links;
+ }
+
+ public List<Link> getLinks() {
+ return links;
+ }
+
+ public void setSignatures(List<Signature> signatures) {
+ this.signatures = signatures;
+ }
+
+ public List<Signature> getSignatures() {
+ return signatures;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setUnknownAttributes(Map<QName, Object> unknownAttributes) {
+ this.unknownAttributes = unknownAttributes;
+ }
+
+ public Map<QName, Object> getUnknownAttributes() {
+ return unknownAttributes;
+ }
+
+ public void setUnknownElements(List<Element> unknownElements) {
+ this.unknownElements = unknownElements;
+ }
+
+ public List<Element> getUnknownElements() {
+ return unknownElements;
+ }
+
+ public boolean hasId() {
+ return null != this.id;
+ }
+
+ public boolean hasExpires() {
+ return null != this.expires;
+ }
+
+ public boolean hasSubject() {
+ return null != this.subject;
+ }
+
+ public boolean hasAliases() {
+ return null != this.aliases;
+ }
+
+ public boolean hasProperties() {
+ return null != this.properties;
+ }
+
+ public boolean hasLinks() {
+ return null != this.links;
+ }
+
+ public static XRD fromStream(InputStream stream) throws XRDException {
+ JAXBContext context;
+ try {
+ context = JAXBContext.newInstance(XRD.class);
+ return (XRD)context.createUnmarshaller().unmarshal(stream);
+ } catch (JAXBException e) {
+ throw new XRDException("Unable to deserialize stream into XRD", e);
+ }
+ }
+}
diff --git a/juick-server/src/main/java/com/cliqset/xrd/XRDConstants.java b/juick-server/src/main/java/com/cliqset/xrd/XRDConstants.java
new file mode 100644
index 00000000..39e3c584
--- /dev/null
+++ b/juick-server/src/main/java/com/cliqset/xrd/XRDConstants.java
@@ -0,0 +1,26 @@
+/*
+ Copyright 2010 Cliqset Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package com.cliqset.xrd;
+
+public class XRDConstants {
+
+ public static final String XRD_NAMESPACE = "http://docs.oasis-open.org/ns/xri/xrd-1.0";
+ public static final String XML_SIG_NAMESPACE = "";
+ public static final String XML_NAMESPACE = "";
+
+ public static final String XRD_MEDIA_TYPE = "application/xrd+xml";
+}
diff --git a/juick-server/src/main/java/com/cliqset/xrd/XRDException.java b/juick-server/src/main/java/com/cliqset/xrd/XRDException.java
new file mode 100644
index 00000000..da1e6849
--- /dev/null
+++ b/juick-server/src/main/java/com/cliqset/xrd/XRDException.java
@@ -0,0 +1,35 @@
+/*
+ Copyright 2010 Cliqset Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package com.cliqset.xrd;
+
+@SuppressWarnings("serial")
+public class XRDException extends Exception {
+
+ public XRDException() {}
+
+ public XRDException(String message) {
+ super(message);
+ }
+
+ public XRDException(Throwable cause) {
+ super(cause);
+ }
+
+ public XRDException(String message, Throwable cause) {
+ super(message, cause);
+ }
+}
diff --git a/juick-server/src/main/java/com/cliqset/xrd/package-info.java b/juick-server/src/main/java/com/cliqset/xrd/package-info.java
new file mode 100644
index 00000000..bd8f0146
--- /dev/null
+++ b/juick-server/src/main/java/com/cliqset/xrd/package-info.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2008-2017, Juick
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+@XmlSchema(
+ namespace=XRD_NAMESPACE,
+ elementFormDefault = XmlNsForm.QUALIFIED,
+ xmlns={
+ @XmlNs(prefix= StringUtils.EMPTY, namespaceURI=XRD_NAMESPACE)
+ }
+)
+package com.cliqset.xrd;
+
+import org.apache.commons.lang3.StringUtils;
+
+import javax.xml.bind.annotation.XmlNs;
+import javax.xml.bind.annotation.XmlNsForm;
+import javax.xml.bind.annotation.XmlSchema;
+
+import static com.cliqset.xrd.XRDConstants.XRD_NAMESPACE; \ No newline at end of file
diff --git a/juick-server/src/main/java/com/juick/server/api/hostmeta/HostMeta.java b/juick-server/src/main/java/com/juick/server/api/hostmeta/HostMeta.java
new file mode 100644
index 00000000..fa4d2a3f
--- /dev/null
+++ b/juick-server/src/main/java/com/juick/server/api/hostmeta/HostMeta.java
@@ -0,0 +1,25 @@
+package com.juick.server.api.hostmeta;
+
+import com.cliqset.xrd.Link;
+import com.cliqset.xrd.XRD;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Collections;
+
+import static com.cliqset.xrd.XRDConstants.XRD_MEDIA_TYPE;
+
+@RestController
+public class HostMeta {
+ @Value("${ap_base_uri:http://localhost:8080/}")
+ private String baseUri;
+ @GetMapping(value = "/.well-known/host-meta", produces = XRD_MEDIA_TYPE)
+ public XRD hostMetaResponse() {
+ Link webfinger = new Link();
+ webfinger.setTemplate(String.format("%swebfinger?resource={uri}", baseUri));
+ XRD xrd = new XRD();
+ xrd.setLinks(Collections.singletonList(webfinger));
+ return xrd;
+ }
+}
diff --git a/juick-server/src/test/java/com/juick/server/tests/ServerTests.java b/juick-server/src/test/java/com/juick/server/tests/ServerTests.java
index 4046a798..386b989a 100644
--- a/juick-server/src/test/java/com/juick/server/tests/ServerTests.java
+++ b/juick-server/src/test/java/com/juick/server/tests/ServerTests.java
@@ -1702,4 +1702,10 @@ public class ServerTests {
follow.setObject("http://localhost:8080/u/ugnich");
signatureManager.post(from, to, follow);
}
+ @Test
+ public void hostmeta() throws Exception {
+ MvcResult result = mockMvc.perform(get("/.well-known/host-meta"))
+ .andExpect(status().isOk()).andReturn();
+ String xrd = result.getResponse().getContentAsString();
+ }
}