Skip to content

Commit

Permalink
OpenAPI cleanup.
Browse files Browse the repository at this point in the history
Moved server.oas to server.openapi since it was cleaner.
Now serving openapi ui at /openapi.
  • Loading branch information
noboomu committed Oct 23, 2018
1 parent 6473bfb commit 7842f51
Show file tree
Hide file tree
Showing 10 changed files with 146 additions and 25 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/**
*
*/
package io.sinistral.proteus.server.tools.oas;
package io.sinistral.proteus.server.tools.openapi;

/**
* @author jbauer
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/**
*
*/
package io.sinistral.proteus.server.tools.oas;
package io.sinistral.proteus.server.tools.openapi;

import java.io.File;
import java.lang.annotation.Annotation;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/**
*
*/
package io.sinistral.proteus.server.tools.oas;
package io.sinistral.proteus.server.tools.openapi;

import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
Expand Down
27 changes: 16 additions & 11 deletions src/main/java/io/sinistral/proteus/services/OpenAPIService.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import java.io.File;
import java.io.InputStream;
import java.net.URL;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
Expand All @@ -18,6 +19,7 @@
import java.util.stream.Collectors;

import javax.ws.rs.HttpMethod;
import javax.ws.rs.core.MediaType;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
Expand All @@ -34,9 +36,9 @@
import com.typesafe.config.Config;

import io.sinistral.proteus.server.endpoints.EndpointInfo;
import io.sinistral.proteus.server.tools.oas.Reader;
import io.sinistral.proteus.server.tools.oas.ServerModelResolver;
import io.sinistral.proteus.server.tools.oas.ServerParameterExtension;
import io.sinistral.proteus.server.tools.openapi.Reader;
import io.sinistral.proteus.server.tools.openapi.ServerModelResolver;
import io.sinistral.proteus.server.tools.openapi.ServerParameterExtension;
import io.swagger.v3.core.util.Json;
import io.swagger.v3.core.util.Yaml;
import io.swagger.v3.jaxrs2.ext.OpenAPIExtensions;
Expand All @@ -53,6 +55,10 @@
import io.undertow.server.HttpHandler;
import io.undertow.server.HttpServerExchange;
import io.undertow.server.RoutingHandler;
import io.undertow.server.handlers.ResponseCodeHandler;
import io.undertow.server.handlers.resource.FileResourceManager;
import io.undertow.server.handlers.resource.ResourceHandler;
import io.undertow.util.CanonicalPathUtils;
import io.undertow.util.Headers;
import io.undertow.util.Methods;

Expand All @@ -63,7 +69,7 @@ public class OpenAPIService extends BaseService implements Supplier<RoutingHan

private static Logger log = LoggerFactory.getLogger(OpenAPIService.class.getCanonicalName());

protected final String resourcePathPrefix = "oas";
protected final String resourcePathPrefix = "openapi";


@Inject
Expand Down Expand Up @@ -200,7 +206,6 @@ public void generateHTML()

templateString = templateString.replaceAll("\\{\\{ basePath \\}\\}", basePath);
templateString = templateString.replaceAll("\\{\\{ title \\}\\}",applicationName + " Swagger UI");
templateString = templateString.replaceAll("\\{\\{ filePath \\}\\}", basePath + ".yaml");

this.indexHTML = templateString;
}
Expand All @@ -222,7 +227,7 @@ public void generateHTML()

Path tmpDirParent = Files.createTempDirectory(appName);

Path tmpDir = tmpDirParent.resolve("oas/");
Path tmpDir = tmpDirParent.resolve("openapi/");

