diff options
author | Vitaly Takmazov | 2018-10-04 15:47:17 +0300 |
---|---|---|
committer | Vitaly Takmazov | 2018-10-04 15:47:17 +0300 |
commit | 50c3ab940b9c9fdf5e864d969cea25f509af14b8 (patch) | |
tree | ea4e1fd97b8774dd4e1b7aa374d5500fc770faa4 /juick-server/src/main/java/com | |
parent | 2ed731f66cccdf0a38fbfda33ada8025ad186920 (diff) |
RFC6415: Web Host Metadata (WIP)
Diffstat (limited to 'juick-server/src/main/java/com')
12 files changed, 782 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; + } +} |