You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by jb...@apache.org on 2016/01/18 18:03:33 UTC

cxf-fediz git commit: [FEDIZ-145] Adding Swagger UI for REST API

Repository: cxf-fediz
Updated Branches:
  refs/heads/master 33c86fc33 -> 6b400f10a


[FEDIZ-145] Adding Swagger UI for REST API


Project: http://git-wip-us.apache.org/repos/asf/cxf-fediz/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf-fediz/commit/6b400f10
Tree: http://git-wip-us.apache.org/repos/asf/cxf-fediz/tree/6b400f10
Diff: http://git-wip-us.apache.org/repos/asf/cxf-fediz/diff/6b400f10

Branch: refs/heads/master
Commit: 6b400f10aaafdd0573bc9028c1a482f03e0ddfe2
Parents: 33c86fc
Author: Jan Bernhardt <jb...@talend.com>
Authored: Mon Jan 18 17:55:48 2016 +0100
Committer: Jan Bernhardt <jb...@talend.com>
Committed: Mon Jan 18 18:02:47 2016 +0100

----------------------------------------------------------------------
 services/idp/pom.xml                            |  82 +++++++++-
 .../idp/src/main/webapp/WEB-INF/idp-servlet.xml |   3 +
 .../main/webapp/resources/swagger/index.html    | 156 +++++++++++++++++++
 3 files changed, 235 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf-fediz/blob/6b400f10/services/idp/pom.xml
----------------------------------------------------------------------
diff --git a/services/idp/pom.xml b/services/idp/pom.xml
index baa33f1..c1fa70f 100644
--- a/services/idp/pom.xml
+++ b/services/idp/pom.xml
@@ -28,6 +28,11 @@
     <artifactId>fediz-idp</artifactId>
     <name>Apache Fediz IDP</name>
     <packaging>war</packaging>
+    
+    <properties>
+        <swagger-ui.version>2.1.0</swagger-ui.version>
+    </properties>
+    
     <dependencyManagement>
         <dependencies>
             <dependency>
@@ -242,12 +247,6 @@
         	<artifactId>swagger-jaxrs</artifactId>
         	<version>1.5.6</version>
         </dependency>
-        <dependency>
-           <groupId>org.webjars</groupId>
-           <artifactId>swagger-ui</artifactId>
-           <version>2.1.0</version>
-           <scope>provided</scope>
-       </dependency>
     </dependencies>
     <build>
         <resources>
@@ -337,6 +336,77 @@
                 </configuration>
             </plugin>
             <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <phase>generate-resources</phase>
