Skip to content

Commit

Permalink
Upgrade to swagger-ui v3 (#76)
Browse files Browse the repository at this point in the history
* Initial work at upgrading to Swagger UI v3

* Upgrade to swagger-ui v3.0.6

* Upgrade test plugins to 2.20

* Upgrade to swagger-ui v3.0.11

* Upgrade to swagger-ui v3.0.12

* feat(oauth2): upgrade oauth2 support to work with swagger v3

* Upgrade to swagger-ui v3.0.18

* Upgrade to swagger-ui v3.1.7
  • Loading branch information
jplock committed Sep 8, 2017
1 parent 9a8ec41 commit 712ce55
Show file tree
Hide file tree
Showing 64 changed files with 365 additions and 26,403 deletions.
Expand Up @@ -34,6 +34,7 @@ public Response auth(@QueryParam("response_type") String responseType,
@QueryParam("client_id") @DefaultValue("") String clientId,
@QueryParam("client_secret") @DefaultValue("") String clientSecret,
@QueryParam("scope") String scope,
@QueryParam("state") String state,
@QueryParam("redirect_uri") String redirectUri,
@QueryParam("realm") @DefaultValue("") String realm)
throws URISyntaxException {
Expand All @@ -54,6 +55,7 @@ public Response auth(@QueryParam("response_type") String responseType,
}

URI redirectWithAccessToken = UriBuilder.fromUri(redirectUri)
.queryParam("state", state)
.queryParam("access_token", MOCKED_OAUTH2_TOKEN).build();
return Response.seeOther(redirectWithAccessToken).build();
}
Expand Down
Expand Up @@ -96,6 +96,13 @@ public String getSwaggerUriPath() {
return uriPathPrefix + "/swagger-static";
}

public String getOAuth2RedirectUriPath() {
final String jerseyRootPath = getJerseyRootPath();
final String uriPathPrefix = jerseyRootPath.equals("/") ? ""
: jerseyRootPath;
return uriPathPrefix + "/oauth2-redirect.html";
}

private String getApplicationContextPath() {
final ServerFactory serverFactory = configuration.getServerFactory();

Expand Down
Expand Up @@ -59,9 +59,9 @@ public void run(T configuration, Environment environment) throws Exception {
configurationHelper.getSwaggerUriPath(), null, "swagger-assets")
.run(environment);

new AssetsBundle("/swagger-static/o2c.html",
configurationHelper.getJerseyRootPath() + "o2c.html", null, "swagger-oauth2-connect")
.run(environment);
new AssetsBundle("/swagger-static/oauth2-redirect.html",
configurationHelper.getOAuth2RedirectUriPath(), null, "swagger-oauth2-connect")
.run(environment);

swaggerBundleConfiguration.build(configurationHelper.getUrlPattern());

Expand Down
220 changes: 118 additions & 102 deletions src/main/resources/io/federecio/dropwizard/swagger/index.ftl
@@ -1,112 +1,128 @@
<#-- @ftlvariable name="" type="io.federecio.dropwizard.swagger.SwaggerView" -->
<!-- HTML for static distribution bundle build -->
<!DOCTYPE html>
<html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=edge">
<title>${title}</title>
<link rel="icon" type="image/png" href="${swaggerAssetsPath}/images/favicon-32x32.png" sizes="32x32" />
<link rel="icon" type="image/png" href="${swaggerAssetsPath}/images/favicon-16x16.png" sizes="16x16" />
<link href='${swaggerAssetsPath}/css/typography.css' media='screen' rel='stylesheet' type='text/css'/>
<link href='${swaggerAssetsPath}/css/reset.css' media='screen' rel='stylesheet' type='text/css'/>
<link href='${swaggerAssetsPath}/css/screen.css' media='screen' rel='stylesheet' type='text/css'/>
<link href='${swaggerAssetsPath}/css/reset.css' media='print' rel='stylesheet' type='text/css'/>
<link href='${swaggerAssetsPath}/css/print.css' media='print' rel='stylesheet' type='text/css'/>

<script src='${swaggerAssetsPath}/lib/object-assign-pollyfill.js' type='text/javascript'></script>
<script src='${swaggerAssetsPath}/lib/jquery-1.8.0.min.js' type='text/javascript'></script>
<script src='${swaggerAssetsPath}/lib/jquery.slideto.min.js' type='text/javascript'></script>
<script src='${swaggerAssetsPath}/lib/jquery.wiggle.min.js' type='text/javascript'></script>
<script src='${swaggerAssetsPath}/lib/jquery.ba-bbq.min.js' type='text/javascript'></script>
<script src='${swaggerAssetsPath}/lib/handlebars-4.0.5.js' type='text/javascript'></script>
<script src='${swaggerAssetsPath}/lib/lodash.min.js' type='text/javascript'></script>
<script src='${swaggerAssetsPath}/lib/backbone-min.js' type='text/javascript'></script>
<script src='${swaggerAssetsPath}/swagger-ui.js' type='text/javascript'></script>
<script src='${swaggerAssetsPath}/lib/highlight.9.1.0.pack.js' type='text/javascript'></script>
<script src='${swaggerAssetsPath}/lib/highlight.9.1.0.pack_extended.js' type='text/javascript'></script>
<script src='${swaggerAssetsPath}/lib/jsoneditor.min.js' type='text/javascript'></script>
<script src='${swaggerAssetsPath}/lib/marked.js' type='text/javascript'></script>
<script src='${swaggerAssetsPath}/lib/swagger-oauth.js' type='text/javascript'></script>

<!-- Some basic translations -->
<!-- <script src='${swaggerAssetsPath}/lang/translator.js' type='text/javascript'></script> -->
<!-- <script src='${swaggerAssetsPath}/lang/ru.js' type='text/javascript'></script> -->
<!-- <script src='${swaggerAssetsPath}/lang/en.js' type='text/javascript'></script> -->

<script type="text/javascript">
$(function () {
hljs.configure({
highlightSizeThreshold: 5000
});
// Pre load translate...
if(window.SwaggerTranslator) {
<title>Swagger UI</title>
<link href="https://fonts.googleapis.com/css?family=Open+Sans:400,700|Source+Code+Pro:300,600|Titillium+Web:400,600,700" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="${swaggerAssetsPath}/swagger-ui.css" >
<link rel="icon" type="image/png" href="${swaggerAssetsPath}/favicon-32x32.png" sizes="32x32" />
<link rel="icon" type="image/png" href="${swaggerAssetsPath}/favicon-16x16.png" sizes="16x16" />
<style>
html
{
box-sizing: border-box;
overflow: -moz-scrollbars-vertical;
overflow-y: scroll;
}
*,
*:before,
*:after
{
box-sizing: inherit;
}
body {
margin:0;
background: #fafafa;
}
</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="${swaggerAssetsPath}/swagger-ui-bundle.js"> </script>
<script src="${swaggerAssetsPath}/swagger-ui-standalone-preset.js"> </script>
<script>
window.onload = function() {
// Build a system
const ui = SwaggerUIBundle({
url: "${contextPath}/swagger.json",
<#if validatorUrl??>
validatorUrl: "${validatorUrl}",
<#else>
validatorUrl: null,
</#if>
dom_id: '#swagger-ui',
deepLinking: true,
supportedSubmitMethods: ['get', 'post', 'put', 'delete', 'patch'],
onComplete: function(swaggerApi, swaggerUi) {
if (window.SwaggerTranslator) {
window.SwaggerTranslator.translate();
}
window.swaggerUi = new SwaggerUi({
url: "${contextPath}/swagger.json",
<#if validatorUrl??>
validatorUrl: "${validatorUrl}",
<#else>
validatorUrl: null,
</#if>
dom_id: "swagger-ui-container",
supportedSubmitMethods: ['get', 'post', 'put', 'delete', 'patch'],
onComplete: function(swaggerApi, swaggerUi){
if(typeof initOAuth == "function") {
initOAuth({
clientId: "${oauth2Configuration.clientId!"your-client-id"}",
clientSecret: "${oauth2Configuration.clientSecret!"your-client-secret-if-required"}",
realm: "${oauth2Configuration.realm!"your-realms"}",
appName: "${oauth2Configuration.appName!"your-app-name"}",
scopeSeparator: "${oauth2Configuration.scopeSeparator!" "}",
additionalQueryStringParams: {
<#list oauth2Configuration.additionalQueryStringParams?keys as additionalQueryStringParamKey>
"${additionalQueryStringParamKey}": "${oauth2Configuration.additionalQueryStringParams[additionalQueryStringParamKey]}"
</#list>
}
});
}
if(window.SwaggerTranslator) {
window.SwaggerTranslator.translate();
}
},
onFailure: function(data) {
log("Unable to Load SwaggerUI");
},
docExpansion: "none",
jsonEditor: false,
apisSorter: "alpha",
defaultModelRendering: 'schema',
showRequestHeaders: false,
showOperationIds: false
});
window.swaggerUi.load();
function log() {
if ('console' in window) {
console.log.apply(console, arguments);
}
}
},
onFailure: function(data) {
log("Unable to Load SwaggerUI");
},
docExpansion: "none",
jsonEditor: false,
apisSorter: "alpha",
defaultModelRendering: 'schema',
showRequestHeaders: false,
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIStandalonePreset
],
plugins: [
SwaggerUIBundle.plugins.DownloadUrl
],
oauth2RedirectUrl: "${contextPath}/oauth2-redirect.html",
layout: "StandaloneLayout"
});
ui.initOAuth({
clientId: "${oauth2Configuration.clientId!"your-client-id"}",
clientSecret: "${oauth2Configuration.clientSecret!"your-client-secret-if-required"}",
realm: "${oauth2Configuration.realm!"your-realms"}",
appName: "${oauth2Configuration.appName!"your-app-name"}",
scopeSeparator: "${oauth2Configuration.scopeSeparator!" "}",
additionalQueryStringParams: {
<#list oauth2Configuration.additionalQueryStringParams?keys as additionalQueryStringParamKey>
"${additionalQueryStringParamKey}": "${oauth2Configuration.additionalQueryStringParams[additionalQueryStringParamKey]}"
</#list>
}
});
</script>
</head>
<body class="swagger-section">
<div id='header'>
<div class="swagger-ui-wrap">
<a id="logo" href="http://swagger.io"><img class="logo__img" alt="swagger" height="30" width="30" src="${swaggerAssetsPath}/images/logo_small.png" /><span class="logo__title">swagger</span></a>
<form id='api_selector'>
<div class='input'><input placeholder="http://example.com/api" id="input_baseUrl" name="baseUrl" type="text"/></div>
<div id='auth_container'></div>
<div class='input'><a id="explore" class="header__btn" href="#" data-sw-translate>Explore</a></div>
</form>
</div>
</div>

<div id="message-bar" class="swagger-ui-wrap" data-sw-translate>&nbsp;</div>
<div id="swagger-ui-container" class="swagger-ui-wrap"></div>
window.ui = ui
}
</script>
</body>

</html>
1 change: 0 additions & 1 deletion src/main/resources/swagger-static/css/print.css

This file was deleted.

1 change: 0 additions & 1 deletion src/main/resources/swagger-static/css/reset.css

This file was deleted.

1 change: 0 additions & 1 deletion src/main/resources/swagger-static/css/screen.css

This file was deleted.

1 change: 0 additions & 1 deletion src/main/resources/swagger-static/css/style.css

This file was deleted.

Empty file.
File renamed without changes
File renamed without changes
Binary file not shown.
Binary file not shown.
Binary file removed src/main/resources/swagger-static/images/collapse.gif
Binary file not shown.
Binary file removed src/main/resources/swagger-static/images/expand.gif
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file removed src/main/resources/swagger-static/images/logo_small.png
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

0 comments on commit 712ce55

Please sign in to comment.