1 /*
2  *
3  *  * Copyright 2019-2020 the original author or authors.
4  *  *
5  *  * Licensed under the Apache License, Version 2.0 (the "License");
6  *  * you may not use this file except in compliance with the License.
7  *  * You may obtain a copy of the License at
8  *  *
9  *  *      https://www.apache.org/licenses/LICENSE-2.0
10  *  *
11  *  * Unless required by applicable law or agreed to in writing, software
12  *  * distributed under the License is distributed on an "AS IS" BASIS,
13  *  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  * See the License for the specific language governing permissions and
15  *  * limitations under the License.
16  *
17  */

18
19 package org.springdoc.webmvc.ui;
20
21 import java.io.IOException;
22
23 import javax.servlet.http.HttpServletRequest;
24
25 import com.fasterxml.jackson.databind.ObjectMapper;
26 import org.springdoc.core.SwaggerUiOAuthProperties;
27 import org.springdoc.ui.AbstractSwaggerIndexTransformer;
28
29 import org.springframework.core.io.Resource;
30 import org.springframework.util.AntPathMatcher;
31 import org.springframework.util.CollectionUtils;
32 import org.springframework.web.servlet.resource.ResourceTransformer;
33 import org.springframework.web.servlet.resource.ResourceTransformerChain;
34 import org.springframework.web.servlet.resource.TransformedResource;
35
36 public class SwaggerIndexTransformer extends AbstractSwaggerIndexTransformer implements ResourceTransformer {
37
38     public SwaggerIndexTransformer(SwaggerUiOAuthProperties swaggerUiOAuthProperties, ObjectMapper objectMapper) {
39         super(swaggerUiOAuthProperties, objectMapper);
40     }
41
42     @Override
43     public Resource transform(HttpServletRequest request, Resource resource,
44             ResourceTransformerChain transformerChain) throws IOException {
45         final AntPathMatcher antPathMatcher = new AntPathMatcher();
46         boolean isIndexFound = antPathMatcher.match("**/swagger-ui/**/index.html", resource.getURL().toString());
47         if (isIndexFound && !CollectionUtils.isEmpty(swaggerUiOAuthProperties.getConfigParameters())) {
48             String html = readFullyAsString(resource.getInputStream());
49             html = addInitOauth(html);
50             return new TransformedResource(resource, html.getBytes());
51         }
52         else
53             return resource;
54     }
55
56 }