+                        <goals>
+                            <goal>unpack</goal>
+                        </goals>
+                        <configuration>
+                            <artifactItems>
+                                <artifactItem>
+                                    <groupId>org.webjars</groupId>
+                                    <artifactId>swagger-ui</artifactId>
+                                    <version>${swagger-ui.version}</version>
+                                    <overWrite>true</overWrite>
+                                    <outputDirectory>${project.build.directory}/swagger-ui</outputDirectory>
+                                    <excludes>**/*.gz</excludes>
+                                </artifactItem>
+                            </artifactItems>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-resources-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-swagger-resources-in-place</id>
+                        <phase>process-resources</phase>
+                        <goals>
+                            <goal>copy-resources</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${project.build.directory}/${project.build.finalName}/resources/swagger</outputDirectory>
+                            <resources>
+                                <resource>
+                                    <directory>${project.build.directory}/swagger-ui/META-INF/resources/webjars/swagger-ui/${swagger-ui.version}</directory>
+                                    <excludes>
+                                        <exclude>index.html</exclude>
+                                        <exclude>swagger-ui.min.js</exclude>
+                                    </excludes>
+                                </resource>
+                            </resources>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-antrun-plugin</artifactId>
+                <inherited>true</inherited>
+                <executions>
+                    <execution>
+                        <id>addMatrixParamSupport</id>
+                        <phase>process-resources</phase>
+                        <goals>
+                            <goal>run</goal>
+                        </goals>
+                        <configuration>
+                            <target>
+                                <replace
+                                    file="${project.build.directory}/swagger-ui/META-INF/resources/webjars/swagger-ui/${swagger-ui.version}/swagger-ui.js"
+                                    token="return url + requestUrl + querystring;"
+                                    value="&#xA;var matrixstring = '';&#xA; for (var i = 0; i &lt; this.parameters.length; i++) {&#xA;     var param = this.parameters[i];&#xA; &#xA;     if (param.in === 'matrix') {&#xA;       matrixstring += ';' + this.encodeQueryParam(param.name) + '=' + this.encodeQueryParam(args[param.name]);&#xA;     }&#xA;   }&#xA; &#xA;   var url = this.scheme + '://' + this.host;&#xA; &#xA;   if (this.basePath !== '/') {&#xA;     url += this.basePath;&#xA;   }&#xA;   return url + requestUrl + matrixstring + querystring;" />
+                            </target>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
                 <groupId>org.codehaus.mojo</groupId>
                 <artifactId>build-helper-maven-plugin</artifactId>
                 <executions>

http://git-wip-us.apache.org/repos/asf/cxf-fediz/blob/6b400f10/services/idp/src/main/webapp/WEB-INF/idp-servlet.xml
----------------------------------------------------------------------
diff --git a/services/idp/src/main/webapp/WEB-INF/idp-servlet.xml b/services/idp/src/main/webapp/WEB-INF/idp-servlet.xml
index 003969a..638a9c8 100644
--- a/services/idp/src/main/webapp/WEB-INF/idp-servlet.xml
+++ b/services/idp/src/main/webapp/WEB-INF/idp-servlet.xml
@@ -37,6 +37,9 @@
     <context:component-scan base-package="org.apache.cxf.fediz.service.idp.beans" />
 
     <mvc:resources mapping="/images/**" location="/resources/images/" />
+    
+    <mvc:resources mapping="/swagger/**" location="/resources/swagger/" />
+    
     <mvc:view-controller path="/" view-name="index" />
     <mvc:view-controller path="/federation/up/login" view-name="signinform" />
 

http://git-wip-us.apache.org/repos/asf/cxf-fediz/blob/6b400f10/services/idp/src/main/webapp/resources/swagger/index.html
----------------------------------------------------------------------
diff --git a/services/idp/src/main/webapp/resources/swagger/index.html b/services/idp/src/main/webapp/resources/swagger/index.html
new file mode 100644
index 0000000..223cf1e
--- /dev/null
+++ b/services/idp/src/main/webapp/resources/swagger/index.html
@@ -0,0 +1,156 @@
+<!DOCTYPE html>
+<!--
+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.
+-->
+<html>
+<head>
+  <meta charset="UTF-8">
+    <!-- <ApacheFediz -->
+    <!--<title>Swagger UI</title>-->
+    <title>Swagger UI - Apache Fediz ${project.version}</title>
+    <!-- </ApacheFediz -->
+  <link rel="icon" type="image/png" href="images/favicon-32x32.png" sizes="32x32" />
+  <link rel="icon" type="image/png" href="images/favicon-16x16.png" sizes="16x16" />
+  <link href='css/typography.css' media='screen' rel='stylesheet' type='text/css'/>
+  <link href='css/reset.css' media='screen' rel='stylesheet' type='text/css'/>
+  <link href='css/screen.css' media='screen' rel='stylesheet' type='text/css'/>
+  <link href='css/reset.css' media='print' rel='stylesheet' type='text/css'/>
+  <link href='css/print.css' media='print' rel='stylesheet' type='text/css'/>
+  <script src='lib/jquery-1.8.0.min.js' type='text/javascript'></script>
+  <script src='lib/jquery.slideto.min.js' type='text/javascript'></script>
+  <script src='lib/jquery.wiggle.min.js' type='text/javascript'></script>
+  <script src='lib/jquery.ba-bbq.min.js' type='text/javascript'></script>
+  <script src='lib/handlebars-2.0.0.js' type='text/javascript'></script>
+  <script src='lib/underscore-min.js' type='text/javascript'></script>
+  <script src='lib/backbone-min.js' type='text/javascript'></script>
+  <script src='swagger-ui.js' type='text/javascript'></script>
+  <script src='lib/highlight.7.3.pack.js' type='text/javascript'></script>
+  <script src='lib/jsoneditor.min.js' type='text/javascript'></script>
+  <script src='lib/marked.js' type='text/javascript'></script>
+  <script src='lib/swagger-oauth.js' type='text/javascript'></script>
+
+  <!-- Some basic translations -->
+  <!-- <script src='lang/translator.js' type='text/javascript'></script> -->
+  <!-- <script src='lang/ru.js' type='text/javascript'></script> -->
+  <!-- <script src='lang/en.js' type='text/javascript'></script> -->
+
+  <script type="text/javascript">
+    $(function () {
+        // <ApacheFediz>
+        /*var url = window.location.search.match(/url=([^&]+)/);
+      if (url && url.length > 1) {
+        url = decodeURIComponent(url[1]);
+      } else {
+        url = "http://petstore.swagger.io/v2/swagger.json";
+         }*/
+        var url = window.location.href.substring(0, window.location.href.lastIndexOf('/')) + "/../services/rs/swagger.json";
+        // </ApacheFediz>
+      // Pre load translate...
+      if(window.SwaggerTranslator) {
+        window.SwaggerTranslator.translate();
+      }
+      window.swaggerUi = new SwaggerUi({
+        url: url,
+        dom_id: "swagger-ui-container",
+        supportedSubmitMethods: ['get', 'post', 'put', 'delete', 'patch'],
+        onComplete: function(swaggerApi, swaggerUi){
+          if(typeof initOAuth == "function") {
+            initOAuth({
+              clientId: "your-client-id",
+              clientSecret: "your-client-secret-if-required",
+              realm: "your-realms",
+              appName: "your-app-name", 
+              scopeSeparator: ",",
+              additionalQueryStringParams: {}
+            });
+          }
+          if(window.SwaggerTranslator) {
+            window.SwaggerTranslator.translate();
+          }
+          $('pre code').each(function(i, e) {
+            hljs.highlightBlock(e)
+          });
+          addApiKeyAuthorization();
+        },
+        onFailure: function(data) {
+          log("Unable to Load SwaggerUI");
+        },
+        docExpansion: "none",
+        jsonEditor: false,
+        apisSorter: "alpha",
+        defaultModelRendering: 'schema',
+        showRequestHeaders: false
+      });
+        function addApiKeyAuthorization() {
+          // <ApacheFediz>
+          /*var key = encodeURIComponent($('#input_apiKey')[0].value);
+           if (key && key.trim() != "") {
+            var apiKeyAuth = new SwaggerClient.ApiKeyAuthorization("api_key", key, "query");
+            window.swaggerUi.api.clientAuthorizations.add("api_key", apiKeyAuth);
+            log("added key " + key);
+           }*/
+          var username = $('#input_username').val().trim();
+          var password = $('#input_password').val().trim();
+          if (username !== "" && password !== "") {
+            window.swaggerUi.api.clientAuthorizations.add(
+                    "basicAuth", new SwaggerClient.PasswordAuthorization(username, password));
+        }
+          // </ApacheFediz>
+      }
+        // <ApacheFediz>
+        //$('#input_apiKey').change(addApiKeyAuthorization);
+        $("#input_username").blur(function () {
+          addApiKeyAuthorization();
+        });
+        $("#input_password").blur(function () {
+          addApiKeyAuthorization();
+        });
+        // </ApacheFediz>
+      // if you have an apiKey you would like to pre-populate on the page for demonstration purposes...
+      /*
+        var apiKey = "myApiKeyXXXX123456789";
+        $('#input_apiKey').val(apiKey);
+      */
+      window.swaggerUi.load();
+      function log() {
+        if ('console' in window) {
+          console.log.apply(console, arguments);
+        }
+      }
+  });
+  </script>
+</head>
+
+<body class="swagger-section">
+<div id='header'>
+  <div class="swagger-ui-wrap">
+    <a id="logo" href="http://swagger.io">swagger</a>
+    <form id='api_selector'>
+       <!-- <ApacheFediz -->
+      <!--<div class='input'><input placeholder="http://example.com/api" id="input_baseUrl" name="baseUrl" type="text"/></div>-->
+      <!--<div class='input'><input placeholder="api_key" id="input_apiKey" name="apiKey" type="text"/></div>-->
+      <!--<div class='input'><a id="explore" href="#" data-sw-translate>Explore</a></div>-->
+          <div class='input'><input placeholder="username" id="input_username" name="username" type="text"/></div>
+          <div class='input'><input placeholder="password" id="input_password" name="password" type="password"/></div>
+          <!-- </ApacheFediz -->
+    </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>
+</body>
+</html>
\ No newline at end of file