if(tmpDir.toFile().exists())
{
Expand Down Expand Up @@ -287,7 +292,7 @@ public RoutingHandler get()

String pathTemplate = this.applicationPath + File.separator + this.specFilename ;

//FileResourceManager resourceManager = new FileResourceManager(this.resourcePath.toFile(),1024);
FileResourceManager resourceManager = new FileResourceManager(this.resourcePath.toFile(),1024);

router.add(HttpMethod.GET, pathTemplate, new HttpHandler(){

Expand Down Expand Up @@ -316,7 +321,7 @@ public void handleRequest(HttpServerExchange exchange) throws Exception

this.registeredEndpoints.add(EndpointInfo.builder().withConsumes("*/*").withPathTemplate(pathTemplate).withControllerName(this.getClass().getSimpleName()).withMethod(Methods.GET).withProduces(io.sinistral.proteus.server.MediaType.TEXT_YAML.contentType()).build());

/*
pathTemplate = this.basePath;

router.add(HttpMethod.GET, pathTemplate , new HttpHandler(){
Expand All @@ -325,7 +330,6 @@ public void handleRequest(HttpServerExchange exchange) throws Exception
public void handleRequest(HttpServerExchange exchange) throws Exception
{

exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, MediaType.TEXT_HTML);
exchange.getResponseSender().send(indexHTML);

Expand All @@ -335,6 +339,7 @@ public void handleRequest(HttpServerExchange exchange) throws Exception

this.registeredEndpoints.add(EndpointInfo.builder().withConsumes(MediaType.WILDCARD).withProduces(MediaType.TEXT_HTML).withPathTemplate(pathTemplate).withControllerName(this.getClass().getSimpleName()).withMethod(Methods.GET).build());



try
{
Expand Down Expand Up @@ -393,7 +398,7 @@ public void handleRequest(HttpServerExchange exchange) throws Exception
log.error(e.getMessage(),e);
}

*/


return router;
}
Expand All @@ -410,7 +415,7 @@ protected void startUp() throws Exception


this.generateSpec();
//this.generateHTML();
this.generateHTML();

log.debug("\nOpenAPI Spec:\n" + writer.writeValueAsString(this.openApi));

Expand Down
24 changes: 18 additions & 6 deletions src/main/java/io/sinistral/proteus/services/SwaggerService.java
Original file line number Diff line number Diff line change
Expand Up @@ -336,7 +336,7 @@ public void generateSwaggerHTML()
{
try
{

try(InputStream templateInputStream = this.getClass().getClassLoader().getResourceAsStream(resourcePrefix + "/index.html"))
{
Expand Down Expand Up @@ -376,18 +376,19 @@ public void generateSwaggerHTML()
if( url.toExternalForm().contains("!") )
{
log.debug("Copying Swagger resources...");

String appName = config.getString("application.name").replaceAll(" ", "_");

Path tmpDirParent = Files.createTempDirectory(appName);

Path swaggerTmpDir = tmpDirParent.resolve("swagger/");

String jarPathString = url.toExternalForm().substring(0, url.toExternalForm().indexOf("!") ).replaceAll("file:", "").replaceAll("jar:", "");

File srcFile = new File(jarPathString);

try(JarFile jarFile = new JarFile(srcFile, false))
{
String appName = config.getString("application.name").replaceAll(" ", "_");

Path tmpDirParent = Files.createTempDirectory(appName);

Path swaggerTmpDir = tmpDirParent.resolve("swagger/");

if(swaggerTmpDir.toFile().exists())
{
Expand Down Expand Up @@ -422,6 +423,17 @@ public void generateSwaggerHTML()

java.nio.file.Files.copy(entryInputStream, entryFilePath,StandardCopyOption.REPLACE_EXISTING);

System.out.println("copying file to " + entryFilePath);

// String sharedCSS = null;
//
// try(InputStream templateInputStream = this.getClass().getClassLoader().getResourceAsStream(resourcePrefix + File.separator + ".." + File.separator + "/swagger-ui.css"))
// {
// byte[] templateBytes = IOUtils.toByteArray(templateInputStream);
//
// sharedCSS = new String(templateBytes,Charset.defaultCharset());
// }

} catch (Exception e)
{
log.error(e.getMessage() + " for entry " + ze.getName());
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@

<!DOCTYPE html>
<!-- this is for the dev server -->
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{{ title }}</title>
<link href="https://fonts.googleapis.com/css?family=Inconsolata:400,700|Open+Sans:400,700|Source+Code+Pro:300,600|Titillium+Web:400,600,700" rel="stylesheet">
<link href="{{ basePath }}/swagger-ui.css" rel='stylesheet' />

<style>
html
{
box-sizing: border-box;
overflow: -moz-scrollbars-vertical;
overflow-y: scroll;
}
*,
*:before,
*:after
{
box-sizing: inherit;
}

body {
margin:0;
background: #fafafa;
}

pre.microlight {
-webkit-font-smoothing: none;
}

</style>


</head>

<body>

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="position:absolute;width:0;height:0">
<defs>
<symbol viewBox="0 0 20 20" id="unlocked">
<path d="M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V6h2v-.801C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8z"></path>
</symbol>

<symbol viewBox="0 0 20 20" id="locked">
<path d="M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8zM12 8H8V5.199C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8z"/>
</symbol>

<symbol viewBox="0 0 20 20" id="close">
<path d="M14.348 14.849c-.469.469-1.229.469-1.697 0L10 11.819l-2.651 3.029c-.469.469-1.229.469-1.697 0-.469-.469-.469-1.229 0-1.697l2.758-3.15-2.759-3.152c-.469-.469-.469-1.228 0-1.697.469-.469 1.228-.469 1.697 0L10 8.183l2.651-3.031c.469-.469 1.228-.469 1.697 0 .469.469.469 1.229 0 1.697l-2.758 3.152 2.758 3.15c.469.469.469 1.229 0 1.698z"/>
</symbol>

<symbol viewBox="0 0 20 20" id="large-arrow">
<path d="M13.25 10L6.109 2.58c-.268-.27-.268-.707 0-.979.268-.27.701-.27.969 0l7.83 7.908c.268.271.268.709 0 .979l-7.83 7.908c-.268.271-.701.27-.969 0-.268-.269-.268-.707 0-.979L13.25 10z"/>
</symbol>

<symbol viewBox="0 0 20 20" id="large-arrow-down">
<path d="M17.418 6.109c.272-.268.709-.268.979 0s.271.701 0 .969l-7.908 7.83c-.27.268-.707.268-.979 0l-7.908-7.83c-.27-.268-.27-.701 0-.969.271-.268.709-.268.979 0L10 13.25l7.418-7.141z"/>
</symbol>


<symbol viewBox="0 0 24 24" id="jump-to">
<path d="M19 7v4H5.83l3.58-3.59L8 6l-6 6 6 6 1.41-1.41L5.83 13H21V7z"/>
</symbol>

<symbol viewBox="0 0 24 24" id="expand">
<path d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>
</symbol>

</defs>
</svg>

<div id="swagger-ui"></div>


<script src="https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/3.19.3/swagger-ui-bundle.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/3.19.3/swagger-ui-standalone-preset.js"></script>

<script>

const ui = SwaggerUIBundle({
url: window.location.origin + window.location.pathname + '.yaml',
dom_id: '#swagger-ui',
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIStandalonePreset
],
layout: 'StandaloneLayout',

deepLinking: true,

displayOperationId: true
});



</script>

</body>

</html>

Large diffs are not rendered by default.

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions src/main/resources/reference.conf
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,9 @@ assets {

openapi {

resourcePrefix="io/sinistral/proteus/server/tools/oas"
resourcePrefix="io/sinistral/proteus/server/tools/openapi"

basePath= ${application.path}"/oas"
basePath= ${application.path}"/openapi"

port = ${application.ports.http}

Expand Down
4 changes: 2 additions & 2 deletions src/test/resources/application.conf
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,9 @@ assets {
openapi {


resourcePrefix="io/sinistral/proteus/server/tools/oas"
resourcePrefix="io/sinistral/proteus/server/tools/openapi"

basePath= ${application.path}"/oas"
basePath= ${application.path}"/openapi"

port = ${application.ports.http}

Expand Down

0 comments on commit 7842f51

Please sign in to comment.