You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2018/10/05 15:02:19 UTC
[2/2] syncope git commit: [SYNCOPE-1376] Use absolute path but no
protocol, host or port
[SYNCOPE-1376] Use absolute path but no protocol, host or port
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/1310349e
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/1310349e
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/1310349e
Branch: refs/heads/2_0_X
Commit: 1310349e36d04724d2f1c5d1890133ad41424b91
Parents: cdad0ab
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Fri Oct 5 17:02:03 2018 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Fri Oct 5 17:02:03 2018 +0200
----------------------------------------------------------------------
.../rest/cxf/SyncopeSwagger2Customizer.java | 16 +++
...SyncopeSwaggerToOpenApiConversionFilter.java | 114 +++++++++++++++++++
.../src/main/resources/restCXFContext.xml | 2 +-
.../src/main/resources/jboss/restCXFContext.xml | 2 +-
4 files changed, 132 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/1310349e/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/SyncopeSwagger2Customizer.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/SyncopeSwagger2Customizer.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/SyncopeSwagger2Customizer.java
index 85c6a9a..1bcf643 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/SyncopeSwagger2Customizer.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/SyncopeSwagger2Customizer.java
@@ -18,12 +18,16 @@
*/
package org.apache.syncope.core.rest.cxf;
+import io.swagger.models.Swagger;
import io.swagger.models.parameters.HeaderParameter;
import io.swagger.models.parameters.Parameter;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.cxf.jaxrs.ext.MessageContext;
import org.apache.cxf.jaxrs.swagger.Swagger2Customizer;
+import org.apache.cxf.jaxrs.utils.JAXRSUtils;
import org.apache.syncope.common.lib.SyncopeConstants;
import org.apache.syncope.common.rest.api.RESTHeaders;
import org.apache.syncope.core.persistence.api.DomainsHolder;
@@ -43,6 +47,18 @@ public class SyncopeSwagger2Customizer extends Swagger2Customizer {
}
@Override
+ public Swagger customize(final Swagger data) {
+ super.customize(data);
+
+ MessageContext ctx = JAXRSUtils.createContextValue(JAXRSUtils.getCurrentMessage(), null, MessageContext.class);
+ String basePath = StringUtils.substringBeforeLast(ctx.getHttpServletRequest().getRequestURI(), "/");
+ data.setBasePath(basePath);
+ data.setHost(null);
+
+ return data;
+ }
+
+ @Override
protected void addParameters(final List<Parameter> parameters) {
if (domains == null) {
domains = new ArrayList<>(
http://git-wip-us.apache.org/repos/asf/syncope/blob/1310349e/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/SyncopeSwaggerToOpenApiConversionFilter.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/SyncopeSwaggerToOpenApiConversionFilter.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/SyncopeSwaggerToOpenApiConversionFilter.java
new file mode 100644
index 0000000..44aaabd
--- /dev/null
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/SyncopeSwaggerToOpenApiConversionFilter.java
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.syncope.core.rest.cxf;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.URI;
+import java.nio.charset.StandardCharsets;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Objects;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.container.ContainerRequestContext;
+import javax.ws.rs.container.ContainerRequestFilter;
+import javax.ws.rs.container.PreMatching;
+import javax.ws.rs.ext.Provider;
+import javax.ws.rs.ext.WriterInterceptor;
+import javax.ws.rs.ext.WriterInterceptorContext;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.cxf.io.CachedOutputStream;
+import org.apache.cxf.jaxrs.ext.MessageContext;
+import org.apache.cxf.jaxrs.json.basic.JsonMapObject;
+import org.apache.cxf.jaxrs.json.basic.JsonMapObjectReaderWriter;
+import org.apache.cxf.jaxrs.swagger.openapi.OpenApiConfiguration;
+import org.apache.cxf.jaxrs.swagger.openapi.SwaggerToOpenApiConversionUtils;
+import org.apache.cxf.jaxrs.utils.JAXRSUtils;
+
+@Provider
+@PreMatching
+public final class SyncopeSwaggerToOpenApiConversionFilter implements ContainerRequestFilter, WriterInterceptor {
+
+ private static final String SWAGGER_PATH = "swagger.json";
+
+ private static final String OPEN_API_PATH = "openapi.json";
+
+ private static final String OPEN_API_PROPERTY = "openapi";
+
+ private OpenApiConfiguration openApiConfig;
+
+ private String openApiJsonPath = OPEN_API_PATH;
+
+ @Override
+ public void filter(final ContainerRequestContext reqCtx) throws IOException {
+ String path = reqCtx.getUriInfo().getPath();
+ if (path.endsWith(openApiJsonPath)) {
+ reqCtx.setRequestUri(URI.create(SWAGGER_PATH));
+ JAXRSUtils.getCurrentMessage().getExchange().put(OPEN_API_PROPERTY, Boolean.TRUE);
+ }
+ }
+
+ public OpenApiConfiguration getOpenApiConfig() {
+ return openApiConfig;
+ }
+
+ public void setOpenApiConfig(final OpenApiConfiguration openApiConfig) {
+ this.openApiConfig = openApiConfig;
+ }
+
+ @Override
+ public void aroundWriteTo(final WriterInterceptorContext context) throws IOException, WebApplicationException {
+ if (isOpenApiRequested()) {
+ OutputStream os = context.getOutputStream();
+ CachedOutputStream cos = new CachedOutputStream();
+
+ context.setOutputStream(cos);
+ context.proceed();
+
+ MessageContext ctx = createMessageContext();
+ String swaggerJson = IOUtils.toString(cos.getInputStream(), StandardCharsets.UTF_8);
+ String openApiJson = SwaggerToOpenApiConversionUtils.getOpenApiFromSwaggerJson(
+ ctx, swaggerJson, openApiConfig);
+
+ JsonMapObjectReaderWriter readerWriter = new JsonMapObjectReaderWriter();
+ JsonMapObject openapi = readerWriter.fromJsonToJsonObject(openApiJson);
+
+ String basePath = StringUtils.substringBeforeLast(ctx.getHttpServletRequest().getRequestURI(), "/");
+ openapi.setProperty("servers", Arrays.asList(Collections.singletonMap("url", basePath)));
+
+ os.write(readerWriter.toJson(openapi).getBytes(StandardCharsets.UTF_8));
+ os.flush();
+ } else {
+ context.proceed();
+ }
+ }
+
+ private MessageContext createMessageContext() {
+ return JAXRSUtils.createContextValue(JAXRSUtils.getCurrentMessage(), null, MessageContext.class);
+ }
+
+ private boolean isOpenApiRequested() {
+ return Objects.equals(Boolean.TRUE, JAXRSUtils.getCurrentMessage().getExchange().get(OPEN_API_PROPERTY));
+ }
+
+ public void setOpenApiJsonPath(final String openApiJsonPath) {
+ this.openApiJsonPath = openApiJsonPath;
+ }
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/1310349e/core/rest-cxf/src/main/resources/restCXFContext.xml
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/resources/restCXFContext.xml b/core/rest-cxf/src/main/resources/restCXFContext.xml
index caa1c88..2b38266 100644
--- a/core/rest-cxf/src/main/resources/restCXFContext.xml
+++ b/core/rest-cxf/src/main/resources/restCXFContext.xml
@@ -128,7 +128,7 @@ under the License.
</map>
</property>
</bean>
- <bean id="sw2OpenAPI" class="org.apache.cxf.jaxrs.swagger.openapi.SwaggerToOpenApiConversionFilter"/>
+ <bean id="sw2OpenAPI" class="org.apache.syncope.core.rest.cxf.SyncopeSwaggerToOpenApiConversionFilter"/>
<jaxrs:server id="restContainer" address="/"
basePackages="org.apache.syncope.common.rest.api.service, org.apache.syncope.core.rest.cxf.service"
http://git-wip-us.apache.org/repos/asf/syncope/blob/1310349e/fit/core-reference/src/main/resources/jboss/restCXFContext.xml
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/main/resources/jboss/restCXFContext.xml b/fit/core-reference/src/main/resources/jboss/restCXFContext.xml
index fdefbdf..fdc847d 100644
--- a/fit/core-reference/src/main/resources/jboss/restCXFContext.xml
+++ b/fit/core-reference/src/main/resources/jboss/restCXFContext.xml
@@ -142,7 +142,7 @@ under the License.
</map>
</property>
</bean>
- <bean id="sw2OpenAPI" class="org.apache.cxf.jaxrs.swagger.openapi.SwaggerToOpenApiConversionFilter"/>
+ <bean id="sw2OpenAPI" class="org.apache.syncope.core.rest.cxf.SyncopeSwaggerToOpenApiConversionFilter"/>
<jaxrs:server id="restContainer" address="/"
basePackages="org.apache.syncope.common.rest.api.service, org.apache.syncope.core.rest.cxf.service"