From e3a813403b0d5a312400d1968e72b4aba59dfebc Mon Sep 17 00:00:00 2001 From: dcanar9 Date: Tue, 29 Nov 2022 16:45:48 -0700 Subject: [PATCH 1/3] pom update --- pom.xml | 309 ++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 257 insertions(+), 52 deletions(-) diff --git a/pom.xml b/pom.xml index 3b18c7c6..d25001af 100644 --- a/pom.xml +++ b/pom.xml @@ -5,33 +5,18 @@ api jar ${project.groupId}:${project.artifactId} - 3.4.52 + 3.4.53 Hygieia Rest API Layer - https://github.com/Hygieia/api + https://github.com/hygieia/api - scm:git:https://github.com/Hygieia/api.git/ - scm:git:https://github.com/Hygieia/api.git/ - https://github.com/Hygieia/api.git + scm:git:https://github.com/hygieia/api.git/ + scm:git:https://github.com/hygieia/api.git/ + https://github.com/hygieia/api.git HEAD - - Amit Mawkin - - - Tapabrata Topo Pal - tapabrata.pal@capitalone.com - CapitalOne - http://www.capitalone.com - - - Raghavendra Vema - ragha.vema@capitalone.com - CapitalOne - http://www.capitalone.com - Nireesh Thiruveedula nireesh.thiruveedula@capitalone.com @@ -39,8 +24,8 @@ http://www.capitalone.com - Stephen Hughes - stephen.hughes@capitalone.com + Aravindhan Murugan + aravindhan.murugan@capitalone.com CapitalOne http://www.capitalone.com @@ -48,44 +33,46 @@ Hygieia - https://www.github.com/Hygieia + https://www.github.com/hygieia org.springframework.boot spring-boot-starter-parent - 1.5.22.RELEASE + 2.5.12 - 3.15.46 - 4.2.18.RELEASE - 8.5.70 + 4.0.1 + 5.5.4 + 9.0.65 1.9.4 1.14 4.1 2.4 3.10 2.2.0-RC2 - 29.0-jre + 30.0-jre 6.1.5.Final - 2.10.3 + 2.10.5 1.18 - 1.2.3 - 3.6.4 + 1.2.9 + 4.0.6 0.6.0 2.4.0 3.9.0 + 1.31 + 4.5.13 0.13 4.3.0 0.8.3 - 0.200 + 0.0 300 - 1.8 - 1.8 + 11 + 11 3.1 2.12.1 3.0.0 @@ -97,21 +84,14 @@ 3.7.1 3.6 UTF-8 - https://github.com/Hygieia/api + https://github.cloud.capitalone.com/Hygieia/hygieia-api-ace site-content 3.1.11 - ${project.version} - Hygieia_api - hygieia-oss - https://sonarcloud.io - f5c0da06f2aa2de97db7a17008c7100a3d6553d3 + + hygieia-api-ace - - ossrh - https://oss.sonatype.org/content/repositories/snapshots - ossrh https://oss.sonatype.org/service/local/staging/deploy/maven2/ @@ -133,16 +113,111 @@ + + org.springframework + spring-core + 5.3.20 + + + org.springframework + spring-beans + 5.3.20 + org.springframework.boot spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-tomcat + + + + org.springframework.boot + spring-boot-starter + org.springframework.boot spring-boot-starter-security + + + org.springframework.security + spring-security-web + + + + + org.springframework.boot + spring-boot-starter-tomcat + 2.7.1 + + + + + org.apache.tomcat.embed + tomcat-embed-core + ${tomcat.version} + + + + org.apache.tomcat.embed + tomcat-embed-jasper + ${tomcat.version} + + + + org.apache.tomcat.embed + tomcat-embed-websocket + ${tomcat.version} + + + + org.apache.tomcat.embed + tomcat-embed-el + ${tomcat.version} + + + org.springframework.security + spring-security-web + 5.6.4 + + + + org.springframework.data + spring-data-mongodb + 3.3.5 + + + + org.springframework + spring-context + 5.3.22 + + org.springframework.security + spring-security-crypto + 5.6.4 + + + + + javax.servlet + javax.servlet-api + 4.0.1 + provided + + + + + org.owasp.esapi + esapi + 2.5.0.0 + + + org.springframework.security spring-security-ldap @@ -164,6 +239,25 @@ spring-boot-starter-test test + + junit + junit + 4.13 + test + + + org.junit.vintage + junit-vintage-engine + 5.4.0 + test + + + + org.springframework.boot + spring-boot-starter-data-mongodb + 2.5.3 + + @@ -176,17 +270,31 @@ com.fasterxml.jackson.core jackson-databind + 2.14.0-rc2 + + + com.fasterxml.jackson.core + jackson-core + 2.13.4 - com.fasterxml.jackson.core jackson-annotations - com.fasterxml.jackson.dataformat jackson-dataformat-xml + 2.12.6 + + + + + com.querydsl + querydsl-mongodb + 5.0.0 + + @@ -194,17 +302,74 @@ springfox-swagger2 ${springfox.version} - + + + + + + org.junit.jupiter + junit-jupiter-engine + 5.7.2 + test + + + org.junit.jupiter + junit-jupiter-api + 5.7.2 + test + + + + org.junit.platform + junit-platform-launcher + 1.8.2 + test + + + + org.mockito + mockito-junit-jupiter + 2.23.0 + test + + + + com.jayway.jsonpath + json-path + test + + + io.rest-assured + spring-mock-mvc + test - org.springframework.security spring-security-test test + + + org.springframework.security + spring-security-web + + + + + org.projectlombok + lombok + 1.18.24 + provided + + + + org.yaml + snakeyaml + 1.33 @@ -225,7 +390,7 @@ - api + hygieia-api-ace org.springframework.boot @@ -240,6 +405,47 @@ ${java.compilation.target} + + org.apache.maven.plugins + maven-release-plugin + + + org.sonatype.plexus + plexus-cipher + 1.4 + + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.0.0-M7 + + + org.junit.jupiter + junit-jupiter-engine + 5.6.2 + + + + + org.apache.maven.plugins maven-checkstyle-plugin @@ -672,10 +878,9 @@ org.apache.maven.plugins maven-compiler-plugin - 3.5.1 - 1.8 - 1.8 + 11 + 11 From b88d6bca1a36b0d8657ac79028d532d43eb1eacf Mon Sep 17 00:00:00 2001 From: dcanar9 Date: Tue, 29 Nov 2022 17:23:54 -0700 Subject: [PATCH 2/3] java 11 --- .github/workflows/maven-pr-checks.yml | 4 ++-- .travis.yml | 2 +- .../dashboard/service/CollectorItemServiceImpl.java | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/maven-pr-checks.yml b/.github/workflows/maven-pr-checks.yml index a6b0f4a7..add4d24c 100755 --- a/.github/workflows/maven-pr-checks.yml +++ b/.github/workflows/maven-pr-checks.yml @@ -10,10 +10,10 @@ jobs: steps: - uses: actions/checkout@v1 - - name: Set up JDK 1.8 + - name: Set up JDK 11 uses: actions/setup-java@v1 with: - java-version: 1.8 + java-version: 11 - name: Build with Maven run: mvn test --file pom.xml diff --git a/.travis.yml b/.travis.yml index 0cf3086c..40bf92e2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: java jdk: - - openjdk8 + - openjdk11 services: - docker diff --git a/src/main/java/com/capitalone/dashboard/service/CollectorItemServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/CollectorItemServiceImpl.java index d6186846..5fc40bbc 100644 --- a/src/main/java/com/capitalone/dashboard/service/CollectorItemServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/CollectorItemServiceImpl.java @@ -73,7 +73,7 @@ public ResponseEntity cleanup(String collectorTypeString, String collect for (CollectorItem collectorItem : collectorItems) { if (!hasComponent(collectorType, collectorItem.getId())) { - String loggingPrefix = String.format("cleanup :: Removing (#%d of %d):: could not find a dashboard for the collectorItem with the following options:" + String loggingPrefix = String.format("cleanup :: Removing (#%d of %d) :: could not find a dashboard for the collectorItem with the following options:" ,collectorItems.indexOf(collectorItem)+1, collectorItems.size()); logDeletedCollectorItem(collectorType, collectorItem, loggingPrefix); From c05388b7ffa8d9323c283b5dbf237e98729993ec Mon Sep 17 00:00:00 2001 From: dcanar9 Date: Tue, 29 Nov 2022 17:42:39 -0700 Subject: [PATCH 3/3] src --- .../com/capitalone/dashboard/Application.java | 2 +- .../access/MethodLevelSecurityHandler.java | 7 +- .../ldap/CustomUserDetailsContextMapper.java | 5 +- .../openid/OpenIdAuthenticationFilter.java | 2 +- .../OpenIdAuthenticationServiceImpl.java | 6 +- .../auth/sso/SsoAuthenticationFilter.java | 8 +- .../sso/SsoAuthenticationServiceImpl.java | 5 +- .../auth/sso/SsoAuthenticationUtil.java | 5 +- .../auth/token/JwtAuthenticationFilter.java | 7 +- .../token/TokenAuthenticationServiceImpl.java | 6 +- .../dashboard/config/WebSecurityConfig.java | 28 +- .../dashboard/logging/LoggingFilter.java | 5 +- .../request/DashboardRemoteRequest.java | 1 - .../dashboard/rest/BuildController.java | 3 +- .../dashboard/rest/CollectorController.java | 3 +- .../rest/CollectorItemController.java | 6 +- .../dashboard/rest/DashboardController.java | 3 +- .../rest/DefaultTestResultController.java | 10 +- .../dashboard/rest/PingController.java | 5 +- .../service/AutoDiscoveryServiceImpl.java | 4 +- .../service/BinaryArtifactServiceImpl.java | 4 +- .../dashboard/service/BuildServiceImpl.java | 43 +- .../service/CloudInstanceServiceImpl.java | 4 +- .../service/CloudSubnetServiceImpl.java | 4 +- .../CloudVirtualNetworkServiceImpl.java | 2 +- .../service/CloudVolumeServiceImpl.java | 4 +- .../dashboard/service/CmdbServiceImpl.java | 2 +- .../service/CodeQualityServiceImpl.java | 6 +- .../service/CollectorItemServiceImpl.java | 4 +- .../service/CollectorServiceAspect.java | 2 +- .../dashboard/service/CommitServiceImpl.java | 12 +- .../service/ConfigurationServiceImpl.java | 2 +- .../service/DashboardRemoteServiceImpl.java | 2 +- .../service/DashboardServiceImpl.java | 35 +- .../DefaultAuthenticationServiceImpl.java | 4 +- .../dashboard/service/DeployServiceImpl.java | 6 +- .../service/DynamicPipelineServiceImpl.java | 32 +- .../service/FeatureFlagServiceImpl.java | 3 +- .../dashboard/service/FeatureServiceImpl.java | 34 +- .../GenericCollectorItemServiceImpl.java | 2 +- .../service/GitRequestServiceImpl.java | 8 +- .../service/LibraryPolicyServiceImpl.java | 6 +- .../service/LogAnalysisServiceImpl.java | 6 +- .../service/Monitor2ServiceImpl.java | 8 +- .../service/PerformanceServiceImpl.java | 13 +- .../service/PipelineServiceImpl.java | 8 +- .../service/RallyFeatureServiceImpl.java | 2 +- .../dashboard/service/ScopeServiceImpl.java | 12 +- .../service/ScoreDashboardServiceImpl.java | 7 +- .../service/ServiceAccountServiceImpl.java | 11 +- .../dashboard/service/ServiceServiceImpl.java | 12 +- .../service/TeamInventoryServiceImpl.java | 2 +- .../dashboard/service/TeamServiceImpl.java | 10 +- .../service/TemplateServiceImpl.java | 4 +- .../service/TestResultServiceImpl.java | 21 +- .../service/UserInfoServiceImpl.java | 6 +- .../datasync/ArtifactDataSyncDelegate.java | 5 +- .../webhook/datasync/DataSyncUtils.java | 8 +- .../datasync/GithubDataSyncDelegate.java | 13 +- .../LibraryPolicyDataSyncDelegate.java | 5 +- .../datasync/SonarDataSyncDelegate.java | 5 +- .../StaticSecurityDataSyncDelegate.java | 5 +- .../datasync/TestDataSyncDelegate.java | 5 +- .../webhook/github/GitHubCommitV3.java | 13 +- .../webhook/github/GitHubIssueV3.java | 13 +- .../webhook/github/GitHubPullRequestV3.java | 21 +- .../webhook/github/GitHubSyncServiceImpl.java | 4 +- .../dashboard/webhook/github/GitHubV3.java | 21 +- .../sonarqube/SonarQubeHookServiceImpl.java | 2 +- src/main/resources/.esapi/ESAPI.properties | 455 + .../resources/.esapi/validation.properties | 36 + src/main/resources/application.properties | 7 - src/main/resources/logback.xml | 58 +- .../resources/static/swagger/css/print.css | 1498 - .../resources/static/swagger/css/reset.css | 131 - .../resources/static/swagger/css/screen.css | 1629 -- .../resources/static/swagger/css/style.css | 301 - .../static/swagger/css/typography.css | 15 - .../static/swagger/fonts/DroidSans-Bold.ttf | Bin 42480 -> 0 bytes .../static/swagger/fonts/DroidSans.ttf | Bin 41028 -> 0 bytes .../static/swagger/images/collapse.gif | Bin 69 -> 0 bytes .../static/swagger/images/expand.gif | Bin 73 -> 0 bytes .../static/swagger/images/explorer_icons.png | Bin 5763 -> 0 bytes .../static/swagger/images/favicon-16x16.png | Bin 645 -> 0 bytes .../static/swagger/images/favicon-32x32.png | Bin 1654 -> 0 bytes .../static/swagger/images/favicon.ico | Bin 5430 -> 0 bytes .../static/swagger/images/logo_small.png | Bin 770 -> 0 bytes .../static/swagger/images/pet_store_api.png | Bin 824 -> 0 bytes .../static/swagger/images/throbber.gif | Bin 9257 -> 0 bytes .../static/swagger/images/wordnik_api.png | Bin 980 -> 0 bytes src/main/resources/static/swagger/index.html | 127 - src/main/resources/static/swagger/lang/en.js | 56 - src/main/resources/static/swagger/lang/es.js | 53 - src/main/resources/static/swagger/lang/fr.js | 54 - src/main/resources/static/swagger/lang/geo.js | 56 - src/main/resources/static/swagger/lang/it.js | 52 - src/main/resources/static/swagger/lang/ja.js | 53 - src/main/resources/static/swagger/lang/pl.js | 53 - src/main/resources/static/swagger/lang/pt.js | 53 - src/main/resources/static/swagger/lang/ru.js | 56 - src/main/resources/static/swagger/lang/tr.js | 53 - .../static/swagger/lang/translator.js | 39 - .../resources/static/swagger/lang/zh-cn.js | 53 - .../static/swagger/lib/backbone-min.js | 888 - .../static/swagger/lib/handlebars-2.0.0.js | 1779 -- .../swagger/lib/highlight.9.1.0.pack.js | 453 - .../lib/highlight.9.1.0.pack_extended.js | 34 - .../static/swagger/lib/jquery-1.8.0.min.js | 2759 -- .../static/swagger/lib/jquery.ba-bbq.min.js | 254 - .../static/swagger/lib/jquery.slideto.min.js | 11 - .../static/swagger/lib/jquery.wiggle.min.js | 26 - .../static/swagger/lib/js-yaml.min.js | 1307 - .../static/swagger/lib/jsoneditor.min.js | 2418 -- .../static/swagger/lib/lodash.min.js | 2197 -- .../resources/static/swagger/lib/marked.js | 1288 - .../static/swagger/lib/swagger-oauth.js | 338 - src/main/resources/static/swagger/o2c.html | 21 - .../resources/static/swagger/swagger-ui.js | 23162 ---------------- .../static/swagger/swagger-ui.min.js | 7772 ------ src/main/resources/version.properties | 2 +- .../auth/DefaultAuthenticationTest.java | 4 +- .../dashboard/auth/DefaultSecurityTest.java | 6 +- .../MethodLevelSecurityHandlerTest.java | 11 +- .../OpenIdAuthenticationServiceImplTest.java | 2 + .../dashboard/config/FongoConfig.java | 19 - .../logging/KeyValueLoggingFilterTest.java | 140 - .../dashboard/logging/LoggingFilterTest.java | 2 +- .../rest/CollectorControllerTest.java | 2 + .../dashboard/rest/DeployControllerTest.java | 4 +- .../AutoDiscoveryRemoteServiceTest.java | 195 - .../dashboard/service/BuildServiceTest.java | 46 +- .../service/CodeQualityServiceTest.java | 8 +- .../service/CollectorServiceTest.java | 26 +- .../dashboard/service/CommitServiceTest.java | 10 +- .../service/ConfigurationServiceTest.java | 4 +- .../service/DashboardRemoteServiceTest.java | 393 - .../service/DashboardServiceTest.java | 146 +- .../service/DataSyncServiceTest.java | 12 +- .../dashboard/service/DeployServiceTest.java | 18 +- .../DynamicPipelineServiceImplTest.java | 8 +- .../service/FeatureServiceImplTest.java | 28 +- .../GenericCollectorItemServiceImplTest.java | 11 +- .../service/GitRequestServiceTest.java | 14 +- .../service/LogAnalysisServiceImplTest.java | 18 +- .../service/PipelineServiceTest.java | 4 +- .../dashboard/service/ServiceServiceTest.java | 45 +- .../service/TeamServiceImplTest.java | 4 +- .../service/TemplateServiceTest.java | 2 +- .../service/TestResultServiceTest.java | 22 +- .../service/UserInfoServiceImplTest.java | 2 + .../capitalone/dashboard/util/TestUtil.java | 4 +- .../webhook/github/GitHubCommitV3Test.java | 4 + .../webhook/github/GitHubIssueV3Test.java | 2 + .../github/GitHubPullRequestV3Test.java | 4 +- 154 files changed, 1107 insertions(+), 50294 deletions(-) create mode 100644 src/main/resources/.esapi/ESAPI.properties create mode 100644 src/main/resources/.esapi/validation.properties delete mode 100644 src/main/resources/application.properties delete mode 100644 src/main/resources/static/swagger/css/print.css delete mode 100644 src/main/resources/static/swagger/css/reset.css delete mode 100644 src/main/resources/static/swagger/css/screen.css delete mode 100644 src/main/resources/static/swagger/css/style.css delete mode 100644 src/main/resources/static/swagger/css/typography.css delete mode 100644 src/main/resources/static/swagger/fonts/DroidSans-Bold.ttf delete mode 100644 src/main/resources/static/swagger/fonts/DroidSans.ttf delete mode 100644 src/main/resources/static/swagger/images/collapse.gif delete mode 100644 src/main/resources/static/swagger/images/expand.gif delete mode 100644 src/main/resources/static/swagger/images/explorer_icons.png delete mode 100755 src/main/resources/static/swagger/images/favicon-16x16.png delete mode 100755 src/main/resources/static/swagger/images/favicon-32x32.png delete mode 100755 src/main/resources/static/swagger/images/favicon.ico delete mode 100644 src/main/resources/static/swagger/images/logo_small.png delete mode 100644 src/main/resources/static/swagger/images/pet_store_api.png delete mode 100644 src/main/resources/static/swagger/images/throbber.gif delete mode 100644 src/main/resources/static/swagger/images/wordnik_api.png delete mode 100644 src/main/resources/static/swagger/index.html delete mode 100644 src/main/resources/static/swagger/lang/en.js delete mode 100644 src/main/resources/static/swagger/lang/es.js delete mode 100644 src/main/resources/static/swagger/lang/fr.js delete mode 100644 src/main/resources/static/swagger/lang/geo.js delete mode 100644 src/main/resources/static/swagger/lang/it.js delete mode 100755 src/main/resources/static/swagger/lang/ja.js delete mode 100644 src/main/resources/static/swagger/lang/pl.js delete mode 100644 src/main/resources/static/swagger/lang/pt.js delete mode 100644 src/main/resources/static/swagger/lang/ru.js delete mode 100644 src/main/resources/static/swagger/lang/tr.js delete mode 100644 src/main/resources/static/swagger/lang/translator.js delete mode 100644 src/main/resources/static/swagger/lang/zh-cn.js delete mode 100644 src/main/resources/static/swagger/lib/backbone-min.js delete mode 100644 src/main/resources/static/swagger/lib/handlebars-2.0.0.js delete mode 100644 src/main/resources/static/swagger/lib/highlight.9.1.0.pack.js delete mode 100644 src/main/resources/static/swagger/lib/highlight.9.1.0.pack_extended.js delete mode 100644 src/main/resources/static/swagger/lib/jquery-1.8.0.min.js delete mode 100644 src/main/resources/static/swagger/lib/jquery.ba-bbq.min.js delete mode 100644 src/main/resources/static/swagger/lib/jquery.slideto.min.js delete mode 100644 src/main/resources/static/swagger/lib/jquery.wiggle.min.js delete mode 100644 src/main/resources/static/swagger/lib/js-yaml.min.js delete mode 100644 src/main/resources/static/swagger/lib/jsoneditor.min.js delete mode 100644 src/main/resources/static/swagger/lib/lodash.min.js delete mode 100644 src/main/resources/static/swagger/lib/marked.js delete mode 100644 src/main/resources/static/swagger/lib/swagger-oauth.js delete mode 100644 src/main/resources/static/swagger/o2c.html delete mode 100644 src/main/resources/static/swagger/swagger-ui.js delete mode 100644 src/main/resources/static/swagger/swagger-ui.min.js delete mode 100644 src/test/java/com/capitalone/dashboard/config/FongoConfig.java delete mode 100644 src/test/java/com/capitalone/dashboard/logging/KeyValueLoggingFilterTest.java delete mode 100644 src/test/java/com/capitalone/dashboard/service/AutoDiscoveryRemoteServiceTest.java delete mode 100644 src/test/java/com/capitalone/dashboard/service/DashboardRemoteServiceTest.java diff --git a/src/main/java/com/capitalone/dashboard/Application.java b/src/main/java/com/capitalone/dashboard/Application.java index 2aad11ba..c72577c7 100644 --- a/src/main/java/com/capitalone/dashboard/Application.java +++ b/src/main/java/com/capitalone/dashboard/Application.java @@ -4,7 +4,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.support.SpringBootServletInitializer; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.context.annotation.Bean; import com.capitalone.dashboard.config.MongoConfig; diff --git a/src/main/java/com/capitalone/dashboard/auth/access/MethodLevelSecurityHandler.java b/src/main/java/com/capitalone/dashboard/auth/access/MethodLevelSecurityHandler.java index 0f22b385..75522cbe 100644 --- a/src/main/java/com/capitalone/dashboard/auth/access/MethodLevelSecurityHandler.java +++ b/src/main/java/com/capitalone/dashboard/auth/access/MethodLevelSecurityHandler.java @@ -10,6 +10,8 @@ import com.capitalone.dashboard.model.Owner; import com.capitalone.dashboard.repository.DashboardRepository; +import java.util.Optional; + @Component public class MethodLevelSecurityHandler { @@ -21,10 +23,11 @@ public MethodLevelSecurityHandler(DashboardRepository dashboardRepository) { } public boolean isOwnerOfDashboard(ObjectId dashboardId) { - Dashboard dashboard = dashboardRepository.findOne(dashboardId); - if (dashboard == null) { + Optional dashboardOptional = dashboardRepository.findById(dashboardId); + if (dashboardOptional.isEmpty()) { return false; } + Dashboard dashboard = dashboardOptional.get(); String username = AuthenticationUtil.getUsernameFromContext(); AuthType authType = AuthenticationUtil.getAuthTypeFromContext(); diff --git a/src/main/java/com/capitalone/dashboard/auth/ldap/CustomUserDetailsContextMapper.java b/src/main/java/com/capitalone/dashboard/auth/ldap/CustomUserDetailsContextMapper.java index 6f022cdb..efb4ccba 100644 --- a/src/main/java/com/capitalone/dashboard/auth/ldap/CustomUserDetailsContextMapper.java +++ b/src/main/java/com/capitalone/dashboard/auth/ldap/CustomUserDetailsContextMapper.java @@ -1,6 +1,7 @@ package com.capitalone.dashboard.auth.ldap; -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Configuration; import org.springframework.ldap.core.DirContextAdapter; import org.springframework.ldap.core.DirContextOperations; @@ -14,7 +15,7 @@ @Configuration public class CustomUserDetailsContextMapper extends LdapUserDetailsMapper { - private static final Logger LOGGER = Logger.getLogger(CustomUserDetailsContextMapper.class); + private static final Logger LOGGER = LoggerFactory.getLogger(CustomUserDetailsContextMapper.class); @Override public CustomUserDetails mapUserFromContext(DirContextOperations ctx, String username, Collection authorities) { diff --git a/src/main/java/com/capitalone/dashboard/auth/openid/OpenIdAuthenticationFilter.java b/src/main/java/com/capitalone/dashboard/auth/openid/OpenIdAuthenticationFilter.java index bdee0e6c..2a07924c 100644 --- a/src/main/java/com/capitalone/dashboard/auth/openid/OpenIdAuthenticationFilter.java +++ b/src/main/java/com/capitalone/dashboard/auth/openid/OpenIdAuthenticationFilter.java @@ -15,7 +15,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; -@Component + public class OpenIdAuthenticationFilter extends AbstractAuthenticationProcessingFilter { @Autowired diff --git a/src/main/java/com/capitalone/dashboard/auth/openid/OpenIdAuthenticationServiceImpl.java b/src/main/java/com/capitalone/dashboard/auth/openid/OpenIdAuthenticationServiceImpl.java index 2d704bed..32d2bc30 100644 --- a/src/main/java/com/capitalone/dashboard/auth/openid/OpenIdAuthenticationServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/auth/openid/OpenIdAuthenticationServiceImpl.java @@ -57,12 +57,12 @@ public OpenIdAuthenticationServiceImpl(AuthProperties authProperties, RestClient @Override public void addAuthentication(HttpServletResponse response, Authentication authentication) { - String jwt = Jwts.builder().setSubject(authentication.getName()) + char[] jwt = Jwts.builder().setSubject(authentication.getName()) .claim(DETAILS_CLAIM, authentication.getDetails()) .claim(ROLES_CLAIM, getRoles(authentication.getAuthorities())) .setExpiration(new Date(System.currentTimeMillis() + authProperties.getExpirationTime())) - .signWith(SignatureAlgorithm.HS512, authProperties.getSecret()).compact(); - response.addHeader(AUTH_RESPONSE_HEADER, jwt); + .signWith(SignatureAlgorithm.HS512, authProperties.getSecret()).compact().toCharArray(); + response.addHeader(AUTH_RESPONSE_HEADER, String.valueOf(jwt)); } diff --git a/src/main/java/com/capitalone/dashboard/auth/sso/SsoAuthenticationFilter.java b/src/main/java/com/capitalone/dashboard/auth/sso/SsoAuthenticationFilter.java index 7c703ecc..d39ff64e 100644 --- a/src/main/java/com/capitalone/dashboard/auth/sso/SsoAuthenticationFilter.java +++ b/src/main/java/com/capitalone/dashboard/auth/sso/SsoAuthenticationFilter.java @@ -7,7 +7,9 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.apache.log4j.Logger; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.core.Authentication; @@ -17,9 +19,9 @@ import com.capitalone.dashboard.auth.AuthenticationResultHandler; -@Component + public class SsoAuthenticationFilter extends UsernamePasswordAuthenticationFilter { - private static final Logger LOGGER = Logger.getLogger(SsoAuthenticationFilter.class); + private static final Logger LOGGER = LoggerFactory.getLogger(SsoAuthenticationFilter.class); @Autowired private SsoAuthenticationService ssoAuthenticationService; diff --git a/src/main/java/com/capitalone/dashboard/auth/sso/SsoAuthenticationServiceImpl.java b/src/main/java/com/capitalone/dashboard/auth/sso/SsoAuthenticationServiceImpl.java index 640bf780..02a7baf9 100644 --- a/src/main/java/com/capitalone/dashboard/auth/sso/SsoAuthenticationServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/auth/sso/SsoAuthenticationServiceImpl.java @@ -5,7 +5,8 @@ import java.util.HashMap; import java.util.Map; -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.Authentication; import org.springframework.security.core.GrantedAuthority; @@ -17,7 +18,7 @@ @Component public class SsoAuthenticationServiceImpl implements SsoAuthenticationService { - private static final Logger LOGGER = Logger.getLogger(SsoAuthenticationServiceImpl.class); + private static final Logger LOGGER = LoggerFactory.getLogger(SsoAuthenticationServiceImpl.class); @Autowired private SsoAuthenticationUtil ssoAuthenticationUtil; diff --git a/src/main/java/com/capitalone/dashboard/auth/sso/SsoAuthenticationUtil.java b/src/main/java/com/capitalone/dashboard/auth/sso/SsoAuthenticationUtil.java index 8803e071..31b3828f 100644 --- a/src/main/java/com/capitalone/dashboard/auth/sso/SsoAuthenticationUtil.java +++ b/src/main/java/com/capitalone/dashboard/auth/sso/SsoAuthenticationUtil.java @@ -3,7 +3,8 @@ import java.util.ArrayList; import java.util.Map; -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.Authentication; import org.springframework.security.core.GrantedAuthority; @@ -16,7 +17,7 @@ @Component public class SsoAuthenticationUtil { - private static final Logger LOGGER = Logger.getLogger(SsoAuthenticationUtil.class); + private static final Logger LOGGER = LoggerFactory.getLogger(SsoAuthenticationUtil.class); @Autowired private AuthProperties authProperties; diff --git a/src/main/java/com/capitalone/dashboard/auth/token/JwtAuthenticationFilter.java b/src/main/java/com/capitalone/dashboard/auth/token/JwtAuthenticationFilter.java index 2a36ddae..ea12a8a0 100644 --- a/src/main/java/com/capitalone/dashboard/auth/token/JwtAuthenticationFilter.java +++ b/src/main/java/com/capitalone/dashboard/auth/token/JwtAuthenticationFilter.java @@ -3,7 +3,8 @@ import com.capitalone.dashboard.util.CommonConstants; import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.annotation.Order; import org.springframework.security.core.Authentication; @@ -25,7 +26,7 @@ @Order(2) public class JwtAuthenticationFilter extends OncePerRequestFilter { - private static final Logger LOGGER = Logger.getLogger(JwtAuthenticationFilter.class); + private static final Logger LOGGER = LoggerFactory.getLogger(JwtAuthenticationFilter.class); private TokenAuthenticationService tokenAuthenticationService; private static final String PING = "ping"; @@ -116,4 +117,4 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse } } } -} \ No newline at end of file +} diff --git a/src/main/java/com/capitalone/dashboard/auth/token/TokenAuthenticationServiceImpl.java b/src/main/java/com/capitalone/dashboard/auth/token/TokenAuthenticationServiceImpl.java index 514f168f..223ba310 100644 --- a/src/main/java/com/capitalone/dashboard/auth/token/TokenAuthenticationServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/auth/token/TokenAuthenticationServiceImpl.java @@ -42,12 +42,12 @@ public TokenAuthenticationServiceImpl(AuthProperties tokenAuthProperties) { @Override public void addAuthentication(HttpServletResponse response, Authentication authentication) { - String jwt = Jwts.builder().setSubject(authentication.getName()) + char[] jwt = Jwts.builder().setSubject(authentication.getName()) .claim(DETAILS_CLAIM, authentication.getDetails()) .claim(ROLES_CLAIM, getRoles(authentication.getAuthorities())) .setExpiration(new Date(System.currentTimeMillis() + tokenAuthProperties.getExpirationTime())) - .signWith(SignatureAlgorithm.HS512, tokenAuthProperties.getSecret()).compact(); - response.addHeader(AUTH_RESPONSE_HEADER, jwt); + .signWith(SignatureAlgorithm.HS512, tokenAuthProperties.getSecret()).compact().toCharArray(); + response.addHeader(AUTH_RESPONSE_HEADER, String.valueOf(jwt)); } @SuppressWarnings("unchecked") diff --git a/src/main/java/com/capitalone/dashboard/config/WebSecurityConfig.java b/src/main/java/com/capitalone/dashboard/config/WebSecurityConfig.java index 519a21bf..a2031681 100644 --- a/src/main/java/com/capitalone/dashboard/config/WebSecurityConfig.java +++ b/src/main/java/com/capitalone/dashboard/config/WebSecurityConfig.java @@ -17,7 +17,8 @@ import com.capitalone.dashboard.settings.ApiSettings; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.security.Http401AuthenticationEntryPoint; +//import org.springframework.boot.autoconfigure.security.Http401AuthenticationEntryPoint; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; @@ -34,8 +35,12 @@ import org.springframework.security.ldap.authentication.ad.ActiveDirectoryLdapAuthenticationProvider; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; import org.springframework.web.client.RestTemplate; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.CorsConfigurationSource; import java.util.List; +import java.util.Objects; +import java.util.stream.Stream; @Configuration @EnableWebSecurity @@ -64,9 +69,15 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private ApiSettings apiSettings; + @Value("${cors.allowed-origins:}") + private String[] allowedOrigins; + @Override protected void configure(HttpSecurity http) throws Exception { http.headers().cacheControl(); + if (Objects.nonNull(allowedOrigins) && allowedOrigins.length > 0) { + http.cors().configurationSource(corsConfigSource()); + } http.csrf().disable() .authorizeRequests().antMatchers("/appinfo").permitAll() .antMatchers("/registerUser").permitAll() @@ -105,8 +116,7 @@ protected void configure(HttpSecurity http) throws Exception { .addFilterBefore(apiTokenRequestFilter(), UsernamePasswordAuthenticationFilter.class) .addFilterBefore(openIdAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class) .addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class) - .addFilterBefore(githubWebhookRequestFilter(), UsernamePasswordAuthenticationFilter.class) - .exceptionHandling().authenticationEntryPoint(new Http401AuthenticationEntryPoint("Authorization")); + .addFilterBefore(githubWebhookRequestFilter(), UsernamePasswordAuthenticationFilter.class); } @Override @@ -214,5 +224,15 @@ protected ActiveDirectoryLdapAuthenticationProvider activeDirectoryLdapAuthentic public RestClient restClient() { return new RestClient(RestTemplate::new); } - + private CorsConfigurationSource corsConfigSource() { + final CorsConfiguration corsConfig = new CorsConfiguration(); + corsConfig.addAllowedHeader(CorsConfiguration.ALL); + corsConfig.addAllowedMethod(CorsConfiguration.ALL); + corsConfig.addExposedHeader("x-authentication-token"); + Stream.of(allowedOrigins).forEach( + origin -> corsConfig.addAllowedOriginPattern(origin) + ); + + return request -> corsConfig; + } } diff --git a/src/main/java/com/capitalone/dashboard/logging/LoggingFilter.java b/src/main/java/com/capitalone/dashboard/logging/LoggingFilter.java index 0e52fbc4..fe6cc366 100644 --- a/src/main/java/com/capitalone/dashboard/logging/LoggingFilter.java +++ b/src/main/java/com/capitalone/dashboard/logging/LoggingFilter.java @@ -9,9 +9,10 @@ import org.apache.commons.io.output.TeeOutputStream; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.exception.ExceptionUtils; -import org.apache.log4j.Logger; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.annotation.Order; import org.springframework.http.HttpMethod; @@ -57,7 +58,7 @@ @Order(1) public class LoggingFilter implements Filter { - private static final Logger LOGGER = Logger.getLogger("LoggingFilter"); + private static final Logger LOGGER = LoggerFactory.getLogger("LoggingFilter"); private static final String API_USER_KEY = "apiUser"; diff --git a/src/main/java/com/capitalone/dashboard/request/DashboardRemoteRequest.java b/src/main/java/com/capitalone/dashboard/request/DashboardRemoteRequest.java index 51e0e36a..445f2fd4 100644 --- a/src/main/java/com/capitalone/dashboard/request/DashboardRemoteRequest.java +++ b/src/main/java/com/capitalone/dashboard/request/DashboardRemoteRequest.java @@ -6,7 +6,6 @@ import com.capitalone.dashboard.model.CollectorItem; import com.capitalone.dashboard.model.CollectorType; import com.capitalone.dashboard.model.Owner; -import com.capitalone.dashboard.model.WhiteSourceComponent; import com.capitalone.dashboard.util.GitHubParsedUrl; import org.hibernate.validator.constraints.NotEmpty; diff --git a/src/main/java/com/capitalone/dashboard/rest/BuildController.java b/src/main/java/com/capitalone/dashboard/rest/BuildController.java index 3e57794a..dd38599b 100644 --- a/src/main/java/com/capitalone/dashboard/rest/BuildController.java +++ b/src/main/java/com/capitalone/dashboard/rest/BuildController.java @@ -12,6 +12,7 @@ import com.capitalone.dashboard.service.BuildService; import com.capitalone.dashboard.util.CommonConstants; import org.bson.types.ObjectId; +import org.owasp.esapi.ESAPI; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -84,7 +85,7 @@ public ResponseEntity createBuildv2(@Valid @RequestBody BuildDataCreateR @RequestMapping(value = "/v3/build", method = POST, consumes = APPLICATION_JSON_VALUE, produces = APPLICATION_JSON_VALUE) public ResponseEntity createBuildv3(@Valid @RequestBody BuildDataCreateRequest request) throws HygieiaException { - request.setClientReference(httpServletRequest.getHeader(CommonConstants.HEADER_CLIENT_CORRELATION_ID)); + request.setClientReference(ESAPI.encoder().encodeForHTML(httpServletRequest.getHeader(CommonConstants.HEADER_CLIENT_CORRELATION_ID))); String requester = httpServletRequest.getHeader(CommonConstants.HEADER_API_USER); BuildDataCreateResponse response = buildService.createV3(request); String response_message = "Successfully created/updated build : "+ response.getId(); diff --git a/src/main/java/com/capitalone/dashboard/rest/CollectorController.java b/src/main/java/com/capitalone/dashboard/rest/CollectorController.java index d0290c63..d8e5eaab 100644 --- a/src/main/java/com/capitalone/dashboard/rest/CollectorController.java +++ b/src/main/java/com/capitalone/dashboard/rest/CollectorController.java @@ -169,5 +169,4 @@ public ResponseEntity deletePropertiesCase(@PathVariable String id) { collectorService.deletePropertiesInCollectorById(id); return ResponseEntity.noContent().build(); } - -} \ No newline at end of file +} diff --git a/src/main/java/com/capitalone/dashboard/rest/CollectorItemController.java b/src/main/java/com/capitalone/dashboard/rest/CollectorItemController.java index bf4812bf..a228d9e0 100644 --- a/src/main/java/com/capitalone/dashboard/rest/CollectorItemController.java +++ b/src/main/java/com/capitalone/dashboard/rest/CollectorItemController.java @@ -3,6 +3,7 @@ import com.capitalone.dashboard.service.CollectorItemService; import java.util.Objects; import org.apache.commons.lang3.StringUtils; +import org.owasp.esapi.ESAPI; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -24,10 +25,11 @@ public CollectorItemController(CollectorItemService collectorItemService){ @RequestMapping(path="/collector-items/cleanup", method = RequestMethod.DELETE) public ResponseEntity cleanup(@RequestParam(value = "collectorType", required = true, defaultValue = "") String collectorType, @RequestParam(value = "collectorName", required = true, defaultValue = "") String collectorName) { - if (StringUtils.isEmpty(collectorName) || Objects.isNull(collectorType)) { + + if (StringUtils.isEmpty(ESAPI.encoder().encodeForHTML(collectorName)) || Objects.isNull(ESAPI.encoder().encodeForHTML(collectorType))) { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Collector type and name are required parameters"); } - return collectorItemService.cleanup(collectorType, collectorName); + return collectorItemService.cleanup(ESAPI.encoder().encodeForHTML(collectorType), ESAPI.encoder().encodeForHTML(collectorName)); } } diff --git a/src/main/java/com/capitalone/dashboard/rest/DashboardController.java b/src/main/java/com/capitalone/dashboard/rest/DashboardController.java index 89b52ebd..6e91a242 100644 --- a/src/main/java/com/capitalone/dashboard/rest/DashboardController.java +++ b/src/main/java/com/capitalone/dashboard/rest/DashboardController.java @@ -14,6 +14,7 @@ import com.capitalone.dashboard.auth.access.Admin; import com.capitalone.dashboard.util.PaginationHeaderUtility; import org.bson.types.ObjectId; +import org.owasp.esapi.ESAPI; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -487,7 +488,7 @@ public ResponseEntity> myDashboardByTitlePage(@RequestParam(valu @RequestMapping(value = "/dashboard/removeWidgetDuplicates", method = DELETE) public ResponseEntity removeWidgetDuplicates(@RequestParam(value="title", required = false)String title, @RequestParam(value="dryRun", required = true, defaultValue = "true") boolean dryRun){ - String message = dashboardService.removeWidgetDuplicatesHelper(title, dryRun); + String message = dashboardService.removeWidgetDuplicatesHelper(ESAPI.encoder().encodeForHTML(title), dryRun); return ResponseEntity.ok().body(message); } } diff --git a/src/main/java/com/capitalone/dashboard/rest/DefaultTestResultController.java b/src/main/java/com/capitalone/dashboard/rest/DefaultTestResultController.java index f9521aa7..2899bcd7 100644 --- a/src/main/java/com/capitalone/dashboard/rest/DefaultTestResultController.java +++ b/src/main/java/com/capitalone/dashboard/rest/DefaultTestResultController.java @@ -22,6 +22,7 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import org.owasp.esapi.ESAPI; import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; @@ -93,17 +94,16 @@ public ResponseEntity createPerfTestV2(@Valid @RequestBody PerfTestDataC @RequestMapping(value = "/quality/test-result", method = POST, consumes = "application/json;v=3", produces = APPLICATION_JSON_VALUE) public ResponseEntity createTest(@Valid @RequestBody TestCreateRequest request) throws HygieiaException { - String correlation_id = httpServletRequest.getHeader(CommonConstants.HEADER_CLIENT_CORRELATION_ID); - String requester = httpServletRequest.getHeader(CommonConstants.HEADER_API_USER); - request.setClientReference(correlation_id); + char[] requester = httpServletRequest.getHeader(CommonConstants.HEADER_API_USER).toCharArray(); + request.setClientReference(ESAPI.encoder().encodeForHTML(httpServletRequest.getHeader(CommonConstants.HEADER_CLIENT_CORRELATION_ID))); String response = testResultService.createTest(request); //temporary fix to ensure backward compatibility boolean success = !StringUtils.containsIgnoreCase(response, "Hygieia does not support"); HttpStatus httpStatus = success ? HttpStatus.CREATED : HttpStatus.BAD_REQUEST; String response_status = success ? "success" : "failed"; - LOGGER.info("correlation_id=" + correlation_id + ", application=hygieia, service=api, uri=" + httpServletRequest.getRequestURI() + - ", requester=" + requester + ", response_status=" + response_status + ", response_code=" + httpStatus.value() + + LOGGER.info("correlation_id=" + request.getClientReference() + ", application=hygieia, service=api, uri=" + httpServletRequest.getRequestURI() + + ", requester=" + String.valueOf(requester) + ", response_status=" + response_status + ", response_code=" + httpStatus.value() + ", response_status_message=" + response + ", test_type=" + request.getTestType() + ", test_source_format="+request.getSourceFormat() + ", test_source=" + request.getSource() + ", target_app_name=" + request.getTargetAppName() + ", target_service_name=" + request.getTargetServiceName() + diff --git a/src/main/java/com/capitalone/dashboard/rest/PingController.java b/src/main/java/com/capitalone/dashboard/rest/PingController.java index 1e256fa2..0f28e15d 100644 --- a/src/main/java/com/capitalone/dashboard/rest/PingController.java +++ b/src/main/java/com/capitalone/dashboard/rest/PingController.java @@ -1,6 +1,7 @@ package com.capitalone.dashboard.rest; -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.PropertySource; import org.springframework.http.HttpStatus; @@ -15,7 +16,7 @@ @RestController public class PingController { - private static final Logger LOGGER = Logger.getLogger(PingController.class); + private static final Logger LOGGER = LoggerFactory.getLogger(PingController.class); @Value("${version.number}") private String versionNumber; diff --git a/src/main/java/com/capitalone/dashboard/service/AutoDiscoveryServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/AutoDiscoveryServiceImpl.java index bfb0e2ea..61a507d4 100644 --- a/src/main/java/com/capitalone/dashboard/service/AutoDiscoveryServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/AutoDiscoveryServiceImpl.java @@ -52,9 +52,9 @@ public AutoDiscovery save(AutoDiscoveryRemoteRequest request) throws HygieiaExce AutoDiscovery autoDiscovery; FeatureFlag featureFlag = featureFlagRepository.findByName(FeatureFlagsEnum.auto_discover.toString()); - if (autoDiscoveryRepository.exists(id)) { + if (autoDiscoveryRepository.existsById(id)) { // update existing AutoDiscovery record with the status from request - autoDiscovery = autoDiscoveryRepository.findOne(id); + autoDiscovery = autoDiscoveryRepository.findById(id).get(); updateAutoDiscovery(autoDiscovery, request, featureFlag); autoDiscovery.setModifiedTimestamp(System.currentTimeMillis()); } else { diff --git a/src/main/java/com/capitalone/dashboard/service/BinaryArtifactServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/BinaryArtifactServiceImpl.java index 7f907185..9414d7e8 100644 --- a/src/main/java/com/capitalone/dashboard/service/BinaryArtifactServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/BinaryArtifactServiceImpl.java @@ -73,7 +73,7 @@ public DataResponse> search(BinaryArtifactSearchRequest } private Build getBuildById(ObjectId buildId){ - return buildRepository.findOne(buildId); + return buildRepository.findById(buildId).orElse(null); } @Override @@ -126,7 +126,7 @@ private void setBuildInformation(BinaryArtifact ba, ObjectId buildId) { ba.setBuildNumber(build.getNumber()); } - JobCollectorItem ci = jobRepository.findOne(build.getCollectorItemId()); + JobCollectorItem ci = jobRepository.findById(build.getCollectorItemId()).orElse(null); if (ci != null) { if (ba.getInstanceUrl() == null) { ba.setInstanceUrl(ci.getInstanceUrl()); diff --git a/src/main/java/com/capitalone/dashboard/service/BuildServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/BuildServiceImpl.java index cf2402f1..a22e550d 100644 --- a/src/main/java/com/capitalone/dashboard/service/BuildServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/BuildServiceImpl.java @@ -27,24 +27,17 @@ import com.querydsl.core.BooleanBuilder; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; -import org.apache.log4j.Logger; import org.bson.types.ObjectId; import org.joda.time.LocalDate; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import javax.validation.constraints.NotNull; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Set; +import java.util.*; @Service public class BuildServiceImpl implements BuildService { @@ -60,7 +53,7 @@ public class BuildServiceImpl implements BuildService { @Autowired private ApiSettings settings; - private static final Logger LOGGER = Logger.getLogger(BuildService.class); + private static final Logger LOGGER = LoggerFactory.getLogger(BuildService.class); @Autowired public BuildServiceImpl(BuildRepository buildRepository, @@ -84,9 +77,9 @@ public BuildServiceImpl(BuildRepository buildRepository, @Override public DataResponse> search(BuildSearchRequest request) { CollectorItem item = null; - Component component = componentRepository.findOne(request.getComponentId()); - if ( (component == null) - || ((item = component.getLastUpdatedCollectorItemForType(CollectorType.Build)) == null) ) { + Optional component = componentRepository.findById(request.getComponentId()); + if ( (component.isEmpty()) + || ((item = component.get().getLastUpdatedCollectorItemForType(CollectorType.Build)) == null) ) { Iterable results = new ArrayList<>(); return new DataResponse<>(results, new Date().getTime()); } @@ -115,13 +108,13 @@ public DataResponse> search(BuildSearchRequest request) { builder.and(build.buildStatus.in(request.getBuildStatuses())); } - Collector collector = collectorRepository.findOne(item.getCollectorId()); + Collector collector = collectorRepository.findById(item.getCollectorId()).orElseGet(() -> new Collector()); Iterable result; if (request.getMax() == null) { result = buildRepository.findAll(builder.getValue()); } else { - PageRequest pageRequest = new PageRequest(0, request.getMax(), Sort.Direction.DESC, "timestamp"); + PageRequest pageRequest = PageRequest.of(0, request.getMax(), Sort.Direction.DESC, "timestamp"); result = buildRepository.findAll(builder.getValue(), pageRequest).getContent(); } @@ -179,8 +172,9 @@ public BuildDataCreateResponse createV3(BuildDataCreateRequest request) throws H } response.setClientReference(clientReference); // Will be refactored soon - CollectorItem buildCollectorItem = collectorItemRepository.findOne(build.getCollectorItemId()); - if (buildCollectorItem != null) { + Optional buildCollectorItemOptional = collectorItemRepository.findById(build.getCollectorItemId()); + if (buildCollectorItemOptional.isPresent()) { + CollectorItem buildCollectorItem = buildCollectorItemOptional.get(); LOGGER.info("correlation_id=" + clientReference + ", build_url=" + build.getBuildUrl() + ", build_duration_millis=" + build.getDuration() @@ -241,11 +235,11 @@ private String buildExecNodeLog (BuildStage buildStage, CollectorItem collectorI private void populateDashboardId(BuildDataCreateResponse response) { if (response == null) return; - CollectorItem collectorItem = collectorItemRepository.findOne(response.getCollectorItemId()); - if (collectorItem == null) return; + Optional collectorItem = collectorItemRepository.findById(response.getCollectorItemId()); + if (collectorItem.isEmpty()) return; List dashboards = dashboardService.getDashboardsByCollectorItems - (Collections.singleton(collectorItem), CollectorType.Build); + (Collections.singleton(collectorItem.get()), CollectorType.Build); /* * retrieve the dashboardId only if 1 dashboard is associated for this collectorItem * */ @@ -362,8 +356,13 @@ private void createSCMCollectorItem(@NotNull RepoBranch repoBranch) { Collector collector = collectorRepository.findByName(settings.getGitToolName()); if (collector == null) return; // check if collector item exists and is disabled. - CollectorItem item = collectorItemRepository.findRepoByUrlAndBranch(collector.getId(), + CollectorItem item = null; + List items = collectorItemRepository.findAllRepoByUrlAndBranch(collector.getId(), repoBranch.getBranch(), repoBranch.getUrl()); + if (CollectionUtils.isNotEmpty(items)) { + items.sort(Comparator.comparing(CollectorItem::getLastUpdated).reversed()); + item = items.get(0); + } if (item == null) { item = new CollectorItem(); item.setCollectorId(collector.getId()); diff --git a/src/main/java/com/capitalone/dashboard/service/CloudInstanceServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/CloudInstanceServiceImpl.java index 3fdb0edb..746ee9c0 100644 --- a/src/main/java/com/capitalone/dashboard/service/CloudInstanceServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/CloudInstanceServiceImpl.java @@ -51,7 +51,7 @@ public Collection getInstanceDetails(CollectorItem item) { } private CollectorItem getCollectorItem(ObjectId componentId) { - Component component = componentRepository.findOne(componentId); + Component component = componentRepository.findById(componentId).orElseGet(() -> new Component()); if (CollectionUtils.isEmpty(component.getCollectorItems())) return null; return component.getCollectorItems().get(CollectorType.Cloud).get(0); } @@ -106,7 +106,7 @@ public Collection refreshInstances(CloudInstanceListRefreshRequest reque } } if (CollectionUtils.isEmpty(toDelete)) { - cloudInstanceRepository.delete(toDelete); + cloudInstanceRepository.deleteAll(toDelete); } return deletedIds; } diff --git a/src/main/java/com/capitalone/dashboard/service/CloudSubnetServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/CloudSubnetServiceImpl.java index 1f6c8a85..419f0e37 100644 --- a/src/main/java/com/capitalone/dashboard/service/CloudSubnetServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/CloudSubnetServiceImpl.java @@ -37,7 +37,7 @@ public CloudSubnetServiceImpl(CloudSubNetworkRepository cloudSubNetworkRepositor private CollectorItem getCollectorItem(ObjectId componentId) { - Component component = componentRepository.findOne(componentId); + Component component = componentRepository.findById(componentId).orElseGet(() -> new Component()); if (CollectionUtils.isEmpty(component.getCollectorItems())) return null; return component.getCollectorItems().get(CollectorType.Cloud).get(0); } @@ -67,7 +67,7 @@ public Collection refreshSubnets(CloudInstanceListRefreshRequest request } } if (CollectionUtils.isEmpty(toDelete)) { - cloudSubNetworkRepository.delete(toDelete); + cloudSubNetworkRepository.deleteAll(toDelete); } return deletedIds; } diff --git a/src/main/java/com/capitalone/dashboard/service/CloudVirtualNetworkServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/CloudVirtualNetworkServiceImpl.java index bc325a85..302e55fd 100644 --- a/src/main/java/com/capitalone/dashboard/service/CloudVirtualNetworkServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/CloudVirtualNetworkServiceImpl.java @@ -39,7 +39,7 @@ public CloudVirtualNetworkServiceImpl(CloudVirtualNetworkRepository cloudVirtual } private CollectorItem getCollectorItem(ObjectId componentId) { - Component component = componentRepository.findOne(componentId); + Component component = componentRepository.findById(componentId).orElseGet(() -> new Component()); if (CollectionUtils.isEmpty(component.getCollectorItems())) return null; return component.getCollectorItems().get(CollectorType.Cloud).get(0); } diff --git a/src/main/java/com/capitalone/dashboard/service/CloudVolumeServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/CloudVolumeServiceImpl.java index 5f99eaa1..aa897d27 100644 --- a/src/main/java/com/capitalone/dashboard/service/CloudVolumeServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/CloudVolumeServiceImpl.java @@ -51,7 +51,7 @@ public Collection getVolumeDetails(CollectorItem item) { } private CollectorItem getCollectorItem(ObjectId componentId) { - Component component = componentRepository.findOne(componentId); + Component component = componentRepository.findById(componentId).orElseGet(() -> new Component()); if (CollectionUtils.isEmpty(component.getCollectorItems())) return null; return component.getCollectorItems().get(CollectorType.Cloud).get(0); } @@ -112,7 +112,7 @@ public Collection refreshVolumes(CloudVolumeListRefreshRequest request) } } if (CollectionUtils.isEmpty(toDelete)) { - cloudVolumeRepository.delete(toDelete); + cloudVolumeRepository.deleteAll(toDelete); } return deletedIds; } diff --git a/src/main/java/com/capitalone/dashboard/service/CmdbServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/CmdbServiceImpl.java index 6eabbe23..a9fb6876 100644 --- a/src/main/java/com/capitalone/dashboard/service/CmdbServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/CmdbServiceImpl.java @@ -52,7 +52,7 @@ public String configurationItemNameByObjectId(ObjectId objectId){ } @Override public Cmdb configurationItemsByObjectId(ObjectId objectId){ - Cmdb cmdb = cmdbRepository.findOne(objectId); + Cmdb cmdb = cmdbRepository.findById(objectId).orElse(null); return cmdb; } @Override diff --git a/src/main/java/com/capitalone/dashboard/service/CodeQualityServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/CodeQualityServiceImpl.java index 6fe420f1..535f74b7 100644 --- a/src/main/java/com/capitalone/dashboard/service/CodeQualityServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/CodeQualityServiceImpl.java @@ -109,7 +109,7 @@ private DataResponse> searchType(CodeQualityRequest reques result = codeQualityRepository.findAll(builder.getValue(), quality.timestamp.desc()); } else { PageRequest pageRequest = - new PageRequest(0, request.getMax(), Sort.Direction.DESC, "timestamp"); + PageRequest.of(0, request.getMax(), Sort.Direction.DESC, "timestamp"); result = codeQualityRepository.findAll(builder.getValue(), pageRequest).getContent(); } String instanceUrl = (String)item.getOptions().get("instanceUrl"); @@ -118,14 +118,14 @@ private DataResponse> searchType(CodeQualityRequest reques if ( instanceUrl != null ) { reportUrl = getReportURL(instanceUrl,"dashboard/index/",projectId); } - Collector collector = collectorRepository.findOne(item.getCollectorId()); + Collector collector = collectorRepository.findById(item.getCollectorId()).orElse(null); long lastExecuted = (collector == null) ? 0 : collector.getLastExecuted(); return new DataResponse<>(result, lastExecuted,reportUrl); } protected CollectorItem getCollectorItem(CodeQualityRequest request) { - Component component = componentRepository.findOne(request.getComponentId()); + Component component = componentRepository.findById(request.getComponentId()).orElse(null); if (component == null) { return null; } diff --git a/src/main/java/com/capitalone/dashboard/service/CollectorItemServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/CollectorItemServiceImpl.java index 5fc40bbc..71b38315 100644 --- a/src/main/java/com/capitalone/dashboard/service/CollectorItemServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/CollectorItemServiceImpl.java @@ -73,11 +73,11 @@ public ResponseEntity cleanup(String collectorTypeString, String collect for (CollectorItem collectorItem : collectorItems) { if (!hasComponent(collectorType, collectorItem.getId())) { - String loggingPrefix = String.format("cleanup :: Removing (#%d of %d) :: could not find a dashboard for the collectorItem with the following options:" + String loggingPrefix = String.format("cleanup :: Removing (#%d of %d):: could not find a dashboard for the collectorItem with the following options:" ,collectorItems.indexOf(collectorItem)+1, collectorItems.size()); logDeletedCollectorItem(collectorType, collectorItem, loggingPrefix); - collectorItemRepository.delete(collectorItem.getId()); + collectorItemRepository.deleteById(collectorItem.getId()); count++; } } diff --git a/src/main/java/com/capitalone/dashboard/service/CollectorServiceAspect.java b/src/main/java/com/capitalone/dashboard/service/CollectorServiceAspect.java index 4282238e..9fffb6e7 100644 --- a/src/main/java/com/capitalone/dashboard/service/CollectorServiceAspect.java +++ b/src/main/java/com/capitalone/dashboard/service/CollectorServiceAspect.java @@ -45,7 +45,7 @@ private boolean isGit(Collector collector) { } private void normalizeOptions(CollectorItem item, Map uniqueOptions) { - Collector collector = collectorRepository.findOne(item.getCollectorId()); + Collector collector = collectorRepository.findById(item.getCollectorId()).orElseGet(() -> new Collector()); if (collector.getCollectorType() == CollectorType.SCM && isGit(collector)) { String repoUrl = (String)uniqueOptions.get("url"); GitHubParsedUrl gitHubParsed = new GitHubParsedUrl(repoUrl); diff --git a/src/main/java/com/capitalone/dashboard/service/CommitServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/CommitServiceImpl.java index b15d7356..7f4a6f37 100644 --- a/src/main/java/com/capitalone/dashboard/service/CommitServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/CommitServiceImpl.java @@ -29,6 +29,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Optional; @Service public class CommitServiceImpl implements CommitService { @@ -55,10 +56,10 @@ public DataResponse> search(CommitRequest request) { BooleanBuilder builder = new BooleanBuilder(); CollectorItem item = null; - Component component = componentRepository.findOne(request.getComponentId()); + Optional component = componentRepository.findById(request.getComponentId()); - if ( (component == null) - || ((item = component.getLastUpdatedCollectorItemForType(CollectorType.SCM)) == null) ) { + if ( (component.isEmpty()) + || ((item = component.get().getLastUpdatedCollectorItemForType(CollectorType.SCM)) == null) ) { Iterable results = new ArrayList<>(); return new DataResponse<>(results, new Date().getTime()); } @@ -88,8 +89,9 @@ public DataResponse> search(CommitRequest request) { builder.and(commit.scmCommitLog.contains(request.getMessageContains())); } - Collector collector = collectorRepository.findOne(item.getCollectorId()); - return new DataResponse<>(commitRepository.findAll(builder.getValue()), collector.getLastExecuted()); + Optional collector = collectorRepository.findById(item.getCollectorId()); + long lastUpdated = collector.isPresent() ? collector.get().getLastExecuted() : 0; + return new DataResponse<>(commitRepository.findAll(builder.getValue()), lastUpdated); } @Override diff --git a/src/main/java/com/capitalone/dashboard/service/ConfigurationServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/ConfigurationServiceImpl.java index d506d2cf..831ceebf 100644 --- a/src/main/java/com/capitalone/dashboard/service/ConfigurationServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/ConfigurationServiceImpl.java @@ -32,7 +32,7 @@ public List insertConfigurationData(List configLis for (Configuration config : configList) { config.decryptOrEncrptInfo(); } - return (List) configurationRepository.save(configList); + return (List) configurationRepository.saveAll(configList); } @Override diff --git a/src/main/java/com/capitalone/dashboard/service/DashboardRemoteServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/DashboardRemoteServiceImpl.java index ecb01434..9615b826 100644 --- a/src/main/java/com/capitalone/dashboard/service/DashboardRemoteServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/DashboardRemoteServiceImpl.java @@ -161,7 +161,7 @@ public Dashboard remoteCreate(DashboardRemoteRequest request, boolean isUpdate) Set incomingTypes = new HashSet<>(); List entries = request.getAllEntries(); Map allWidgetRequests = generateRequestWidgetList( entries, dashboard, incomingTypes); - Component component = componentRepository.findOne(dashboard.getApplication().getComponents().get(0).getId()); + Component component = componentRepository.findById(dashboard.getApplication().getComponents().get(0).getId()).orElseGet(() -> new Component()); Set existingTypes = new HashSet<>(component.getCollectorItems().keySet()); //adds widgets diff --git a/src/main/java/com/capitalone/dashboard/service/DashboardServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/DashboardServiceImpl.java index 57ad9ae5..7f9ae96d 100644 --- a/src/main/java/com/capitalone/dashboard/service/DashboardServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/DashboardServiceImpl.java @@ -114,7 +114,7 @@ public DashboardServiceImpl(DashboardRepository dashboardRepository, @Override public Iterable all() { - Iterable dashboards = dashboardRepository.findAll(new Sort(Sort.Direction.ASC, "title")); + Iterable dashboards = dashboardRepository.findAll(Sort.by(Sort.Direction.ASC, "title")); for(Dashboard dashboard: dashboards){ String appName = dashboard.getConfigurationItemBusServName(); String compName = dashboard.getConfigurationItemBusAppName(); @@ -139,7 +139,7 @@ public Iterable allTemplate(String template){ @Override public Dashboard get(ObjectId id) { - Dashboard dashboard = dashboardRepository.findOne(id); + Dashboard dashboard = dashboardRepository.findById(id).orElseGet(() -> new Dashboard()); String appName = dashboard.getConfigurationItemBusServName(); String compName = dashboard.getConfigurationItemBusAppName(); @@ -185,7 +185,7 @@ private Dashboard create(Dashboard dashboard, boolean isUpdate) throws HygieiaEx if(!isUpdate) { dashboard.setCreatedAt(System.currentTimeMillis()); - components = componentRepository.save(dashboard.getApplication().getComponents()); + components = componentRepository.saveAll(dashboard.getApplication().getComponents()); } dashboard.setUpdatedAt(System.currentTimeMillis()); @@ -202,7 +202,7 @@ private Dashboard create(Dashboard dashboard, boolean isUpdate) throws HygieiaEx } catch (Exception e) { //Exclude deleting of components if this is an update request if(!isUpdate) { - componentRepository.delete(components); + componentRepository.deleteAll(components); } if(e instanceof HygieiaException){ @@ -224,7 +224,7 @@ public Dashboard update(Dashboard dashboard) throws HygieiaException { @Override public void delete(ObjectId id) { - Dashboard dashboard = dashboardRepository.findOne(id); + Dashboard dashboard = dashboardRepository.findById(id).orElseGet(() -> new Dashboard()); if (!isSafeDelete(dashboard)) { throw new UnsafeDeleteException("Cannot delete team dashboard " + dashboard.getTitle() + " as it is referenced by program dashboards."); @@ -232,7 +232,7 @@ public void delete(ObjectId id) { // Remove this Dashboard's services and service dependencies - serviceRepository.delete(serviceRepository.findByDashboardId(id)); + serviceRepository.deleteAll(serviceRepository.findByDashboardId(id)); for (com.capitalone.dashboard.model.Service service : serviceRepository.findByDependedBy(id)) { //NOPMD - using fully qualified or we pickup an incorrect spring class service.getDependedBy().remove(id); serviceRepository.save(service); @@ -242,7 +242,7 @@ public void delete(ObjectId id) { * Delete Dashboard. Then delete component. Then disable collector items if needed */ dashboardRepository.delete(dashboard); - componentRepository.delete(dashboard.getApplication().getComponents()); + componentRepository.deleteAll(dashboard.getApplication().getComponents()); handleCollectorItems(dashboard.getApplication().getComponents()); if (dashboard.isScoreEnabled()) { this.scoreDashboardService.disableScoreForDashboard(dashboard); @@ -303,7 +303,8 @@ public Component associateCollectorToComponent(ObjectId componentId, List collectorItemIds, ObjectId currentCollectorId = null; Collector collector = null; for (ObjectId collectorItemId : collectorItemIds) { - CollectorItem collectorItem = collectorItemRepository.findOne(collectorItemId); + CollectorItem collectorItem = collectorItemRepository.findById(collectorItemId).orElse(null); incomingCollectorItems.put(collectorItemId, collectorItem); if(collectorItem == null) { LOG.warn(METHOD_NAME + " Bad CollectorItemId passed in the request : " + collectorItemId); continue; } if(collector == null || currentCollectorId != collectorItem.getCollectorId()) { - collector = collectorRepository.findOne(collectorItem.getCollectorId()); + collector = collectorRepository.findById(collectorItem.getCollectorId()).orElseGet(() -> new Collector()); currentCollectorId = collector.getId(); } if (!incomingTypes.contains(collector.getCollectorType())) { @@ -390,7 +391,7 @@ private void associateCollectorItemsToComponent(List collectorItemIds, collectorItem.setLastUpdated(System.currentTimeMillis()); } if(collector == null || currentCollectorId != collectorItem.getCollectorId()) { - collector = collectorRepository.findOne(collectorItem.getCollectorId()); + collector = collectorRepository.findById(collectorItem.getCollectorId()).orElseGet(() -> new Collector()); currentCollectorId = collector.getId(); } component.addCollectorItem(collector.getCollectorType(), collectorItem); @@ -399,7 +400,7 @@ private void associateCollectorItemsToComponent(List collectorItemIds, collectorItem.setCollector(collector); } - collectorItemRepository.save(new HashSet<>(toSaveCollectorItems.values())); + collectorItemRepository.saveAll(new HashSet<>(toSaveCollectorItems.values())); if(save){ componentRepository.save(component); } @@ -473,7 +474,7 @@ private Iterable collectorsFromItems(Map collectors) { @@ -520,7 +521,7 @@ public Iterable updateOwners(ObjectId dashboardId, Iterable owners } } - Dashboard dashboard = dashboardRepository.findOne(dashboardId); + Dashboard dashboard = dashboardRepository.findById(dashboardId).orElseGet(() -> new Dashboard()); dashboard.setOwners(Lists.newArrayList(owners)); Dashboard result = dashboardRepository.save(dashboard); @@ -545,7 +546,7 @@ private DashboardType getDashboardType(Dashboard dashboard) { @Override public Component getComponent(ObjectId componentId){ - Component component = componentRepository.findOne(componentId); + Component component = componentRepository.findById(componentId).orElse(null); return component; } @Override @@ -654,7 +655,7 @@ public Dashboard updateDashboardWidgets(ObjectId dashboardId, Dashboard request) dashboard.setActiveWidgets(request.getActiveWidgets()); dashboard = update(dashboard); if(componentId!=null){ - com.capitalone.dashboard.model.Component component = componentRepository.findOne(componentId); + com.capitalone.dashboard.model.Component component = componentRepository.findById(componentId).orElseGet(() -> new Component()); for (CollectorType cType :collectorTypesToDelete) { component.getCollectorItems().remove(cType); } @@ -1010,7 +1011,7 @@ public Dashboard updateScoreSettings(ObjectId dashboardId, boolean scoreEnabled, public String removeWidgetDuplicatesHelper(String title, boolean dryRun){ // get page and clean until there are no more pages if(StringUtils.isEmpty(title)){ - Pageable pageable = new PageRequest(0, settings.getBatchSize()); + Pageable pageable = PageRequest.of(0, settings.getBatchSize()); Page page = findDashboardsByPage("", pageable); while(page.hasContent()){ diff --git a/src/main/java/com/capitalone/dashboard/service/DefaultAuthenticationServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/DefaultAuthenticationServiceImpl.java index ef543a73..30ebed40 100644 --- a/src/main/java/com/capitalone/dashboard/service/DefaultAuthenticationServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/DefaultAuthenticationServiceImpl.java @@ -33,7 +33,7 @@ public Iterable all() { @Override public Authentication get(ObjectId id) { - Authentication authentication = authenticationRepository.findOne(id); + Authentication authentication = authenticationRepository.findById(id).orElse(null); return authentication; } @@ -60,7 +60,7 @@ public String update(String username, String password) { @Override public void delete(ObjectId id) { - Authentication authentication = authenticationRepository.findOne(id); + Authentication authentication = authenticationRepository.findById(id).orElse(null); if (authentication != null) { authenticationRepository.delete(authentication); } diff --git a/src/main/java/com/capitalone/dashboard/service/DeployServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/DeployServiceImpl.java index 9b09b2f2..cbd9fcdc 100644 --- a/src/main/java/com/capitalone/dashboard/service/DeployServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/DeployServiceImpl.java @@ -91,7 +91,7 @@ public DeployServiceImpl(ComponentRepository componentRepository, @Override public DataResponse> getDeployStatus(ObjectId componentId) { - Component component = componentRepository.findOne(componentId); + Component component = componentRepository.findById(componentId).orElseGet(() -> new Component()); Collection cis = component.getCollectorItems() .get(CollectorType.Deployment); @@ -126,7 +126,7 @@ private DataResponse> getDeployStatus(Collection new Collector()); if (collector.getLastExecuted() > lastExecuted) { lastExecuted = collector.getLastExecuted(); @@ -255,7 +255,7 @@ public String createV3(DeployDataCreateRequest request) throws HygieiaException BuildDataCreateRequest buildRequest = buildRequestFromDeployRequest(request); BuildDataCreateResponse buildResponse = buildService.createV3(buildRequest); ObjectId buildId = buildResponse.getId(); - Build build = buildRepository.findOne(buildId); + Build build = buildRepository.findById(buildId).orElseGet(() -> new Build()); HashMap metadata = new HashMap<>(); metadata.put("appName", request.getAppName()); metadata.put("appServiceName",request.getAppServiceName()); diff --git a/src/main/java/com/capitalone/dashboard/service/DynamicPipelineServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/DynamicPipelineServiceImpl.java index 0043ce84..4bcdbdfd 100644 --- a/src/main/java/com/capitalone/dashboard/service/DynamicPipelineServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/DynamicPipelineServiceImpl.java @@ -13,11 +13,14 @@ import java.util.Map; import java.util.Set; import java.util.stream.Collectors; +import java.util.Optional; +import java.util.Objects; import com.capitalone.dashboard.misc.HygieiaException; import org.apache.commons.lang3.ObjectUtils; -import org.apache.log4j.Logger; import org.bson.types.ObjectId; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -65,7 +68,7 @@ */ @Service("dynamic-pipeline") public class DynamicPipelineServiceImpl implements PipelineService { - private static final Logger logger = Logger.getLogger(DynamicPipelineServiceImpl.class); + private static final Logger logger = LoggerFactory.getLogger(DynamicPipelineServiceImpl.class); private static final int PROD_COMMIT_DATE_RANGE_DEFAULT = -90; @@ -145,10 +148,15 @@ private PipelineResponse buildPipelineResponse(Pipeline pipeline, Long lowerBoun /** * get the collector item and dashboard */ - CollectorItem dashboardCollectorItem = collectorItemRepository.findOne(pipeline.getCollectorItemId()); - Dashboard dashboard = dashboardRepository.findOne(new ObjectId((String)dashboardCollectorItem.getOptions().get("dashboardId"))); - - PipelineResponse pipelineResponse = new PipelineResponse(); + PipelineResponse pipelineResponse = new PipelineResponse(); + CollectorItem dashboardCollectorItem = collectorItemRepository.findById(pipeline.getCollectorItemId()).orElse(null); + if (Objects.isNull(dashboardCollectorItem) || Objects.isNull(dashboardCollectorItem.getOptions().get("dashboardId"))) { + return pipelineResponse; + } + Optional dashboardOptional = dashboardRepository.findById(new ObjectId((String)dashboardCollectorItem.getOptions().get("dashboardId"))); + if (dashboardOptional.isEmpty()) return pipelineResponse; + Dashboard dashboard = dashboardOptional.get(); + pipelineResponse.setCollectorItemId(dashboardCollectorItem.getId()); // Fix for 1254 pipelineResponse.setProdStage(PipelineUtils.getProdStage(dashboard)); @@ -202,13 +210,13 @@ private PipelineResponse buildPipelineResponse(Pipeline pipeline, Long lowerBoun * @return the pipeline passed in */ protected Pipeline buildPipeline(Pipeline pipeline, Long lowerBound, Long upperBound) { - CollectorItem dashboardCollectorItem = collectorItemRepository.findOne(pipeline.getCollectorItemId()); - Dashboard dashboard = dashboardRepository.findOne(new ObjectId((String)dashboardCollectorItem.getOptions().get("dashboardId"))); - + CollectorItem dashboardCollectorItem = collectorItemRepository.findById(pipeline.getCollectorItemId()).orElseGet(() -> new CollectorItem()); + Optional dashboard = dashboardRepository.findById(new ObjectId((String)dashboardCollectorItem.getOptions().get("dashboardId"))); + if (dashboard.isEmpty()) return pipeline; // First gather information about our dashboard // TODO how should we handle multiple components? - Component component = dashboard.getApplication().getComponents().iterator().next(); + Component component = dashboard.get().getApplication().getComponents().iterator().next(); // Note - since other items link to commits we always need to pull all of our commit data List commits = getCommits(component, getMinStart(), upperBound); @@ -382,7 +390,7 @@ protected void processBuilds(Pipeline pipeline, List builds, List * Computes the build stage of the pipeline. *

* Iterates over each environment to determine what commits currently exist in the current deployment. - * Given an {@link Environment} this method will iterate over its {@link DeploymentUnit}s until + * Given an {@link Environment} this method will iterate over its {DeploymentUnit}s until * a unit is found that corresponds to a {@link BinaryArtifact} that exists in the artifacts * collection. DeploymentUnits are artifacts are currently correlated by name and version. * If the artifact is found an attempt is made to find the last {@link Commit} that was used @@ -892,7 +900,7 @@ private PipelineResponseCommit applyStageTimestamps(PipelineResponseCommit commi * Gets all commits for a given pipeline stage, taking into account the mappings for environment stages * @param dashboard * @param pipeline - * @param stageType + * @param stage * @return */ private Map findCommitsForStage(Dashboard dashboard, Pipeline pipeline, PipelineStage stage) throws HygieiaException { diff --git a/src/main/java/com/capitalone/dashboard/service/FeatureFlagServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/FeatureFlagServiceImpl.java index 60c226dc..f068f995 100644 --- a/src/main/java/com/capitalone/dashboard/service/FeatureFlagServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/FeatureFlagServiceImpl.java @@ -6,7 +6,6 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import org.apache.commons.collections4.IterableUtils; -import org.apache.log4j.Logger; import org.bson.types.ObjectId; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -46,7 +45,7 @@ public List getFeatureFlags(){ @Override public void deleteFlags(ObjectId id){ - featureFlagRepository.delete(id); + featureFlagRepository.deleteById(id); } } diff --git a/src/main/java/com/capitalone/dashboard/service/FeatureServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/FeatureServiceImpl.java index 9b34e432..2b4eab2c 100644 --- a/src/main/java/com/capitalone/dashboard/service/FeatureServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/FeatureServiceImpl.java @@ -90,7 +90,7 @@ public FeatureServiceImpl(ComponentRepository componentRepository, */ @Override public DataResponse> getStory(ObjectId componentId, String storyNumber) { - Component component = componentRepository.findOne(componentId); + Component component = componentRepository.findById(componentId).orElse(null); if ((component == null) || CollectionUtils.isEmpty(component.getCollectorItems()) || CollectionUtils .isEmpty(component.getCollectorItems().get(CollectorType.AgileTool)) @@ -106,7 +106,7 @@ public DataResponse> getStory(ObjectId componentId, String storyNu // Get one story based on story number, based on component List story = featureRepository.getStoryByNumber(storyNumber); - Collector collector = collectorRepository.findOne(item.getCollectorId()); + Collector collector = collectorRepository.findById(item.getCollectorId()).orElseGet(() -> new Collector()); return new DataResponse<>(story, collector.getLastExecuted()); } @@ -124,7 +124,7 @@ public DataResponse> getStory(ObjectId componentId, String storyNu @Override public DataResponse> getRelevantStories(ObjectId componentId, String teamId, String projectId, Optional agileType) { - Component component = componentRepository.findOne(componentId); + Component component = componentRepository.findById(componentId).orElse(null); if ((component == null) || CollectionUtils.isEmpty(component.getCollectorItems()) || CollectionUtils .isEmpty(component.getCollectorItems().get(CollectorType.AgileTool)) @@ -141,7 +141,7 @@ public DataResponse> getRelevantStories(ObjectId componentId, Stri // Get teamId first from available collector item, based on component List relevantStories = getFeaturesForCurrentSprints(teamId, projectId, item.getCollectorId(), agileType.isPresent()? agileType.get() : null, false); - Collector collector = collectorRepository.findOne(item.getCollectorId()); + Collector collector = collectorRepository.findById(item.getCollectorId()).orElseGet(() -> new Collector()); return new DataResponse<>(relevantStories, collector.getLastExecuted()); } @@ -162,7 +162,7 @@ public DataResponse> getRelevantStories(ObjectId componentId, Stri @Override public DataResponse> getFeatureEpicEstimates(ObjectId componentId, String teamId, String projectId, Optional agileType, Optional estimateMetricType) { - Component component = componentRepository.findOne(componentId); + Component component = componentRepository.findById(componentId).orElse(null); if ((component == null) || CollectionUtils.isEmpty(component.getCollectorItems()) || CollectionUtils @@ -210,14 +210,14 @@ public DataResponse> getFeatureEpicEstimates(ObjectId componentId, } } - Collector collector = collectorRepository.findOne(item.getCollectorId()); + Collector collector = collectorRepository.findById(item.getCollectorId()).orElseGet(() -> new Collector()); return new DataResponse<>(new ArrayList<>(epicIDToEpicFeatureMap.values()), collector.getLastExecuted()); } @Override public DataResponse getAggregatedSprintEstimates(ObjectId componentId, String teamId, String projectId, Optional agileType, Optional estimateMetricType) { - Component component = componentRepository.findOne(componentId); + Component component = componentRepository.findById(componentId).orElse(null); if ((component == null) || CollectionUtils.isEmpty(component.getCollectorItems()) || CollectionUtils .isEmpty(component.getCollectorItems().get(CollectorType.AgileTool)) @@ -226,7 +226,7 @@ public DataResponse getAggregatedSprintEstimates(ObjectId compon } CollectorItem item = component.getCollectorItems().get(CollectorType.AgileTool).get(0); - Collector collector = collectorRepository.findOne(item.getCollectorId()); + Collector collector = collectorRepository.findById(item.getCollectorId()).orElseGet(() -> new Collector()); SprintEstimate estimate = getSprintEstimates(teamId, projectId, item.getCollectorId(), agileType, estimateMetricType); return new DataResponse<>(estimate, collector.getLastExecuted()); @@ -248,7 +248,7 @@ public DataResponse getAggregatedSprintEstimates(ObjectId compon @Deprecated public DataResponse> getTotalEstimate(ObjectId componentId, String teamId, Optional agileType, Optional estimateMetricType) { - Component component = componentRepository.findOne(componentId); + Component component = componentRepository.findById(componentId).orElse(null); if ((component == null) || CollectionUtils.isEmpty(component.getCollectorItems()) || CollectionUtils @@ -264,7 +264,7 @@ public DataResponse> getTotalEstimate(ObjectId componentId, String List list = Collections.singletonList(new Feature()); list.get(0).setsEstimate(Integer.toString(estimate.getTotalEstimate())); - Collector collector = collectorRepository.findOne(item.getCollectorId()); + Collector collector = collectorRepository.findById(item.getCollectorId()).orElseGet(() -> new Collector()); return new DataResponse<>(list, collector.getLastExecuted()); } @@ -284,7 +284,7 @@ public DataResponse> getTotalEstimate(ObjectId componentId, String @Deprecated public DataResponse> getInProgressEstimate(ObjectId componentId, String teamId, Optional agileType, Optional estimateMetricType) { - Component component = componentRepository.findOne(componentId); + Component component = componentRepository.findById(componentId).orElse(null); if ((component == null) || CollectionUtils.isEmpty(component.getCollectorItems()) || CollectionUtils @@ -300,7 +300,7 @@ public DataResponse> getInProgressEstimate(ObjectId componentId, S List list = Collections.singletonList(new Feature()); list.get(0).setsEstimate(Integer.toString(estimate.getInProgressEstimate())); - Collector collector = collectorRepository.findOne(item.getCollectorId()); + Collector collector = collectorRepository.findById(item.getCollectorId()).orElseGet(() -> new Collector()); return new DataResponse<>(list, collector.getLastExecuted()); } @@ -320,7 +320,7 @@ public DataResponse> getInProgressEstimate(ObjectId componentId, S @Deprecated public DataResponse> getDoneEstimate(ObjectId componentId, String teamId, Optional agileType, Optional estimateMetricType) { - Component component = componentRepository.findOne(componentId); + Component component = componentRepository.findById(componentId).orElse(null); if ((component == null) || CollectionUtils.isEmpty(component.getCollectorItems()) || CollectionUtils @@ -336,7 +336,7 @@ public DataResponse> getDoneEstimate(ObjectId componentId, String List list = Collections.singletonList(new Feature()); list.get(0).setsEstimate(Integer.toString(estimate.getCompleteEstimate())); - Collector collector = collectorRepository.findOne(item.getCollectorId()); + Collector collector = collectorRepository.findById(item.getCollectorId()).orElseGet(() -> new Collector()); return new DataResponse<>(list, collector.getLastExecuted()); } @@ -354,7 +354,7 @@ public DataResponse> getDoneEstimate(ObjectId componentId, String @Override public DataResponse> getCurrentSprintDetail(ObjectId componentId, String teamId, String projectId, Optional agileType) { - Component component = componentRepository.findOne(componentId); + Component component = componentRepository.findById(componentId).orElse(null); if ((component == null) || CollectionUtils.isEmpty(component.getCollectorItems()) || CollectionUtils .isEmpty(component.getCollectorItems().get(CollectorType.AgileTool)) @@ -367,7 +367,7 @@ public DataResponse> getCurrentSprintDetail(ObjectId componentId, // Get teamId first from available collector item, based on component List sprintResponse = getFeaturesForCurrentSprints(teamId, projectId, item.getCollectorId(), agileType.isPresent()? agileType.get() : null, true); - Collector collector = collectorRepository.findOne(item.getCollectorId()); + Collector collector = collectorRepository.findById(item.getCollectorId()).orElseGet(() -> new Collector()); return new DataResponse<>(sprintResponse, collector.getLastExecuted()); } @@ -506,4 +506,4 @@ private int getEstimate(Feature feature, Optional estimateMetricType) { return rt; } -} \ No newline at end of file +} diff --git a/src/main/java/com/capitalone/dashboard/service/GenericCollectorItemServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/GenericCollectorItemServiceImpl.java index 424fa01c..bc8e3b43 100644 --- a/src/main/java/com/capitalone/dashboard/service/GenericCollectorItemServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/GenericCollectorItemServiceImpl.java @@ -88,7 +88,7 @@ public String create(GenericCollectorItemCreateRequest request) throws HygieiaEx @Override public String createGenericBinaryArtifactData(GenericCollectorItemCreateRequest request){ ObjectId id = new ObjectId(request.getBuildId()); - Build currentBuild = buildRepository.findOne(id); + Build currentBuild = buildRepository.findById(id).orElseGet(() -> new Build()); String artifactName = captureArtifactAttributes(apiSettings.getCapturePattern(),request.getRawData(),ARTIFACT_NAME); String artifactVersion = captureArtifactAttributes(apiSettings.getCapturePattern(),request.getRawData(),ARTIFACT_VERSION); String artifactGroupId = captureArtifactAttributes(apiSettings.getCapturePattern(),request.getRawData(),ARTIFACT_GROUP); diff --git a/src/main/java/com/capitalone/dashboard/service/GitRequestServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/GitRequestServiceImpl.java index 9e42086a..fbe6a3bb 100644 --- a/src/main/java/com/capitalone/dashboard/service/GitRequestServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/GitRequestServiceImpl.java @@ -53,7 +53,7 @@ public DataResponse> search(GitRequestRequest request, BooleanBuilder builder = new BooleanBuilder(); CollectorItem item = null; - Component component = componentRepository.findOne(request.getComponentId()); + Component component = componentRepository.findById(request.getComponentId()).orElse(null); if ( (component == null) || ((item = component.getLastUpdatedCollectorItemForType(CollectorType.SCM)) == null) ) { Iterable results = new ArrayList<>(); @@ -75,7 +75,7 @@ public DataResponse> search(GitRequestRequest request, (state.toLowerCase().equals("closed")) || (state.toLowerCase().equals("merged")))) { builder.and(gitRequest.state.eq(state)); } - Collector collector = collectorRepository.findOne(item.getCollectorId()); + Collector collector = collectorRepository.findById(item.getCollectorId()).orElse(null); if ((collector == null) || (collector.getId() == null)) { Iterable results = new ArrayList<>(); return new DataResponse<>(results, new Date().getTime()); @@ -119,8 +119,8 @@ public DataResponse> getGitRequestsForWidget(GitRequestRequ private boolean isNewGitRequest(CollectorItem repo, GitRequest gitRequest) { - return gitRequestRepository.findByCollectorItemIdAndScmRevisionNumber( - repo.getId(), gitRequest.getScmRevisionNumber()) == null; + List gitRequests = gitRequestRepository.findAllByCollectorItemIdAndScmRevisionNumber(repo.getId(), gitRequest.getScmRevisionNumber()); + return CollectionUtils.isEmpty(gitRequests); } private class GitHubv3 { diff --git a/src/main/java/com/capitalone/dashboard/service/LibraryPolicyServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/LibraryPolicyServiceImpl.java index 3a9f421d..0f9f386d 100644 --- a/src/main/java/com/capitalone/dashboard/service/LibraryPolicyServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/LibraryPolicyServiceImpl.java @@ -73,7 +73,7 @@ public DataResponse> search(LibraryPolicyRequest reque itemResult = libraryPolicyResultsRepository.findAll(builder.getValue(), policyResult.timestamp.desc()); } else { PageRequest pageRequest = - new PageRequest(0, request.getMax(), Sort.Direction.DESC, "timestamp"); + PageRequest.of(0, request.getMax(), Sort.Direction.DESC, "timestamp"); itemResult = libraryPolicyResultsRepository.findAll(builder.getValue(), pageRequest).getContent(); } if (itemResult != null) { @@ -82,7 +82,7 @@ public DataResponse> search(LibraryPolicyRequest reque results.add(lpr); } } - Collector collector = collectorRepository.findOne(item.getCollectorId()); + Collector collector = collectorRepository.findById(item.getCollectorId()).orElse(null); long runTime = (collector == null) ? 0 : collector.getLastExecuted(); lastExecuted = (runTime < lastExecuted) ? runTime : lastExecuted; } @@ -91,7 +91,7 @@ public DataResponse> search(LibraryPolicyRequest reque protected List getCollectorItems(LibraryPolicyRequest request) { - Component component = componentRepository.findOne(request.getComponentId()); + Component component = componentRepository.findById(request.getComponentId()).orElse(null); return (component != null) ? component.getCollectorItems(CollectorType.LibraryPolicy) : null; } diff --git a/src/main/java/com/capitalone/dashboard/service/LogAnalysisServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/LogAnalysisServiceImpl.java index 22b7afc8..aa7759b1 100644 --- a/src/main/java/com/capitalone/dashboard/service/LogAnalysisServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/LogAnalysisServiceImpl.java @@ -38,7 +38,7 @@ public DataResponse> search(LogAnalysisSearchRequest reque if (null == request) { return emptyResponse(); } - Component component = componentRepository.findOne(request.getComponentId()); + Component component = componentRepository.findById(request.getComponentId()).orElse(null); if (null == component) { return emptyResponse(); } @@ -54,11 +54,11 @@ public DataResponse> search(LogAnalysisSearchRequest reque if (null == request.getMax()) { result = this.repository.findAll(builder.getValue(), log.timestamp.desc()); } else { - PageRequest pageRequest = new PageRequest(0, request.getMax(), Sort.Direction.DESC, "timestamp"); + PageRequest pageRequest = PageRequest.of(0, request.getMax(), Sort.Direction.DESC, "timestamp"); result = this.repository.findAll(builder.getValue(), pageRequest); } - Collector collector = collectorRepository.findOne(item.getCollectorId()); + Collector collector = collectorRepository.findById(item.getCollectorId()).orElseGet(() -> new Collector()); return new DataResponse<>(result,collector.getLastExecuted()); } diff --git a/src/main/java/com/capitalone/dashboard/service/Monitor2ServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/Monitor2ServiceImpl.java index 2afae5e2..69db9a2f 100644 --- a/src/main/java/com/capitalone/dashboard/service/Monitor2ServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/Monitor2ServiceImpl.java @@ -11,6 +11,7 @@ import org.springframework.stereotype.Service; import java.util.List; +import java.util.Optional; // Hits the repositories for saving the data to mongo and retrieving it. @Service @@ -36,7 +37,7 @@ public List dashboardMonitor2es(ObjectId dashboardId) { @Override public Monitor2 get(ObjectId monitor2Id) { - return monitor2Repository.findOne(monitor2Id); + return monitor2Repository.findById(monitor2Id).orElse(null); } @Override @@ -48,8 +49,9 @@ public Monitor2 create(ObjectId dashboardId, Monitor2DataCreateRequest monitor2D monitor2.setDashboardId(dashboardId); monitor2.setLastUpdated(System.currentTimeMillis()); - Dashboard dashboard = dashboardRepository.findOne(dashboardId); - monitor2.setApplicationName(dashboard.getApplication().getName()); + Optional dashboard = dashboardRepository.findById(dashboardId); + if (dashboard.isEmpty()) return null; + monitor2.setApplicationName(dashboard.get().getApplication().getName()); return monitor2Repository.save(monitor2); } diff --git a/src/main/java/com/capitalone/dashboard/service/PerformanceServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/PerformanceServiceImpl.java index bf2275dc..cd2d0362 100644 --- a/src/main/java/com/capitalone/dashboard/service/PerformanceServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/PerformanceServiceImpl.java @@ -30,6 +30,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Optional; @Service public class PerformanceServiceImpl implements PerformanceService { @@ -90,24 +91,24 @@ private DataResponse> searchType(PerformanceSearchRequest result = performanceRepository.findAll(builder.getValue(), performance.timestamp.desc()); } else { PageRequest pageRequest = - new PageRequest(0, request.getMax(), Sort.Direction.DESC, "timestamp"); + PageRequest.of(0, request.getMax(), Sort.Direction.DESC, "timestamp"); result = performanceRepository.findAll(builder.getValue(), pageRequest).getContent(); } - Collector collector = collectorRepository.findOne(item.getCollectorId()); - long lastExecuted = (collector == null) ? 0 : collector.getLastExecuted(); + Optional collector = collectorRepository.findById(item.getCollectorId()); + long lastExecuted = (collector.isEmpty()) ? 0 : collector.get().getLastExecuted(); return new DataResponse<>(result, lastExecuted); } protected CollectorItem getCollectorItem(PerformanceSearchRequest request) { - Component component = componentRepository.findOne(request.getComponentId()); - if (component == null) { + Optional component = componentRepository.findById(request.getComponentId()); + if (component.isEmpty()) { return null; } CollectorItem item = null; PerformanceType qualityType = MoreObjects.firstNonNull(request.getType(), PerformanceType.ApplicationPerformance); - List items = component.getCollectorItems().get(qualityType.collectorType()); + List items = component.get().getCollectorItems().get(qualityType.collectorType()); if (items != null) { item = Iterables.getFirst(items, null); } diff --git a/src/main/java/com/capitalone/dashboard/service/PipelineServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/PipelineServiceImpl.java index a9b6ec42..d60d076a 100644 --- a/src/main/java/com/capitalone/dashboard/service/PipelineServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/PipelineServiceImpl.java @@ -29,6 +29,7 @@ import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; +import java.util.Optional; @Service("pipeline") public class PipelineServiceImpl implements PipelineService { @@ -80,15 +81,16 @@ private PipelineResponse buildPipelineResponse(Pipeline pipeline, Long beginDate /** * get the collector item and dashboard */ - CollectorItem dashboardCollectorItem = collectorItemRepository.findOne(pipeline.getCollectorItemId()); + CollectorItem dashboardCollectorItem = collectorItemRepository.findById(pipeline.getCollectorItemId()).orElseGet(() -> new CollectorItem()); if(dashboardCollectorItem.getOptions().get("dashboardId") == null) { throw new HygieiaException(" Collector Item: " + dashboardCollectorItem.getId() + " is not associated to a dashboard. ", HygieiaException.BAD_DATA); } String dashboardId = (String) dashboardCollectorItem.getOptions().get("dashboardId"); - Dashboard dashboard = dashboardRepository.findOne(new ObjectId(dashboardId)); - if(dashboard == null) { + Optional dashboardOptional = dashboardRepository.findById(new ObjectId(dashboardId)); + if(dashboardOptional.isEmpty()) { throw new HygieiaException(" Dashboard " + dashboardId + " is not found for collectorItem: " + dashboardCollectorItem.getId() + " ", HygieiaException.BAD_DATA); } + Dashboard dashboard = dashboardOptional.get(); PipelineResponse pipelineResponse = new PipelineResponse(); pipelineResponse.setCollectorItemId(dashboardCollectorItem.getId()); pipelineResponse.setProdStage(PipelineUtils.getProdStage(dashboard)); diff --git a/src/main/java/com/capitalone/dashboard/service/RallyFeatureServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/RallyFeatureServiceImpl.java index 6ce65846..bb5c8520 100644 --- a/src/main/java/com/capitalone/dashboard/service/RallyFeatureServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/RallyFeatureServiceImpl.java @@ -65,7 +65,7 @@ public List rallyWidgetDataDetails(CollectorItem collectorItem) { public CollectorItem getCollectorItem(RallyFeatureRequest request) { - Component component = componentRepository.findOne(request.getComponentId()); + Component component = componentRepository.findById(request.getComponentId()).orElse(null); if (component == null) { return null; } diff --git a/src/main/java/com/capitalone/dashboard/service/ScopeServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/ScopeServiceImpl.java index 26ea63ef..441de7b3 100644 --- a/src/main/java/com/capitalone/dashboard/service/ScopeServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/ScopeServiceImpl.java @@ -13,6 +13,7 @@ import org.springframework.stereotype.Service; import java.util.List; +import java.util.Optional; @Service public class ScopeServiceImpl implements ScopeService { @@ -53,7 +54,7 @@ public List getAllScopes() { for (Scope scope : scopes) { Collector collector = collectorRepository - .findOne(scope.getCollectorId()); + .findById(scope.getCollectorId()).orElseGet(() -> new Collector()); scope.setCollector(collector); } @@ -75,8 +76,11 @@ public List getAllScopes() { @Override public DataResponse> getScope(ObjectId componentId, String scopeId) { - Component component = componentRepository.findOne(componentId); - CollectorItem item = component.getCollectorItems() + Optional component = componentRepository.findById(componentId); + if (component.isEmpty()) { + new DataResponse<>(null, 0); + } + CollectorItem item = component.get().getCollectorItems() .get(CollectorType.AgileTool).get(0); QScopeOwner team = new QScopeOwner("team"); BooleanBuilder builder = new BooleanBuilder(); @@ -87,7 +91,7 @@ public DataResponse> getScope(ObjectId componentId, List scope = scopeRepository.getScopeById(scopeId); Collector collector = collectorRepository - .findOne(item.getCollectorId()); + .findById(item.getCollectorId()).orElseGet(() -> new Collector()); return new DataResponse<>(scope, collector.getLastExecuted()); } diff --git a/src/main/java/com/capitalone/dashboard/service/ScoreDashboardServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/ScoreDashboardServiceImpl.java index ab76278a..a1460106 100644 --- a/src/main/java/com/capitalone/dashboard/service/ScoreDashboardServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/ScoreDashboardServiceImpl.java @@ -8,17 +8,20 @@ import com.capitalone.dashboard.repository.CollectorItemRepository; import com.capitalone.dashboard.repository.ScoreCollectorItemRepository; import org.apache.commons.collections.CollectionUtils; -import org.apache.log4j.Logger; + import org.bson.types.ObjectId; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; + @Service public class ScoreDashboardServiceImpl implements ScoreDashboardService { - private static final Logger LOGGER = Logger.getLogger(ScoreDashboardServiceImpl.class); + private static final Logger LOGGER = LoggerFactory.getLogger(ScoreDashboardServiceImpl.class); private final CollectorService collectorService; private final ScoreCollectorItemRepository scoreCollectorItemRepository; diff --git a/src/main/java/com/capitalone/dashboard/service/ServiceAccountServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/ServiceAccountServiceImpl.java index f1cbbc4a..8e2b31f8 100644 --- a/src/main/java/com/capitalone/dashboard/service/ServiceAccountServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/ServiceAccountServiceImpl.java @@ -3,17 +3,19 @@ import com.capitalone.dashboard.model.ServiceAccount; import com.capitalone.dashboard.repository.ServiceAccountRepository; import com.google.common.collect.Sets; -import org.apache.log4j.Logger; import org.bson.types.ObjectId; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.Collection; +import java.util.Optional; @Component public class ServiceAccountServiceImpl implements ServiceAccountService { - private static final Logger LOGGER = Logger.getLogger(ServiceAccountServiceImpl.class); + private static final Logger LOGGER = LoggerFactory.getLogger(ServiceAccountServiceImpl.class); private ServiceAccountRepository serviceAccountRepository; @@ -40,7 +42,8 @@ public Collection getAllServiceAccounts() { @Override public String updateAccount(String serviceAccount, String fileNames, ObjectId id){ - ServiceAccount sa = serviceAccountRepository.findOne(id); + Optional saOptional = serviceAccountRepository.findById(id).or(() -> Optional.of(new ServiceAccount("", ""))); + ServiceAccount sa = saOptional.get(); sa.setServiceAccountName(serviceAccount); sa.setFileNames(fileNames); serviceAccountRepository.save(sa); @@ -49,7 +52,7 @@ public String updateAccount(String serviceAccount, String fileNames, ObjectId id @Override public void deleteAccount(ObjectId id ){ - serviceAccountRepository.delete(id); + serviceAccountRepository.deleteById(id); } diff --git a/src/main/java/com/capitalone/dashboard/service/ServiceServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/ServiceServiceImpl.java index a53fe526..ca879a66 100644 --- a/src/main/java/com/capitalone/dashboard/service/ServiceServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/ServiceServiceImpl.java @@ -5,7 +5,9 @@ import java.net.URL; import java.net.URLConnection; import java.util.List; +import java.util.Objects; +import com.capitalone.dashboard.model.Application; import org.bson.types.ObjectId; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -52,7 +54,7 @@ public List dashboardDependentServices(ObjectId dashboardId) { @Override public Service get(ObjectId id) { - return serviceRepository.findOne(id); + return serviceRepository.findById(id).orElse(null); } @Override @@ -63,8 +65,8 @@ public Service create(ObjectId dashboardId, String name, String url) { service.setDashboardId(dashboardId); service.setStatus(ServiceStatus.Warning); service.setLastUpdated(System.currentTimeMillis()); - Dashboard dashboard = dashboardRepository.findOne(dashboardId); - service.setApplicationName(dashboard.getApplication().getName()); + Dashboard dashboard = dashboardRepository.findById(dashboardId).orElseGet(() -> new Dashboard()); + service.setApplicationName(Objects.nonNull(dashboard.getApplication()) ? dashboard.getApplication().getName() : ""); return serviceRepository.save(service); } @@ -112,8 +114,8 @@ public void refreshService(ObjectId dashboardId, ObjectId serviceId) { service.setDashboardId(dashboardId); service.setStatus(getServiceStatus(service.getUrl(), dashboardId)); service.setLastUpdated(System.currentTimeMillis()); - Dashboard dashboard = dashboardRepository.findOne(dashboardId); - service.setApplicationName(dashboard.getApplication().getName()); + Dashboard dashboard = dashboardRepository.findById(dashboardId).orElseGet(() -> new Dashboard()); + service.setApplicationName(Objects.nonNull(dashboard.getApplication()) ? dashboard.getApplication().getName() : ""); serviceRepository.save(service); } diff --git a/src/main/java/com/capitalone/dashboard/service/TeamInventoryServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/TeamInventoryServiceImpl.java index 21769319..1841635b 100644 --- a/src/main/java/com/capitalone/dashboard/service/TeamInventoryServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/TeamInventoryServiceImpl.java @@ -25,7 +25,7 @@ public TeamInventoryServiceImpl(TeamInventoryRepository teamInventoryRepository, @Override public DataResponse getTeamData(String teamName, String teamId) { TeamInventory teamInventory = teamInventoryRepository.findByNameAndTeamId(teamName,teamId); - Collector collector = collectorRepository.findOne(teamInventory.getCollectorId()); + Collector collector = collectorRepository.findById(teamInventory.getCollectorId()).orElseGet(() -> new Collector()); return new DataResponse<>(teamInventory, collector.getLastExecuted()); } } diff --git a/src/main/java/com/capitalone/dashboard/service/TeamServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/TeamServiceImpl.java index 2c401e8d..dcc24ed6 100644 --- a/src/main/java/com/capitalone/dashboard/service/TeamServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/TeamServiceImpl.java @@ -16,6 +16,7 @@ import org.springframework.stereotype.Service; import java.util.List; +import java.util.Optional; @Service public class TeamServiceImpl implements TeamService { @@ -56,7 +57,7 @@ public Iterable getAllTeams() { for (Team team : teams) { Collector collector = collectorRepository - .findOne(team.getCollectorId()); + .findById(team.getCollectorId()).orElseGet(() -> new Collector()); team.setCollector(collector); } @@ -78,15 +79,16 @@ public Iterable getAllTeams() { @Override public DataResponse getTeam(ObjectId componentId, String teamId) { - Component component = componentRepository.findOne(componentId); - CollectorItem item = component.getCollectorItems() + Optional component = componentRepository.findById(componentId); + if (component.isEmpty()) return new DataResponse<>(null, 0); + CollectorItem item = component.get().getCollectorItems() .get(CollectorType.AgileTool).get(0); // Get one scope by Id Team team = teamRepository.findByTeamId(teamId); Collector collector = collectorRepository - .findOne(item.getCollectorId()); + .findById(item.getCollectorId()).orElseGet(() -> new Collector()); return new DataResponse<>(team, collector.getLastExecuted()); } diff --git a/src/main/java/com/capitalone/dashboard/service/TemplateServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/TemplateServiceImpl.java index 90dd898a..b331db2f 100644 --- a/src/main/java/com/capitalone/dashboard/service/TemplateServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/TemplateServiceImpl.java @@ -40,13 +40,13 @@ public Template update(Template template) throws HygieiaException { @Override public void delete(ObjectId id) { - templateRepository.delete(id); + templateRepository.deleteById(id); } @Override public Template get(ObjectId id) { - Template template = templateRepository.findOne(id); + Template template = templateRepository.findById(id).orElse(null); return template; } diff --git a/src/main/java/com/capitalone/dashboard/service/TestResultServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/TestResultServiceImpl.java index 4a93fa68..7e1c0ede 100644 --- a/src/main/java/com/capitalone/dashboard/service/TestResultServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/TestResultServiceImpl.java @@ -23,9 +23,10 @@ import hygieia.transformer.JunitXmlToTestCapabilityTransformer; import hygieia.transformer.JunitXmlToTestCapabilityTransformerV2; import org.apache.commons.lang3.StringUtils; -import org.apache.log4j.Logger; import org.bson.types.ObjectId; import org.joda.time.format.DateTimeFormat; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; @@ -45,6 +46,7 @@ import java.util.Objects; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.Optional; @Service public class TestResultServiceImpl implements TestResultService { @@ -58,7 +60,7 @@ public class TestResultServiceImpl implements TestResultService { private final CmdbService cmdbService; private final ApiSettings apiSettings; - private static final Logger LOGGER = Logger.getLogger(ApiTokenServiceImpl.class); + private static final Logger LOGGER = LoggerFactory.getLogger(ApiTokenServiceImpl.class); @Autowired public TestResultServiceImpl(TestResultRepository testResultRepository, @@ -81,18 +83,19 @@ public TestResultServiceImpl(TestResultRepository testResultRepository, @Override public DataResponse> search(com.capitalone.dashboard.request.TestResultRequest request) { - Component component = componentRepository.findOne(request.getComponentId()); + Optional componentOptional = componentRepository.findById(request.getComponentId()); - if ((component == null) || !component.getCollectorItems().containsKey(CollectorType.Test)) { + if ((componentOptional.isEmpty()) || !componentOptional.get().getCollectorItems().containsKey(CollectorType.Test)) { return new DataResponse<>(null, 0L); } + Component component = componentOptional.get(); List result = new ArrayList<>(); validateAllCollectorItems(request, component, result); //One collector per Type. get(0) is hardcoded. if (!CollectionUtils.isEmpty(component.getCollectorItems().get(CollectorType.Test)) && (component.getCollectorItems().get(CollectorType.Test).get(0) != null)) { - Collector collector = collectorRepository.findOne(component.getCollectorItems().get(CollectorType.Test).get(0).getCollectorId()); - if (collector != null) { - return new DataResponse<>(pruneToDepth(result, request.getDepth()), collector.getLastExecuted()); + Optional collectorOptional = collectorRepository.findById(component.getCollectorItems().get(CollectorType.Test).get(0).getCollectorId()); + if (collectorOptional.isPresent()) { + return new DataResponse<>(pruneToDepth(result, request.getDepth()), collectorOptional.get().getLastExecuted()); } } @@ -119,7 +122,7 @@ private void addAllTestResultRepositories(com.capitalone.dashboard.request.TestR if (request.getMax() == null) { result.addAll(Lists.newArrayList(testResultRepository.findAll(builder.getValue(), testResult.timestamp.desc()))); } else { - PageRequest pageRequest = new PageRequest(0, request.getMax(), Sort.Direction.DESC, "timestamp"); + PageRequest pageRequest = PageRequest.of(0, request.getMax(), Sort.Direction.DESC, "timestamp"); result.addAll(Lists.newArrayList(testResultRepository.findAll(builder.getValue(), pageRequest).getContent())); } } @@ -709,7 +712,7 @@ private String getConfigurationItem(String configurationItem, String targetAppNa } else if (StringUtils.isNotBlank(targetAppName) ){ List cmdb = cmdbService.configurationItemsByTypeWithFilter("", targetAppName, - new PageRequest(0, 1)).getContent(); + PageRequest.of(0, 1)).getContent(); if(cmdb.size() > 0){ return cmdb.get(0).getConfigurationItem(); } diff --git a/src/main/java/com/capitalone/dashboard/service/UserInfoServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/UserInfoServiceImpl.java index 71452771..7b5cc561 100644 --- a/src/main/java/com/capitalone/dashboard/service/UserInfoServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/UserInfoServiceImpl.java @@ -7,7 +7,9 @@ import com.capitalone.dashboard.auth.AuthProperties; import com.capitalone.dashboard.settings.ApiSettings; import org.apache.commons.lang3.StringUtils; -import org.apache.log4j.Logger; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; @@ -33,7 +35,7 @@ @Component public class UserInfoServiceImpl implements UserInfoService { - private static final Logger LOGGER = Logger.getLogger(UserInfoServiceImpl.class); + private static final Logger LOGGER = LoggerFactory.getLogger(UserInfoServiceImpl.class); private UserInfoRepository userInfoRepository; @Autowired diff --git a/src/main/java/com/capitalone/dashboard/webhook/datasync/ArtifactDataSyncDelegate.java b/src/main/java/com/capitalone/dashboard/webhook/datasync/ArtifactDataSyncDelegate.java index 6186bd3e..fb033310 100644 --- a/src/main/java/com/capitalone/dashboard/webhook/datasync/ArtifactDataSyncDelegate.java +++ b/src/main/java/com/capitalone/dashboard/webhook/datasync/ArtifactDataSyncDelegate.java @@ -53,7 +53,8 @@ public DataSyncResponse clean(Collector collector) { bs.sort(Comparator.comparing(BinaryArtifact::getTimestamp).reversed()); BinaryArtifact binaryArtifact = bs.stream().filter(Objects::nonNull).findFirst().orElse(null); if (Objects.nonNull(binaryArtifact)) { - CollectorItem collectorItem = dataSyncServiceImpl.getCollectorItemRepository().findOne(binaryArtifact.getCollectorItemId()); + CollectorItem collectorItem = dataSyncServiceImpl.getCollectorItemRepository().findById(binaryArtifact.getCollectorItemId()).orElse(null); + if (Objects.isNull(collectorItem)) continue; List suspectCollectorItems = dataSyncUtils.deleteCollectorItems(collectorItems, collectorItem, suspects); collectorItemsCount += suspectCollectorItems.size(); if (CollectionUtils.isEmpty(components)) continue; @@ -71,4 +72,4 @@ public DataSyncResponse clean(Collector collector) { } return new DataSyncResponse(componentIds, collectorItemsCount, collectorName + " refresh Successful==>> Updated " + componentCount + " components and " + collectorItemsCount + " collectorItems."); } -} \ No newline at end of file +} diff --git a/src/main/java/com/capitalone/dashboard/webhook/datasync/DataSyncUtils.java b/src/main/java/com/capitalone/dashboard/webhook/datasync/DataSyncUtils.java index 2f95614e..5111c69a 100644 --- a/src/main/java/com/capitalone/dashboard/webhook/datasync/DataSyncUtils.java +++ b/src/main/java/com/capitalone/dashboard/webhook/datasync/DataSyncUtils.java @@ -38,7 +38,7 @@ public DataSyncUtils(DataSyncServiceImpl dataSyncServiceImpl) { } public int pages(Collector collector) { - Page collectorItemsPage = dataSyncServiceImpl.getCollectorItemRepository().findByCollectorIdIn(Collections.singleton(collector.getId()), new PageRequest(MAX_PAGE_SIZE, MAX_PAGE_SIZE)); + Page collectorItemsPage = dataSyncServiceImpl.getCollectorItemRepository().findByCollectorIdIn(Collections.singleton(collector.getId()), PageRequest.of(MAX_PAGE_SIZE, MAX_PAGE_SIZE)); if (Objects.isNull(collectorItemsPage)) return ZERO; return collectorItemsPage.getTotalPages(); } @@ -47,7 +47,7 @@ public List getAllCollectorItems(Collector collector, int total) LOG.info("starting - collecting collector items"); List collectorItems = new ArrayList<>(); IntStream.range(ZERO, total).forEach(idx -> { - Page collectorItemsPage = dataSyncServiceImpl.getCollectorItemRepository().findByCollectorIdIn(Collections.singleton(collector.getId()), new PageRequest(idx, MAX_PAGE_SIZE)); + Page collectorItemsPage = dataSyncServiceImpl.getCollectorItemRepository().findByCollectorIdIn(Collections.singleton(collector.getId()), PageRequest.of(idx, MAX_PAGE_SIZE)); collectorItems.addAll(collectorItemsPage.getContent()); LOG.info("completed " + idx + " run"); }); @@ -89,7 +89,7 @@ public int clearDuplicateCollectorItemsAndUpdateComponents(List c suspectsList.removeIf(sci -> sci.getId().equals(first.getId())); suspectsList.forEach(sci -> { collectorItems.removeIf(cItem -> cItem.getId().equals(sci.getId())); - dataSyncServiceImpl.getCollectorItemRepository().delete(sci.getId()); + dataSyncServiceImpl.getCollectorItemRepository().deleteById(sci.getId()); }); if (CollectionUtils.isEmpty(components)) return componentCount; int componentsUpdated = updateComponents(collector, components, first, collectorType); @@ -118,7 +118,7 @@ public List deleteCollectorItems(List collectorIte suspectCollectorItems.removeIf(cItem -> cItem.getId().equals(collectorItem.getId())); suspectCollectorItems.forEach(colItem -> { collectorItems.removeIf(cItem -> cItem.getId().equals(colItem.getId())); - dataSyncServiceImpl.getCollectorItemRepository().delete(colItem.getId()); + dataSyncServiceImpl.getCollectorItemRepository().deleteById(colItem.getId()); }); return suspectCollectorItems; } diff --git a/src/main/java/com/capitalone/dashboard/webhook/datasync/GithubDataSyncDelegate.java b/src/main/java/com/capitalone/dashboard/webhook/datasync/GithubDataSyncDelegate.java index 8171967a..dbb787fa 100644 --- a/src/main/java/com/capitalone/dashboard/webhook/datasync/GithubDataSyncDelegate.java +++ b/src/main/java/com/capitalone/dashboard/webhook/datasync/GithubDataSyncDelegate.java @@ -6,7 +6,7 @@ import com.capitalone.dashboard.model.Component; import com.capitalone.dashboard.model.GitRequest; import com.capitalone.dashboard.request.DataSyncResponse; -import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.IterableUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -44,7 +44,11 @@ public DataSyncResponse clean(Collector collector) { List grs = new ArrayList<>(); List components = new ArrayList<>(); suspects.forEach(suspect -> { - GitRequest gitRequest = dataSyncServiceImpl.getGitRequestRepository().findTopByCollectorItemIdOrderByTimestampDesc(suspect.getId()); + List gitRequests = dataSyncServiceImpl.getGitRequestRepository().findAllByCollectorItemIdOrderByTimestampDesc(suspect.getId()); + GitRequest gitRequest = null; + if (CollectionUtils.isNotEmpty(gitRequests)) { + gitRequest = gitRequests.get(0); + } grs.add(gitRequest); List cs = dataSyncServiceImpl.getComponentRepository().findBySCMCollectorItemId(suspect.getId()); components.addAll(cs); @@ -55,7 +59,8 @@ public DataSyncResponse clean(Collector collector) { gs.sort(Comparator.comparing(GitRequest::getTimestamp).reversed()); GitRequest pullRequest = gs.stream().filter(Objects::nonNull).findFirst().orElse(null); if (Objects.nonNull(pullRequest)) { - CollectorItem collectorItem = dataSyncServiceImpl.getCollectorItemRepository().findOne(pullRequest.getCollectorItemId()); + CollectorItem collectorItem = dataSyncServiceImpl.getCollectorItemRepository().findById(pullRequest.getCollectorItemId()).orElse(null); + if (Objects.isNull(collectorItem)) continue; List suspectCollectorItems = dataSyncUtils.deleteCollectorItems(collectorItems, collectorItem, suspects); collectorItemsCount += suspectCollectorItems.size(); if (CollectionUtils.isEmpty(components)) continue; @@ -73,4 +78,4 @@ public DataSyncResponse clean(Collector collector) { } return new DataSyncResponse(componentIds, collectorItemsCount,collectorName + " refresh Successful==>> Updated " + componentCount + " components and " + collectorItemsCount + " collectorItems."); } -} \ No newline at end of file +} diff --git a/src/main/java/com/capitalone/dashboard/webhook/datasync/LibraryPolicyDataSyncDelegate.java b/src/main/java/com/capitalone/dashboard/webhook/datasync/LibraryPolicyDataSyncDelegate.java index f7f85b4d..82598ffb 100644 --- a/src/main/java/com/capitalone/dashboard/webhook/datasync/LibraryPolicyDataSyncDelegate.java +++ b/src/main/java/com/capitalone/dashboard/webhook/datasync/LibraryPolicyDataSyncDelegate.java @@ -56,7 +56,8 @@ public DataSyncResponse clean(Collector collector) { lp.sort(Comparator.comparing(LibraryPolicyResult::getTimestamp).reversed()); LibraryPolicyResult libraryPolicyResult = lp.stream().filter(Objects::nonNull).findFirst().orElse(null); if (Objects.nonNull(libraryPolicyResult)) { - CollectorItem collectorItem = dataSyncServiceImpl.getCollectorItemRepository().findOne(libraryPolicyResult.getCollectorItemId()); + CollectorItem collectorItem = dataSyncServiceImpl.getCollectorItemRepository().findById(libraryPolicyResult.getCollectorItemId()).orElse(null); + if (Objects.isNull(collectorItem)) continue; List suspectCollectorItems = dataSyncUtils.deleteCollectorItems(collectorItems,collectorItem,suspects); collectorItemsCount += suspectCollectorItems.size(); if (CollectionUtils.isEmpty(components)) continue; @@ -75,4 +76,4 @@ public DataSyncResponse clean(Collector collector) { } return new DataSyncResponse(componentIds,collectorItemsCount,collectorName + " refresh Successful==>> Updated " + componentCount + " components and " + collectorItemsCount + " collectorItems."); } -} \ No newline at end of file +} diff --git a/src/main/java/com/capitalone/dashboard/webhook/datasync/SonarDataSyncDelegate.java b/src/main/java/com/capitalone/dashboard/webhook/datasync/SonarDataSyncDelegate.java index 09c0c01b..9c9a2f50 100644 --- a/src/main/java/com/capitalone/dashboard/webhook/datasync/SonarDataSyncDelegate.java +++ b/src/main/java/com/capitalone/dashboard/webhook/datasync/SonarDataSyncDelegate.java @@ -53,7 +53,8 @@ public DataSyncResponse clean(Collector collector) { cq.sort(Comparator.comparing(CodeQuality::getTimestamp).reversed()); CodeQuality codeQuality = cq.stream().filter(Objects::nonNull).findFirst().orElse(null); if (Objects.nonNull(codeQuality)) { - CollectorItem collectorItem = dataSyncServiceImpl.getCollectorItemRepository().findOne(codeQuality.getCollectorItemId()); + CollectorItem collectorItem = dataSyncServiceImpl.getCollectorItemRepository().findById(codeQuality.getCollectorItemId()).orElse(null); + if (Objects.isNull(collectorItem)) continue; List suspectCollectorItems = dataSyncUtils.deleteCollectorItems(collectorItems, collectorItem, suspects); collectorItemsCount += suspectCollectorItems.size(); if (CollectionUtils.isEmpty(components)) continue; @@ -72,4 +73,4 @@ public DataSyncResponse clean(Collector collector) { } return new DataSyncResponse(componentIds, collectorItemsCount,collectorName + " refresh Successful==>> Updated " + componentCount + " components and " + collectorItemsCount + " collectorItems."); } -} \ No newline at end of file +} diff --git a/src/main/java/com/capitalone/dashboard/webhook/datasync/StaticSecurityDataSyncDelegate.java b/src/main/java/com/capitalone/dashboard/webhook/datasync/StaticSecurityDataSyncDelegate.java index 1120f889..a37c773d 100644 --- a/src/main/java/com/capitalone/dashboard/webhook/datasync/StaticSecurityDataSyncDelegate.java +++ b/src/main/java/com/capitalone/dashboard/webhook/datasync/StaticSecurityDataSyncDelegate.java @@ -53,7 +53,8 @@ public DataSyncResponse clean(Collector collector) { cq.sort(Comparator.comparing(CodeQuality::getTimestamp).reversed()); CodeQuality staticSecurity = cq.stream().filter(Objects::nonNull).findFirst().orElse(null); if (Objects.nonNull(staticSecurity)) { - CollectorItem collectorItem = dataSyncServiceImpl.getCollectorItemRepository().findOne(staticSecurity.getCollectorItemId()); + CollectorItem collectorItem = dataSyncServiceImpl.getCollectorItemRepository().findById(staticSecurity.getCollectorItemId()).orElse(null); + if (Objects.isNull(collectorItem)) continue; List suspectCollectorItems = dataSyncUtils.deleteCollectorItems(collectorItems, collectorItem, suspects); collectorItemsCount += suspectCollectorItems.size(); if (CollectionUtils.isEmpty(components)) continue; @@ -72,4 +73,4 @@ public DataSyncResponse clean(Collector collector) { } return new DataSyncResponse(componentIds,collectorItemsCount, collectorName + " refresh Successful==>> Updated " + componentCount + " components and " + collectorItemsCount + " collectorItems."); } -} \ No newline at end of file +} diff --git a/src/main/java/com/capitalone/dashboard/webhook/datasync/TestDataSyncDelegate.java b/src/main/java/com/capitalone/dashboard/webhook/datasync/TestDataSyncDelegate.java index f47b89e0..697a1343 100644 --- a/src/main/java/com/capitalone/dashboard/webhook/datasync/TestDataSyncDelegate.java +++ b/src/main/java/com/capitalone/dashboard/webhook/datasync/TestDataSyncDelegate.java @@ -39,7 +39,8 @@ public DataSyncResponse clean(Collector collector) { TestResult testResult = dataSyncServiceImpl.getTestResultRepository().findTop1ByCollectorItemIdOrderByTimestampDesc(c.getId()); LOG.info("collectorItem run +++" + count + " of " + collectorItems.size()); if (Objects.nonNull(testResult)) { - CollectorItem collectorItem = dataSyncServiceImpl.getCollectorItemRepository().findOne(testResult.getCollectorItemId()); + CollectorItem collectorItem = dataSyncServiceImpl.getCollectorItemRepository().findById(testResult.getCollectorItemId()).orElse(null); + if (Objects.isNull(collectorItem)) continue; collectorItem.getOptions().put(TEST_TYPE, testResult.getType()); dataSyncServiceImpl.getCollectorItemRepository().save(collectorItem); collectorItemsCount++; @@ -64,4 +65,4 @@ private void setTestType(CollectorItem c, String regex, String type) { dataSyncServiceImpl.getCollectorItemRepository().save(c); } } -} \ No newline at end of file +} diff --git a/src/main/java/com/capitalone/dashboard/webhook/github/GitHubCommitV3.java b/src/main/java/com/capitalone/dashboard/webhook/github/GitHubCommitV3.java index 352671d4..9ad023db 100644 --- a/src/main/java/com/capitalone/dashboard/webhook/github/GitHubCommitV3.java +++ b/src/main/java/com/capitalone/dashboard/webhook/github/GitHubCommitV3.java @@ -117,7 +117,7 @@ public String process(JSONObject jsonObject) throws MalformedURLException, Hygie List commitList = getCommits(commitsObjectList, repoUrl, branch, gitHubWebHookToken, senderObj); updateCollectorItemLastUpdated(repoUrl, branch); - commitRepository.save(commitList); + commitRepository.saveAll(commitList); return result; } @@ -272,9 +272,16 @@ private boolean checkCommitsListForSettingPullNumber(List commitsList) { } protected void setCommitPullNumber (Commit commit) { - GitRequest pr = gitRequestRepository.findByScmRevisionNumberOrScmMergeEventRevisionNumber(commit.getScmRevisionNumber()); + List prs = gitRequestRepository.findAllByScmRevisionNumberOrScmMergeEventRevisionNumberOrderByTimestampDesc(commit.getScmRevisionNumber()); + GitRequest pr = null; + if (CollectionUtils.isNotEmpty(prs)) { + pr = prs.get(0); + } if (pr == null) { - pr = gitRequestRepository.findByCommitScmRevisionNumber(commit.getScmRevisionNumber()); + prs = gitRequestRepository.findAllByCommitScmRevisionNumberOrderByTimestampDesc(commit.getScmRevisionNumber()); + if (CollectionUtils.isNotEmpty(prs)) { + pr = prs.get(0); + } } if (pr != null) { commit.setPullNumber(pr.getNumber()); diff --git a/src/main/java/com/capitalone/dashboard/webhook/github/GitHubIssueV3.java b/src/main/java/com/capitalone/dashboard/webhook/github/GitHubIssueV3.java index 8c33d8b5..f038b2f6 100644 --- a/src/main/java/com/capitalone/dashboard/webhook/github/GitHubIssueV3.java +++ b/src/main/java/com/capitalone/dashboard/webhook/github/GitHubIssueV3.java @@ -12,10 +12,13 @@ import com.capitalone.dashboard.model.GitRequest; import com.capitalone.dashboard.repository.GitRequestRepository; import com.capitalone.dashboard.service.CollectorService; +import org.apache.commons.collections4.CollectionUtils; import org.joda.time.DateTime; import org.json.simple.JSONObject; import java.net.MalformedURLException; +import java.util.Comparator; +import java.util.List; import java.util.Map; public class GitHubIssueV3 extends GitHubV3 { @@ -118,8 +121,12 @@ protected GitRequest getIssue(Map issueMap, GitHubParsed gitHubParsed, String br } protected void setCollectorItemId(GitRequest issue) throws HygieiaException, MalformedURLException { - GitRequest existingIssue - = gitRequestRepository.findByScmUrlIgnoreCaseAndScmBranchIgnoreCaseAndNumberAndRequestTypeIgnoreCase(issue.getScmUrl(), issue.getScmBranch(), issue.getNumber(), "issue"); + List issues = gitRequestRepository.findAllByScmUrlIgnoreCaseAndScmBranchIgnoreCaseAndNumberAndRequestTypeIgnoreCase(issue.getScmUrl(), issue.getScmBranch(), issue.getNumber(), "issue"); + GitRequest existingIssue = null; + if (CollectionUtils.isNotEmpty(issues)) { + issues.sort(Comparator.comparing(GitRequest::getTimestamp).reversed()); + existingIssue = issues.get(0); + } if (existingIssue != null) { issue.setId(existingIssue.getId()); issue.setCollectorItemId(existingIssue.getCollectorItemId()); @@ -133,4 +140,4 @@ protected void setCollectorItemId(GitRequest issue) throws HygieiaException, Mal issue.setCollectorItemId(collectorItem.getId()); } } -} \ No newline at end of file +} diff --git a/src/main/java/com/capitalone/dashboard/webhook/github/GitHubPullRequestV3.java b/src/main/java/com/capitalone/dashboard/webhook/github/GitHubPullRequestV3.java index cef9ba14..fb401d7e 100644 --- a/src/main/java/com/capitalone/dashboard/webhook/github/GitHubPullRequestV3.java +++ b/src/main/java/com/capitalone/dashboard/webhook/github/GitHubPullRequestV3.java @@ -20,7 +20,7 @@ import com.capitalone.dashboard.service.CollectorService; import com.capitalone.dashboard.webhook.settings.GitHubWebHookSettings; import com.capitalone.dashboard.webhook.settings.WebHookSettings; -import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import org.apache.commons.logging.Log; @@ -32,12 +32,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.client.RestClientException; import java.net.MalformedURLException; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; -import java.util.List; -import java.util.ArrayList; -import java.util.Collections; +import java.util.*; public class GitHubPullRequestV3 extends GitHubV3 { private static final Log LOG = LogFactory.getLog(GitHubPullRequestV3.class); @@ -281,9 +276,13 @@ protected GitRequest buildGitRequestFromPayload(String repoUrl, String branch, O protected void setCollectorItemId (GitRequest pull) throws MalformedURLException, HygieiaException { long start = System.currentTimeMillis(); - GitRequest existingPR - = gitRequestRepository.findByScmUrlIgnoreCaseAndScmBranchIgnoreCaseAndNumberAndRequestTypeIgnoreCase(pull.getScmUrl(), pull.getScmBranch(), pull.getNumber(), "pull"); - + List gitRequests + = gitRequestRepository.findAllByScmUrlIgnoreCaseAndScmBranchIgnoreCaseAndNumberAndRequestTypeIgnoreCase(pull.getScmUrl(), pull.getScmBranch(), pull.getNumber(), "pull"); + GitRequest existingPR = null; + if (CollectionUtils.isNotEmpty(gitRequests)) { + gitRequests.sort(Comparator.comparing(GitRequest::getTimestamp).reversed()); + existingPR = gitRequests.get(0); + } if (existingPR != null) { pull.setId(existingPR.getId()); pull.setCollectorItemId(existingPR.getCollectorItemId()); @@ -551,4 +550,4 @@ private boolean isValidEvent(String action) { return validPullRequestEvents.contains(PullRequestEvent.fromString(action)); } -} \ No newline at end of file +} diff --git a/src/main/java/com/capitalone/dashboard/webhook/github/GitHubSyncServiceImpl.java b/src/main/java/com/capitalone/dashboard/webhook/github/GitHubSyncServiceImpl.java index 342ddae0..1aa97f1c 100644 --- a/src/main/java/com/capitalone/dashboard/webhook/github/GitHubSyncServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/webhook/github/GitHubSyncServiceImpl.java @@ -596,7 +596,7 @@ private int processCommits(GitHubRepo repo) { if (existingCount == 0) { List newCommits = getCommits(); newCommits.forEach(c -> c.setCollectorItemId(repo.getId())); - Iterable saved = commitRepository.save(newCommits); + Iterable saved = commitRepository.saveAll(newCommits); count = saved != null ? Lists.newArrayList(saved).size() : 0; } else { Collection nonDupCommits = getCommits().stream() @@ -669,7 +669,7 @@ private void processOrphanCommits(GitHubRepo repo) { List orphanSaveList = orphanCommits.stream().filter(c -> !StringUtils.isEmpty(c.getPullNumber())).collect(Collectors.toList()); orphanSaveList.forEach(c -> LOG.info("Updating orphan " + c.getScmRevisionNumber() + " " + new DateTime(c.getScmCommitTimestamp()).toString("yyyy-MM-dd hh:mm:ss.SSa") + " with pull " + c.getPullNumber())); - commitRepository.save(orphanSaveList); + commitRepository.saveAll(orphanSaveList); } diff --git a/src/main/java/com/capitalone/dashboard/webhook/github/GitHubV3.java b/src/main/java/com/capitalone/dashboard/webhook/github/GitHubV3.java index 1d095b39..59027288 100644 --- a/src/main/java/com/capitalone/dashboard/webhook/github/GitHubV3.java +++ b/src/main/java/com/capitalone/dashboard/webhook/github/GitHubV3.java @@ -28,10 +28,7 @@ import org.springframework.web.client.RestClientException; import java.net.MalformedURLException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; public abstract class GitHubV3 { private static final Log LOG = LogFactory.getLog(GitHubV3.class); @@ -139,7 +136,12 @@ protected CollectorItem getCollectorItem(String repoUrl, String branch) throws H if (col == null) throw new HygieiaException("Failed creating collector.", HygieiaException.COLLECTOR_CREATE_ERROR); - CollectorItem item = collectorItemRepository.findRepoByUrlAndBranch(col.getId(), repoUrl, branch); + List items = collectorItemRepository.findAllRepoByUrlAndBranch(col.getId(), repoUrl, branch); + CollectorItem item = null; + if (CollectionUtils.isNotEmpty(items)) { + items.sort(Comparator.comparing(CollectorItem::getLastUpdated).reversed()); + item = items.get(0); + } if (item != null) return item; @@ -270,7 +272,12 @@ protected boolean isRegistered(String repoUrl, String branch) throws HygieiaExce if (col == null) throw new HygieiaException("Failed creating collector.", HygieiaException.COLLECTOR_CREATE_ERROR); - CollectorItem existingItem = getCollectorItemRepository().findRepoByUrlAndBranch(col.getId(), repoUrl, branch, true); + List collectorItems = getCollectorItemRepository().findAllRepoByUrlAndBranchAndEnabled(col.getId(), repoUrl, branch, true); + CollectorItem existingItem = null; + if (CollectionUtils.isNotEmpty(collectorItems)) { + collectorItems.sort(Comparator.comparing(CollectorItem::getLastUpdated).reversed()); + existingItem = collectorItems.get(0); + } return existingItem != null; } -} \ No newline at end of file +} diff --git a/src/main/java/com/capitalone/dashboard/webhook/sonarqube/SonarQubeHookServiceImpl.java b/src/main/java/com/capitalone/dashboard/webhook/sonarqube/SonarQubeHookServiceImpl.java index 9c9a6b5c..1eb44f2a 100644 --- a/src/main/java/com/capitalone/dashboard/webhook/sonarqube/SonarQubeHookServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/webhook/sonarqube/SonarQubeHookServiceImpl.java @@ -343,7 +343,7 @@ public ResponseEntity syncData(SonarDataSyncRequest request) throws Hygi String math = updatedProjects.size() + "/" + projects.size(); String message = math + " sonar collector items and " + compIndex + " dashboard components can be updated"; if (isSync) { - sonarProjectRepository.save(updatedProjects); + sonarProjectRepository.saveAll(updatedProjects); message = math + " sonar collector items and " + compIndex + " dashboard components updated"; } LOG.info(message); diff --git a/src/main/resources/.esapi/ESAPI.properties b/src/main/resources/.esapi/ESAPI.properties new file mode 100644 index 00000000..d51fdb9d --- /dev/null +++ b/src/main/resources/.esapi/ESAPI.properties @@ -0,0 +1,455 @@ +# +# OWASP Enterprise Security API (ESAPI) Properties file -- PRODUCTION Version +# +# This file is part of the Open Web Application Security Project (OWASP) +# Enterprise Security API (ESAPI) project. For details, please see +# http://www.owasp.org/index.php/ESAPI. +# +# Copyright (c) 2008,2009 - The OWASP Foundation +# +# DISCUSS: This may cause a major backwards compatibility issue, etc. but +# from a name space perspective, we probably should have prefaced +# all the property names with ESAPI or at least OWASP. Otherwise +# there could be problems is someone loads this properties file into +# the System properties. We could also put this file into the +# esapi.jar file (perhaps as a ResourceBundle) and then allow an external +# ESAPI properties be defined that would overwrite these defaults. +# That keeps the application's properties relatively simple as usually +# they will only want to override a few properties. If looks like we +# already support multiple override levels of this in the +# DefaultSecurityConfiguration class, but I'm suggesting placing the +# defaults in the esapi.jar itself. That way, if the jar is signed, +# we could detect if those properties had been tampered with. (The +# code to check the jar signatures is pretty simple... maybe 70-90 LOC, +# but off course there is an execution penalty (similar to the way +# that the separate sunjce.jar used to be when a class from it was +# first loaded). Thoughts? +############################################################################### +# +# WARNING: Operating system protection should be used to lock down the .esapi +# resources directory and all the files inside and all the directories all the +# way up to the root directory of the file system. Note that if you are using +# file-based implementations, that some files may need to be read-write as they +# get updated dynamically. +# +# Before using, be sure to update the MasterKey and MasterSalt as described below. +# N.B.: If you had stored data that you have previously encrypted with ESAPI 1.4, +# you *must* FIRST decrypt it using ESAPI 1.4 and then (if so desired) +# re-encrypt it with ESAPI 2.0. If you fail to do this, you will NOT be +# able to decrypt your data with ESAPI 2.0. +# +# YOU HAVE BEEN WARNED!!! More details are in the ESAPI 2.0 Release Notes. +# +#=========================================================================== +# ESAPI Configuration +# +# If true, then print all the ESAPI properties set here when they are loaded. +# If false, they are not printed. Useful to reduce output when running JUnit tests. +# If you need to troubleshoot a properties related problem, turning this on may help. +# This is 'false' in the src/test/resources/.esapi version. It is 'true' by +# default for reasons of backward compatibility with earlier ESAPI versions. +ESAPI.printProperties=true + +# ESAPI is designed to be easily extensible. You can use the reference implementation +# or implement your own providers to take advantage of your enterprise's security +# infrastructure. The functions in ESAPI are referenced using the ESAPI locator, like: +# +# String ciphertext = +# ESAPI.encryptor().encrypt("Secret message"); // Deprecated in 2.0 +# CipherText cipherText = +# ESAPI.encryptor().encrypt(new PlainText("Secret message")); // Preferred +# +# Below you can specify the classname for the provider that you wish to use in your +# application. The only requirement is that it implement the appropriate ESAPI interface. +# This allows you to switch security implementations in the future without rewriting the +# entire application. +# +# ExperimentalAccessController requires ESAPI-AccessControlPolicy.xml in .esapi directory +ESAPI.AccessControl=org.owasp.esapi.reference.DefaultAccessController +# FileBasedAuthenticator requires users.txt file in .esapi directory +ESAPI.Authenticator=org.owasp.esapi.reference.FileBasedAuthenticator +ESAPI.Encoder=org.owasp.esapi.reference.DefaultEncoder +ESAPI.Encryptor=org.owasp.esapi.reference.crypto.JavaEncryptor + +ESAPI.Executor=org.owasp.esapi.reference.DefaultExecutor +ESAPI.HTTPUtilities=org.owasp.esapi.reference.DefaultHTTPUtilities +ESAPI.IntrusionDetector=org.owasp.esapi.reference.DefaultIntrusionDetector +# Log4JFactory Requires log4j.xml or log4j.properties in classpath - http://www.laliluna.de/log4j-tutorial.html +#ESAPI.Logger=org.owasp.esapi.reference.Log4JLogFactory +#ESAPI.Logger=org.owasp.esapi.reference.JavaLogFactory +ESAPI.Logger=org.owasp.esapi.logging.slf4j.Slf4JLogFactory +ESAPI.Randomizer=org.owasp.esapi.reference.DefaultRandomizer +ESAPI.Validator=org.owasp.esapi.reference.DefaultValidator + +#=========================================================================== +# ESAPI Authenticator +# +Authenticator.AllowedLoginAttempts=3 +Authenticator.MaxOldPasswordHashes=13 +Authenticator.UsernameParameterName=username +Authenticator.PasswordParameterName=password +# RememberTokenDuration (in days) +Authenticator.RememberTokenDuration=14 +# Session Timeouts (in minutes) +Authenticator.IdleTimeoutDuration=20 +Authenticator.AbsoluteTimeoutDuration=120 + +#=========================================================================== +# ESAPI Encoder +# +# ESAPI canonicalizes input before validation to prevent bypassing filters with encoded attacks. +# Failure to canonicalize input is a very common mistake when implementing validation schemes. +# Canonicalization is automatic when using the ESAPI Validator, but you can also use the +# following code to canonicalize data. +# +# ESAPI.Encoder().canonicalize( "%22hello world"" ); +# +# Multiple encoding is when a single encoding format is applied multiple times. Allowing +# multiple encoding is strongly discouraged. +Encoder.AllowMultipleEncoding=false + +# Mixed encoding is when multiple different encoding formats are applied, or when +# multiple formats are nested. Allowing multiple encoding is strongly discouraged. +Encoder.AllowMixedEncoding=false + +# The default list of codecs to apply when canonicalizing untrusted data. The list should include the codecs +# for all downstream interpreters or decoders. For example, if the data is likely to end up in a URL, HTML, or +# inside JavaScript, then the list of codecs below is appropriate. The order of the list is not terribly important. +Encoder.DefaultCodecList=HTMLEntityCodec,PercentCodec,JavaScriptCodec + + +#=========================================================================== +# ESAPI Encryption +# +# The ESAPI Encryptor provides basic cryptographic functions with a simplified API. +# To get started, generate a new key using java -classpath esapi.jar org.owasp.esapi.reference.crypto.JavaEncryptor +# There is not currently any support for key rotation, so be careful when changing your key and salt as it +# will invalidate all signed, encrypted, and hashed data. +# +# WARNING: Not all combinations of algorithms and key lengths are supported. +# If you choose to use a key length greater than 128, you MUST download the +# unlimited strength policy files and install in the lib directory of your JRE/JDK. +# See http://java.sun.com/javase/downloads/index.jsp for more information. +# +# Backward compatibility with ESAPI Java 1.4 is supported by the two deprecated API +# methods, Encryptor.encrypt(String) and Encryptor.decrypt(String). However, whenever +# possible, these methods should be avoided as they use ECB cipher mode, which in almost +# all circumstances a poor choice because of it's weakness. CBC cipher mode is the default +# for the new Encryptor encrypt / decrypt methods for ESAPI Java 2.0. In general, you +# should only use this compatibility setting if you have persistent data encrypted with +# version 1.4 and even then, you should ONLY set this compatibility mode UNTIL +# you have decrypted all of your old encrypted data and then re-encrypted it with +# ESAPI 2.0 using CBC mode. If you have some reason to mix the deprecated 1.4 mode +# with the new 2.0 methods, make sure that you use the same cipher algorithm for both +# (256-bit AES was the default for 1.4; 128-bit is the default for 2.0; see below for +# more details.) Otherwise, you will have to use the new 2.0 encrypt / decrypt methods +# where you can specify a SecretKey. (Note that if you are using the 256-bit AES, +# that requires downloading the special jurisdiction policy files mentioned above.) +# +# ***** IMPORTANT: Do NOT forget to replace these with your own values! ***** +# To calculate these values, you can run: +# java -classpath esapi.jar org.owasp.esapi.reference.crypto.JavaEncryptor +# +Encryptor.MasterKey=tzfztf56ftv +Encryptor.MasterSalt=123456ztrewq + +# Provides the default JCE provider that ESAPI will "prefer" for its symmetric +# encryption and hashing. (That is it will look to this provider first, but it +# will defer to other providers if the requested algorithm is not implemented +# by this provider.) If left unset, ESAPI will just use your Java VM's current +# preferred JCE provider, which is generally set in the file +# "$JAVA_HOME/jre/lib/security/java.security". +# +# The main intent of this is to allow ESAPI symmetric encryption to be +# used with a FIPS 140-2 compliant crypto-module. For details, see the section +# "Using ESAPI Symmetric Encryption with FIPS 140-2 Cryptographic Modules" in +# the ESAPI 2.0 Symmetric Encryption User Guide, at: +# http://owasp-esapi-java.googlecode.com/svn/trunk/documentation/esapi4java-core-2.0-symmetric-crypto-user-guide.html +# However, this property also allows you to easily use an alternate JCE provider +# such as "Bouncy Castle" without having to make changes to "java.security". +# See Javadoc for SecurityProviderLoader for further details. If you wish to use +# a provider that is not known to SecurityProviderLoader, you may specify the +# fully-qualified class name of the JCE provider class that implements +# java.security.Provider. If the name contains a '.', this is interpreted as +# a fully-qualified class name that implements java.security.Provider. +# +# NOTE: Setting this property has the side-effect of changing it in your application +# as well, so if you are using JCE in your application directly rather than +# through ESAPI (you wouldn't do that, would you? ;-), it will change the +# preferred JCE provider there as well. +# +# Default: Keeps the JCE provider set to whatever JVM sets it to. +Encryptor.PreferredJCEProvider= + +# AES is the most widely used and strongest encryption algorithm. This +# should agree with your Encryptor.CipherTransformation property. +# By default, ESAPI Java 1.4 uses "PBEWithMD5AndDES" and which is +# very weak. It is essentially a password-based encryption key, hashed +# with MD5 around 1K times and then encrypted with the weak DES algorithm +# (56-bits) using ECB mode and an unspecified padding (it is +# JCE provider specific, but most likely "NoPadding"). However, 2.0 uses +# "AES/CBC/PKCSPadding". If you want to change these, change them here. +# Warning: This property does not control the default reference implementation for +# ESAPI 2.0 using JavaEncryptor. Also, this property will be dropped +# in the future. +# @deprecated +Encryptor.EncryptionAlgorithm=AES +# For ESAPI Java 2.0 - New encrypt / decrypt methods use this. +Encryptor.CipherTransformation=AES/CBC/PKCS5Padding + +# Applies to ESAPI 2.0 and later only! +# Comma-separated list of cipher modes that provide *BOTH* +# confidentiality *AND* message authenticity. (NIST refers to such cipher +# modes as "combined modes" so that's what we shall call them.) If any of these +# cipher modes are used then no MAC is calculated and stored +# in the CipherText upon encryption. Likewise, if one of these +# cipher modes is used with decryption, no attempt will be made +# to validate the MAC contained in the CipherText object regardless +# of whether it contains one or not. Since the expectation is that +# these cipher modes support support message authenticity already, +# injecting a MAC in the CipherText object would be at best redundant. +# +# Note that as of JDK 1.5, the SunJCE provider does not support *any* +# of these cipher modes. Of these listed, only GCM and CCM are currently +# NIST approved. YMMV for other JCE providers. E.g., Bouncy Castle supports +# GCM and CCM with "NoPadding" mode, but not with "PKCS5Padding" or other +# padding modes. +Encryptor.cipher_modes.combined_modes=GCM,CCM,IAPM,EAX,OCB,CWC + +# Applies to ESAPI 2.0 and later only! +# Additional cipher modes allowed for ESAPI 2.0 encryption. These +# cipher modes are in _addition_ to those specified by the property +# 'Encryptor.cipher_modes.combined_modes'. +# Note: We will add support for streaming modes like CFB & OFB once +# we add support for 'specified' to the property 'Encryptor.ChooseIVMethod' +# (probably in ESAPI 2.1). +# DISCUSS: Better name? +Encryptor.cipher_modes.additional_allowed=CBC + +# 128-bit is almost always sufficient and appears to be more resistant to +# related key attacks than is 256-bit AES. Use '_' to use default key size +# for cipher algorithms (where it makes sense because the algorithm supports +# a variable key size). Key length must agree to what's provided as the +# cipher transformation, otherwise this will be ignored after logging a +# warning. +# +# NOTE: This is what applies BOTH ESAPI 1.4 and 2.0. See warning above about mixing! +Encryptor.EncryptionKeyLength=128 + +# Because 2.0 uses CBC mode by default, it requires an initialization vector (IV). +# (All cipher modes except ECB require an IV.) There are two choices: we can either +# use a fixed IV known to both parties or allow ESAPI to choose a random IV. While +# the IV does not need to be hidden from adversaries, it is important that the +# adversary not be allowed to choose it. Also, random IVs are generally much more +# secure than fixed IVs. (In fact, it is essential that feed-back cipher modes +# such as CFB and OFB use a different IV for each encryption with a given key so +# in such cases, random IVs are much preferred. By default, ESAPI 2.0 uses random +# IVs. If you wish to use 'fixed' IVs, set 'Encryptor.ChooseIVMethod=fixed' and +# uncomment the Encryptor.fixedIV. +# +# Valid values: random|fixed|specified 'specified' not yet implemented; planned for 2.1 +Encryptor.ChooseIVMethod=random +# If you choose to use a fixed IV, then you must place a fixed IV here that +# is known to all others who are sharing your secret key. The format should +# be a hex string that is the same length as the cipher block size for the +# cipher algorithm that you are using. The following is an *example* for AES +# from an AES test vector for AES-128/CBC as described in: +# NIST Special Publication 800-38A (2001 Edition) +# "Recommendation for Block Cipher Modes of Operation". +# (Note that the block size for AES is 16 bytes == 128 bits.) +# +Encryptor.fixedIV=0x000102030405060708090a0b0c0d0e0f + +# Whether or not CipherText should use a message authentication code (MAC) with it. +# This prevents an adversary from altering the IV as well as allowing a more +# fool-proof way of determining the decryption failed because of an incorrect +# key being supplied. This refers to the "separate" MAC calculated and stored +# in CipherText, not part of any MAC that is calculated as a result of a +# "combined mode" cipher mode. +# +# If you are using ESAPI with a FIPS 140-2 cryptographic module, you *must* also +# set this property to false. +Encryptor.CipherText.useMAC=true + +# Whether or not the PlainText object may be overwritten and then marked +# eligible for garbage collection. If not set, this is still treated as 'true'. +Encryptor.PlainText.overwrite=true + +# Do not use DES except in a legacy situations. 56-bit is way too small key size. +#Encryptor.EncryptionKeyLength=56 +#Encryptor.EncryptionAlgorithm=DES + +# TripleDES is considered strong enough for most purposes. +# Note: There is also a 112-bit version of DESede. Using the 168-bit version +# requires downloading the special jurisdiction policy from Sun. +#Encryptor.EncryptionKeyLength=168 +#Encryptor.EncryptionAlgorithm=DESede + +Encryptor.HashAlgorithm=SHA-512 +Encryptor.HashIterations=1024 +Encryptor.DigitalSignatureAlgorithm=SHA1withDSA +Encryptor.DigitalSignatureKeyLength=1024 +Encryptor.RandomAlgorithm=SHA1PRNG +Encryptor.CharacterEncoding=UTF-8 + +# This is the Pseudo Random Function (PRF) that ESAPI's Key Derivation Function +# (KDF) normally uses. Note this is *only* the PRF used for ESAPI's KDF and +# *not* what is used for ESAPI's MAC. (Currently, HmacSHA1 is always used for +# the MAC, mostly to keep the overall size at a minimum.) +# +# Currently supported choices for JDK 1.5 and 1.6 are: +# HmacSHA1 (160 bits), HmacSHA256 (256 bits), HmacSHA384 (384 bits), and +# HmacSHA512 (512 bits). +# Note that HmacMD5 is *not* supported for the PRF used by the KDF even though +# the JDKs support it. See the ESAPI 2.0 Symmetric Encryption User Guide +# further details. +Encryptor.KDF.PRF=HmacSHA256 +#=========================================================================== +# ESAPI HttpUtilties +# +# The HttpUtilities provide basic protections to HTTP requests and responses. Primarily these methods +# protect against malicious data from attackers, such as unprintable characters, escaped characters, +# and other simple attacks. The HttpUtilities also provides utility methods for dealing with cookies, +# headers, and CSRF tokens. +# +# Default file upload location (remember to escape backslashes with \\) +HttpUtilities.UploadDir=C:\\ESAPI\\testUpload +HttpUtilities.UploadTempDir=C:\\temp +# Force flags on cookies, if you use HttpUtilities to set cookies +HttpUtilities.ForceHttpOnlySession=false +HttpUtilities.ForceSecureSession=false +HttpUtilities.ForceHttpOnlyCookies=true +HttpUtilities.ForceSecureCookies=true +# Maximum size of HTTP headers +HttpUtilities.MaxHeaderSize=4096 +# File upload configuration +HttpUtilities.ApprovedUploadExtensions=.zip,.pdf,.doc,.docx,.ppt,.pptx,.tar,.gz,.tgz,.rar,.war,.jar,.ear,.xls,.rtf,.properties,.java,.class,.txt,.xml,.jsp,.jsf,.exe,.dll +HttpUtilities.MaxUploadFileBytes=500000000 +# Using UTF-8 throughout your stack is highly recommended. That includes your database driver, +# container, and any other technologies you may be using. Failure to do this may expose you +# to Unicode transcoding injection attacks. Use of UTF-8 does not hinder internationalization. +HttpUtilities.ResponseContentType=text/html; charset=UTF-8 +# This is the name of the cookie used to represent the HTTP session +# Typically this will be the default "JSESSIONID" +HttpUtilities.HttpSessionIdName=JSESSIONID + + + +#=========================================================================== +# ESAPI Executor +# CHECKME - Not sure what this is used for, but surely it should be made OS independent. +Executor.WorkingDirectory=C:\\Windows\\Temp +Executor.ApprovedExecutables=C:\\Windows\\System32\\cmd.exe,C:\\Windows\\System32\\runas.exe + + +#=========================================================================== +# ESAPI Logging +# Set the application name if these logs are combined with other applications +Logger.ApplicationName=hygieia-api-ace +# If you use an HTML log viewer that does not properly HTML escape log data, you can set LogEncodingRequired to true +Logger.LogEncodingRequired=false +# Determines whether ESAPI should log the application name. This might be clutter in some single-server/single-app environments. +Logger.LogApplicationName=true +# Determines whether ESAPI should log the server IP and port. This might be clutter in some single-server environments. +Logger.LogServerIP=true +# LogFileName, the name of the logging file. Provide a full directory path (e.g., C:\\ESAPI\\ESAPI_logging_file) if you +# want to place it in a specific directory. +Logger.LogFileName=ESAPI_logging_file +# MaxLogFileSize, the max size (in bytes) of a single log file before it cuts over to a new one (default is 10,000,000) +Logger.MaxLogFileSize=10000000 + + +#=========================================================================== +# ESAPI Intrusion Detection +# +# Each event has a base to which .count, .interval, and .action are added +# The IntrusionException will fire if we receive "count" events within "interval" seconds +# The IntrusionDetector is configurable to take the following actions: log, logout, and disable +# (multiple actions separated by commas are allowed e.g. event.test.actions=log,disable +# +# Custom Events +# Names must start with "event." as the base +# Use IntrusionDetector.addEvent( "test" ) in your code to trigger "event.test" here +# You can also disable intrusion detection completely by changing +# the following parameter to true +# +IntrusionDetector.Disable=false +# +IntrusionDetector.event.test.count=2 +IntrusionDetector.event.test.interval=10 +IntrusionDetector.event.test.actions=disable,log + +# Exception Events +# All EnterpriseSecurityExceptions are registered automatically +# Call IntrusionDetector.getInstance().addException(e) for Exceptions that do not extend EnterpriseSecurityException +# Use the fully qualified classname of the exception as the base + +# any intrusion is an attack +IntrusionDetector.org.owasp.esapi.errors.IntrusionException.count=1 +IntrusionDetector.org.owasp.esapi.errors.IntrusionException.interval=1 +IntrusionDetector.org.owasp.esapi.errors.IntrusionException.actions=log,disable,logout + +# for test purposes +# CHECKME: Shouldn't there be something in the property name itself that designates +# that these are for testing??? +IntrusionDetector.org.owasp.esapi.errors.IntegrityException.count=10 +IntrusionDetector.org.owasp.esapi.errors.IntegrityException.interval=5 +IntrusionDetector.org.owasp.esapi.errors.IntegrityException.actions=log,disable,logout + +# rapid validation errors indicate scans or attacks in progress +# org.owasp.esapi.errors.ValidationException.count=10 +# org.owasp.esapi.errors.ValidationException.interval=10 +# org.owasp.esapi.errors.ValidationException.actions=log,logout + +# sessions jumping between hosts indicates session hijacking +IntrusionDetector.org.owasp.esapi.errors.AuthenticationHostException.count=2 +IntrusionDetector.org.owasp.esapi.errors.AuthenticationHostException.interval=10 +IntrusionDetector.org.owasp.esapi.errors.AuthenticationHostException.actions=log,logout + + +#=========================================================================== +# ESAPI Validation +# +# The ESAPI Validator works on regular expressions with defined names. You can define names +# either here, or you may define application specific patterns in a separate file defined below. +# This allows enterprises to specify both organizational standards as well as application specific +# validation rules. +# +Validator.ConfigurationFile=validation.properties + +# Validators used by ESAPI +Validator.AccountName=^[a-zA-Z0-9]{3,20}$ +Validator.SystemCommand=^[a-zA-Z\\-\\/]{1,64}$ +Validator.RoleName=^[a-z]{1,20}$ + +#the word TEST below should be changed to your application +#name - only relative URL's are supported +Validator.Redirect=^\\/hygieia-api-ace.*$ + +# Global HTTP Validation Rules +# Values with Base64 encoded data (e.g. encrypted state) will need at least [a-zA-Z0-9\/+=] +Validator.HTTPScheme=^(http|https)$ +Validator.HTTPServerName=^[a-zA-Z0-9_.\\-]*$ +Validator.HTTPParameterName=^[a-zA-Z0-9_]{1,32}$ +Validator.HTTPParameterValue=^[a-zA-Z0-9.\\-\\/+=@_ ]*$ +Validator.HTTPCookieName=^[a-zA-Z0-9\\-_]{1,32}$ +Validator.HTTPCookieValue=^[a-zA-Z0-9\\-\\/+=_ ]*$ +Validator.HTTPHeaderName=^[a-zA-Z0-9\\-_]{1,32}$ +Validator.HTTPHeaderValue=^[a-zA-Z0-9()\\-=\\*\\.\\?;,+\\/:&_ ]*$ +Validator.HTTPContextPath=^\\/?[a-zA-Z0-9.\\-\\/_]*$ +Validator.HTTPServletPath=^[a-zA-Z0-9.\\-\\/_]*$ +Validator.HTTPPath=^[a-zA-Z0-9.\\-_]*$ +Validator.HTTPQueryString=^[a-zA-Z0-9()\\-=\\*\\.\\?;,+\\/:&_ %]*$ +Validator.HTTPURI=^[a-zA-Z0-9()\\-=\\*\\.\\?;,+\\/:&_ ]*$ +Validator.HTTPURL=^.*$ +Validator.HTTPJSESSIONID=^[A-Z0-9]{10,30}$ + +# Validation of file related input +Validator.FileName=^[a-zA-Z0-9!@#$%^&{}\\[\\]()_+\\-=,.~'` ]{1,255}$ +Validator.DirectoryName=^[a-zA-Z0-9:/\\\\!@#$%^&{}\\[\\]()_+\\-=,.~'` ]{1,255}$ + +# Validation of dates. Controls whether or not 'lenient' dates are accepted. +# See DataFormat.setLenient(boolean flag) for further details. +Validator.AcceptLenientDates=false +Logger.UserInfo=false +Logger.ClientInfo=false diff --git a/src/main/resources/.esapi/validation.properties b/src/main/resources/.esapi/validation.properties new file mode 100644 index 00000000..ae870a13 --- /dev/null +++ b/src/main/resources/.esapi/validation.properties @@ -0,0 +1,36 @@ +# OWASP Enterprise Security API (ESAPI) Properties file -- TEST Version +# The ESAPI validator does many security checks on input, such as canonicalization +# and whitelist validation. Note that all of these validation rules are applied *after* +# canonicalization. Double-encoded characters (even with different encodings involved, +# are never allowed. +# +# To use: +# +# First set up a pattern below. You can choose any name you want, prefixed by the word +# "Validation." For example: +# Validation.Email=^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\\.[a-zA-Z]{2,4}$ +# +# Then you can validate in your code against the pattern like this: +# ESAPI.validator().isValidInput("User Email", input, "Email", maxLength, allowNull); +# Where maxLength and allowNull are set for you needs, respectively. +# +# But note, when you use boolean variants of validation functions, you lose critical +# canonicalization. It is preferable to use the "get" methods (which throw exceptions) and +# and use the returned user input which is in canonical form. Consider the following: +# +# try { +# someObject.setEmail(ESAPI.validator().getValidInput("User Email", input, "Email", maxLength, allowNull)); +# +Validator.SafeString=^[.\\p{Alnum}\\p{Space}]{0,1024}$ +#Given the discussion: https://github.com/ESAPI/esapi-java-legacy/issues/374, a better upper-bound for domain name +#was selected as 62. This is slightly under the length in RFC-1035 +Validator.Email=^[A-Za-z0-9._%'-]+@[A-Za-z0-9.-]+\\.[a-zA-Z]{2,62}$ +Validator.Gmail=^[A-Za-z0-9._%'-+]+@[A-Za-z0-9.-]+\\.[a-zA-Z]{2,62}$ +Validator.IPAddress=^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$ +#Validator.URL=^(?:ht|f)tp(s?+)\\:\\/\\/[0-9a-zA-Z](?:[-.\\w]*[0-9a-zA-Z])*(?::(?:0-9)*)*(?:\\/?+)(?:[-a-zA-Z0-9\\.\\?\\,\\:\\'\\/\\\\\\+=&%\\$#_]*)?+$ +Validator.URL=^(?:ht|f)tp(?:s?)(?:[:A-Za-z0-9%/#?&.=-]*)$ +Validator.CreditCard=^(\\d{4}[- ]?){3}\\d{4}$ +Validator.SSN=^(?!000)([0-6]\\d{2}|7([0-6]\\d|7[012]))([ -]?)(?!00)\\d\\d\\3(?!0000)\\d{4}$ +#RegexString here is PURELY for regression testing purposes. NOT for production use. +Validator.RegexString=^[^<>]* +Validator.avaloqLooseSafeString=^[+>= - - - - %d [%thread] %-5level %logger{36} - %msg%n - - - - - - api/logs/devopsdashboard-api-%d{yyyy-MM-dd}.%i.log - - - 20MB - - 30 - - - %d [%thread] %-5level %logger{36} - %msg%n - - - - - - - - + + + + + %d [%thread] %-5level %logger{36} - %msg%n + + + + + + logs/api-%d{yyyy-MM-dd}.%i.log + + + 20MB + + 30 + + + %d [%thread] %-5level %logger{36} - %msg%n + + + + + + + + diff --git a/src/main/resources/static/swagger/css/print.css b/src/main/resources/static/swagger/css/print.css deleted file mode 100644 index d84b17aa..00000000 --- a/src/main/resources/static/swagger/css/print.css +++ /dev/null @@ -1,1498 +0,0 @@ -/* Original style from softwaremaniacs.org (c) Ivan Sagalaev */ -.swagger-section pre code { - display: block; - padding: 0.5em; - background: #F0F0F0; -} - -.swagger-section pre code, -.swagger-section pre .subst, -.swagger-section pre .tag .title, -.swagger-section pre .lisp .title, -.swagger-section pre .clojure .built_in, -.swagger-section pre .nginx .title { - color: black; -} - -.swagger-section pre .string, -.swagger-section pre .title, -.swagger-section pre .constant, -.swagger-section pre .parent, -.swagger-section pre .tag .value, -.swagger-section pre .rules .value, -.swagger-section pre .rules .value .number, -.swagger-section pre .preprocessor, -.swagger-section pre .ruby .symbol, -.swagger-section pre .ruby .symbol .string, -.swagger-section pre .aggregate, -.swagger-section pre .template_tag, -.swagger-section pre .django .variable, -.swagger-section pre .smalltalk .class, -.swagger-section pre .addition, -.swagger-section pre .flow, -.swagger-section pre .stream, -.swagger-section pre .bash .variable, -.swagger-section pre .apache .tag, -.swagger-section pre .apache .cbracket, -.swagger-section pre .tex .command, -.swagger-section pre .tex .special, -.swagger-section pre .erlang_repl .function_or_atom, -.swagger-section pre .markdown .header { - color: #800; -} - -.swagger-section pre .comment, -.swagger-section pre .annotation, -.swagger-section pre .template_comment, -.swagger-section pre .diff .header, -.swagger-section pre .chunk, -.swagger-section pre .markdown .blockquote { - color: #888; -} - -.swagger-section pre .number, -.swagger-section pre .date, -.swagger-section pre .regexp, -.swagger-section pre .literal, -.swagger-section pre .smalltalk .symbol, -.swagger-section pre .smalltalk .char, -.swagger-section pre .go .constant, -.swagger-section pre .change, -.swagger-section pre .markdown .bullet, -.swagger-section pre .markdown .link_url { - color: #080; -} - -.swagger-section pre .label, -.swagger-section pre .javadoc, -.swagger-section pre .ruby .string, -.swagger-section pre .decorator, -.swagger-section pre .filter .argument, -.swagger-section pre .localvars, -.swagger-section pre .array, -.swagger-section pre .attr_selector, -.swagger-section pre .important, -.swagger-section pre .pseudo, -.swagger-section pre .pi, -.swagger-section pre .doctype, -.swagger-section pre .deletion, -.swagger-section pre .envvar, -.swagger-section pre .shebang, -.swagger-section pre .apache .sqbracket, -.swagger-section pre .nginx .built_in, -.swagger-section pre .tex .formula, -.swagger-section pre .erlang_repl .reserved, -.swagger-section pre .prompt, -.swagger-section pre .markdown .link_label, -.swagger-section pre .vhdl .attribute, -.swagger-section pre .clojure .attribute, -.swagger-section pre .coffeescript .property { - color: #88F; -} - -.swagger-section pre .keyword, -.swagger-section pre .id, -.swagger-section pre .phpdoc, -.swagger-section pre .title, -.swagger-section pre .built_in, -.swagger-section pre .aggregate, -.swagger-section pre .css .tag, -.swagger-section pre .javadoctag, -.swagger-section pre .phpdoc, -.swagger-section pre .yardoctag, -.swagger-section pre .smalltalk .class, -.swagger-section pre .winutils, -.swagger-section pre .bash .variable, -.swagger-section pre .apache .tag, -.swagger-section pre .go .typename, -.swagger-section pre .tex .command, -.swagger-section pre .markdown .strong, -.swagger-section pre .request, -.swagger-section pre .status { - font-weight: bold; -} - -.swagger-section pre .markdown .emphasis { - font-style: italic; -} - -.swagger-section pre .nginx .built_in { - font-weight: normal; -} - -.swagger-section pre .coffeescript .javascript, -.swagger-section pre .javascript .xml, -.swagger-section pre .tex .formula, -.swagger-section pre .xml .javascript, -.swagger-section pre .xml .vbscript, -.swagger-section pre .xml .css, -.swagger-section pre .xml .cdata { - opacity: 0.5; -} - -.swagger-section .hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #F0F0F0; -} - -.swagger-section .hljs, -.swagger-section .hljs-subst { - color: #444; -} - -.swagger-section .hljs-keyword, -.swagger-section .hljs-attribute, -.swagger-section .hljs-selector-tag, -.swagger-section .hljs-meta-keyword, -.swagger-section .hljs-doctag, -.swagger-section .hljs-name { - font-weight: bold; -} - -.swagger-section .hljs-built_in, -.swagger-section .hljs-literal, -.swagger-section .hljs-bullet, -.swagger-section .hljs-code, -.swagger-section .hljs-addition { - color: #1F811F; -} - -.swagger-section .hljs-regexp, -.swagger-section .hljs-symbol, -.swagger-section .hljs-variable, -.swagger-section .hljs-template-variable, -.swagger-section .hljs-link, -.swagger-section .hljs-selector-attr, -.swagger-section .hljs-selector-pseudo { - color: #BC6060; -} - -.swagger-section .hljs-type, -.swagger-section .hljs-string, -.swagger-section .hljs-number, -.swagger-section .hljs-selector-id, -.swagger-section .hljs-selector-class, -.swagger-section .hljs-quote, -.swagger-section .hljs-template-tag, -.swagger-section .hljs-deletion { - color: #880000; -} - -.swagger-section .hljs-title, -.swagger-section .hljs-section { - color: #880000; - font-weight: bold; -} - -.swagger-section .hljs-comment { - color: #888888; -} - -.swagger-section .hljs-meta { - color: #2B6EA1; -} - -.swagger-section .hljs-emphasis { - font-style: italic; -} - -.swagger-section .hljs-strong { - font-weight: bold; -} - -.swagger-section .swagger-ui-wrap { - line-height: 1; - font-family: "Droid Sans", sans-serif; - max-width: 960px; - margin-left: auto; - margin-right: auto; - /* JSONEditor specific styling */ -} - -.swagger-section .swagger-ui-wrap b, -.swagger-section .swagger-ui-wrap strong { - font-family: "Droid Sans", sans-serif; - font-weight: bold; -} - -.swagger-section .swagger-ui-wrap q, -.swagger-section .swagger-ui-wrap blockquote { - quotes: none; -} - -.swagger-section .swagger-ui-wrap p { - line-height: 1.4em; - padding: 0 0 10px; - color: #333333; -} - -.swagger-section .swagger-ui-wrap q:before, -.swagger-section .swagger-ui-wrap q:after, -.swagger-section .swagger-ui-wrap blockquote:before, -.swagger-section .swagger-ui-wrap blockquote:after { - content: none; -} - -.swagger-section .swagger-ui-wrap .heading_with_menu h1, -.swagger-section .swagger-ui-wrap .heading_with_menu h2, -.swagger-section .swagger-ui-wrap .heading_with_menu h3, -.swagger-section .swagger-ui-wrap .heading_with_menu h4, -.swagger-section .swagger-ui-wrap .heading_with_menu h5, -.swagger-section .swagger-ui-wrap .heading_with_menu h6 { - display: block; - clear: none; - float: left; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; - width: 60%; -} - -.swagger-section .swagger-ui-wrap table { - border-collapse: collapse; - border-spacing: 0; -} - -.swagger-section .swagger-ui-wrap table thead tr th { - padding: 5px; - font-size: 0.9em; - color: #666666; - border-bottom: 1px solid #999999; -} - -.swagger-section .swagger-ui-wrap table tbody tr:last-child td { - border-bottom: none; -} - -.swagger-section .swagger-ui-wrap table tbody tr.offset { - background-color: #f0f0f0; -} - -.swagger-section .swagger-ui-wrap table tbody tr td { - padding: 6px; - font-size: 0.9em; - border-bottom: 1px solid #cccccc; - vertical-align: top; - line-height: 1.3em; -} - -.swagger-section .swagger-ui-wrap ol { - margin: 0px 0 10px; - padding: 0 0 0 18px; - list-style-type: decimal; -} - -.swagger-section .swagger-ui-wrap ol li { - padding: 5px 0px; - font-size: 0.9em; - color: #333333; -} - -.swagger-section .swagger-ui-wrap ol, -.swagger-section .swagger-ui-wrap ul { - list-style: none; -} - -.swagger-section .swagger-ui-wrap h1 a, -.swagger-section .swagger-ui-wrap h2 a, -.swagger-section .swagger-ui-wrap h3 a, -.swagger-section .swagger-ui-wrap h4 a, -.swagger-section .swagger-ui-wrap h5 a, -.swagger-section .swagger-ui-wrap h6 a { - text-decoration: none; -} - -.swagger-section .swagger-ui-wrap h1 a:hover, -.swagger-section .swagger-ui-wrap h2 a:hover, -.swagger-section .swagger-ui-wrap h3 a:hover, -.swagger-section .swagger-ui-wrap h4 a:hover, -.swagger-section .swagger-ui-wrap h5 a:hover, -.swagger-section .swagger-ui-wrap h6 a:hover { - text-decoration: underline; -} - -.swagger-section .swagger-ui-wrap h1 span.divider, -.swagger-section .swagger-ui-wrap h2 span.divider, -.swagger-section .swagger-ui-wrap h3 span.divider, -.swagger-section .swagger-ui-wrap h4 span.divider, -.swagger-section .swagger-ui-wrap h5 span.divider, -.swagger-section .swagger-ui-wrap h6 span.divider { - color: #aaaaaa; -} - -.swagger-section .swagger-ui-wrap a { - color: #547f00; -} - -.swagger-section .swagger-ui-wrap a img { - border: none; -} - -.swagger-section .swagger-ui-wrap article, -.swagger-section .swagger-ui-wrap aside, -.swagger-section .swagger-ui-wrap details, -.swagger-section .swagger-ui-wrap figcaption, -.swagger-section .swagger-ui-wrap figure, -.swagger-section .swagger-ui-wrap footer, -.swagger-section .swagger-ui-wrap header, -.swagger-section .swagger-ui-wrap hgroup, -.swagger-section .swagger-ui-wrap menu, -.swagger-section .swagger-ui-wrap nav, -.swagger-section .swagger-ui-wrap section, -.swagger-section .swagger-ui-wrap summary { - display: block; -} - -.swagger-section .swagger-ui-wrap pre { - font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; - background-color: #fcf6db; - border: 1px solid #e5e0c6; - padding: 10px; -} - -.swagger-section .swagger-ui-wrap pre code { - line-height: 1.6em; - background: none; -} - -.swagger-section .swagger-ui-wrap .content > .content-type > div > label { - clear: both; - display: block; - color: #0F6AB4; - font-size: 1.1em; - margin: 0; - padding: 15px 0 5px; -} - -.swagger-section .swagger-ui-wrap .content pre { - font-size: 12px; - margin-top: 5px; - padding: 5px; -} - -.swagger-section .swagger-ui-wrap .icon-btn { - cursor: pointer; -} - -.swagger-section .swagger-ui-wrap .info_title { - padding-bottom: 10px; - font-weight: bold; - font-size: 25px; -} - -.swagger-section .swagger-ui-wrap .footer { - margin-top: 20px; -} - -.swagger-section .swagger-ui-wrap p.big, -.swagger-section .swagger-ui-wrap div.big p { - font-size: 1em; - margin-bottom: 10px; -} - -.swagger-section .swagger-ui-wrap form.fullwidth ol li.string input, -.swagger-section .swagger-ui-wrap form.fullwidth ol li.url input, -.swagger-section .swagger-ui-wrap form.fullwidth ol li.text textarea, -.swagger-section .swagger-ui-wrap form.fullwidth ol li.numeric input { - width: 500px !important; -} - -.swagger-section .swagger-ui-wrap .info_license { - padding-bottom: 5px; -} - -.swagger-section .swagger-ui-wrap .info_tos { - padding-bottom: 5px; -} - -.swagger-section .swagger-ui-wrap .message-fail { - color: #cc0000; -} - -.swagger-section .swagger-ui-wrap .info_url { - padding-bottom: 5px; -} - -.swagger-section .swagger-ui-wrap .info_email { - padding-bottom: 5px; -} - -.swagger-section .swagger-ui-wrap .info_name { - padding-bottom: 5px; -} - -.swagger-section .swagger-ui-wrap .info_description { - padding-bottom: 10px; - font-size: 15px; -} - -.swagger-section .swagger-ui-wrap .markdown ol li, -.swagger-section .swagger-ui-wrap .markdown ul li { - padding: 3px 0px; - line-height: 1.4em; - color: #333333; -} - -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.string input, -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.url input, -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.numeric input { - display: block; - padding: 4px; - width: auto; - clear: both; -} - -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.string input.title, -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.url input.title, -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.numeric input.title { - font-size: 1.3em; -} - -.swagger-section .swagger-ui-wrap table.fullwidth { - width: 100%; -} - -.swagger-section .swagger-ui-wrap .model-signature { - font-family: "Droid Sans", sans-serif; - font-size: 1em; - line-height: 1.5em; -} - -.swagger-section .swagger-ui-wrap .model-signature .signature-nav a { - text-decoration: none; - color: #AAA; -} - -.swagger-section .swagger-ui-wrap .model-signature .signature-nav a:hover { - text-decoration: underline; - color: black; -} - -.swagger-section .swagger-ui-wrap .model-signature .signature-nav .selected { - color: black; - text-decoration: none; -} - -.swagger-section .swagger-ui-wrap .model-signature .propType { - color: #5555aa; -} - -.swagger-section .swagger-ui-wrap .model-signature pre:hover { - background-color: #ffffdd; -} - -.swagger-section .swagger-ui-wrap .model-signature pre { - font-size: .85em; - line-height: 1.2em; - overflow: auto; - max-height: 200px; - cursor: pointer; -} - -.swagger-section .swagger-ui-wrap .model-signature ul.signature-nav { - display: block; - min-width: 230px; - margin: 0; - padding: 0; -} - -.swagger-section .swagger-ui-wrap .model-signature ul.signature-nav li:last-child { - padding-right: 0; - border-right: none; -} - -.swagger-section .swagger-ui-wrap .model-signature ul.signature-nav li { - float: left; - margin: 0 5px 5px 0; - padding: 2px 5px 2px 0; - border-right: 1px solid #ddd; -} - -.swagger-section .swagger-ui-wrap .model-signature .propOpt { - color: #555; -} - -.swagger-section .swagger-ui-wrap .model-signature .snippet small { - font-size: 0.75em; -} - -.swagger-section .swagger-ui-wrap .model-signature .propOptKey { - font-style: italic; -} - -.swagger-section .swagger-ui-wrap .model-signature .description .strong { - font-weight: bold; - color: #000; - font-size: .9em; -} - -.swagger-section .swagger-ui-wrap .model-signature .description div { - font-size: 0.9em; - line-height: 1.5em; - margin-left: 1em; -} - -.swagger-section .swagger-ui-wrap .model-signature .description .stronger { - font-weight: bold; - color: #000; -} - -.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper { - border-spacing: 0; - position: absolute; - background-color: #ffffff; - border: 1px solid #bbbbbb; - display: none; - font-size: 11px; - max-width: 400px; - line-height: 30px; - color: black; - padding: 5px; - margin-left: 10px; -} - -.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper th { - text-align: center; - background-color: #eeeeee; - border: 1px solid #bbbbbb; - font-size: 11px; - color: #666666; - font-weight: bold; - padding: 5px; - line-height: 15px; -} - -.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper .optionName { - font-weight: bold; -} - -.swagger-section .swagger-ui-wrap .model-signature .description .propDesc.markdown > p:first-child, -.swagger-section .swagger-ui-wrap .model-signature .description .propDesc.markdown > p:last-child { - display: inline; -} - -.swagger-section .swagger-ui-wrap .model-signature .description .propDesc.markdown > p:not(:first-child):before { - display: block; - content: ''; -} - -.swagger-section .swagger-ui-wrap .model-signature .description span:last-of-type.propDesc.markdown > p:only-child { - margin-right: -3px; -} - -.swagger-section .swagger-ui-wrap .model-signature .propName { - font-weight: bold; -} - -.swagger-section .swagger-ui-wrap .model-signature .signature-container { - clear: both; -} - -.swagger-section .swagger-ui-wrap .body-textarea { - width: 300px; - height: 100px; - border: 1px solid #aaa; -} - -.swagger-section .swagger-ui-wrap .markdown p code, -.swagger-section .swagger-ui-wrap .markdown li code { - font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; - background-color: #f0f0f0; - color: black; - padding: 1px 3px; -} - -.swagger-section .swagger-ui-wrap .required { - font-weight: bold; -} - -.swagger-section .swagger-ui-wrap .editor_holder { - font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; - font-size: 0.9em; -} - -.swagger-section .swagger-ui-wrap .editor_holder label { - font-weight: normal !important; - /* JSONEditor uses bold by default for all labels, we revert that back to normal to not give the impression that by default fields are required */ -} - -.swagger-section .swagger-ui-wrap .editor_holder label.required { - font-weight: bold !important; -} - -.swagger-section .swagger-ui-wrap input.parameter { - width: 300px; - border: 1px solid #aaa; -} - -.swagger-section .swagger-ui-wrap h1 { - color: black; - font-size: 1.5em; - line-height: 1.3em; - padding: 10px 0 10px 0; - font-family: "Droid Sans", sans-serif; - font-weight: bold; -} - -.swagger-section .swagger-ui-wrap .heading_with_menu { - float: none; - clear: both; - overflow: hidden; - display: block; -} - -.swagger-section .swagger-ui-wrap .heading_with_menu ul { - display: block; - clear: none; - float: right; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; - margin-top: 10px; -} - -.swagger-section .swagger-ui-wrap h2 { - color: black; - font-size: 1.3em; - padding: 10px 0 10px 0; -} - -.swagger-section .swagger-ui-wrap h2 a { - color: black; -} - -.swagger-section .swagger-ui-wrap h2 span.sub { - font-size: 0.7em; - color: #999999; - font-style: italic; -} - -.swagger-section .swagger-ui-wrap h2 span.sub a { - color: #777777; -} - -.swagger-section .swagger-ui-wrap span.weak { - color: #666666; -} - -.swagger-section .swagger-ui-wrap .message-success { - color: #89BF04; -} - -.swagger-section .swagger-ui-wrap caption, -.swagger-section .swagger-ui-wrap th, -.swagger-section .swagger-ui-wrap td { - text-align: left; - font-weight: normal; - vertical-align: middle; -} - -.swagger-section .swagger-ui-wrap .code { - font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; -} - -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.text textarea { - font-family: "Droid Sans", sans-serif; - height: 250px; - padding: 4px; - display: block; - clear: both; -} - -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.select select { - display: block; - clear: both; -} - -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean { - float: none; - clear: both; - overflow: hidden; - display: block; -} - -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean label { - display: block; - float: left; - clear: none; - margin: 0; - padding: 0; -} - -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean input { - display: block; - float: left; - clear: none; - margin: 0 5px 0 0; -} - -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.required label { - color: black; -} - -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li label { - display: block; - clear: both; - width: auto; - padding: 0 0 3px; - color: #666666; -} - -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li label abbr { - padding-left: 3px; - color: #888888; -} - -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li p.inline-hints { - margin-left: 0; - font-style: italic; - font-size: 0.9em; - margin: 0; -} - -.swagger-section .swagger-ui-wrap form.formtastic fieldset.buttons { - margin: 0; - padding: 0; -} - -.swagger-section .swagger-ui-wrap span.blank, -.swagger-section .swagger-ui-wrap span.empty { - color: #888888; - font-style: italic; -} - -.swagger-section .swagger-ui-wrap .markdown h3 { - color: #547f00; -} - -.swagger-section .swagger-ui-wrap .markdown h4 { - color: #666666; -} - -.swagger-section .swagger-ui-wrap .markdown pre { - font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; - background-color: #fcf6db; - border: 1px solid #e5e0c6; - padding: 10px; - margin: 0 0 10px 0; -} - -.swagger-section .swagger-ui-wrap .markdown pre code { - line-height: 1.6em; -} - -.swagger-section .swagger-ui-wrap div.gist { - margin: 20px 0 25px 0 !important; -} - -.swagger-section .swagger-ui-wrap ul#resources { - font-family: "Droid Sans", sans-serif; - font-size: 0.9em; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource { - border-bottom: 1px solid #dddddd; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource:hover div.heading h2 a, -.swagger-section .swagger-ui-wrap ul#resources li.resource.active div.heading h2 a { - color: black; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource:hover div.heading ul.options li a, -.swagger-section .swagger-ui-wrap ul#resources li.resource.active div.heading ul.options li a { - color: #555555; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource:last-child { - border-bottom: none; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading { - border: 1px solid transparent; - float: none; - clear: both; - overflow: hidden; - display: block; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options { - overflow: hidden; - padding: 0; - display: block; - clear: none; - float: right; - margin: 14px 10px 0 0; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li { - float: left; - clear: none; - margin: 0; - padding: 2px 10px; - border-right: 1px solid #dddddd; - color: #666666; - font-size: 0.9em; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a { - color: #aaaaaa; - text-decoration: none; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:hover { - text-decoration: underline; - color: black; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:hover, -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:active, -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a.active { - text-decoration: underline; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li:first-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li.first { - padding-left: 0; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li:last-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li.last { - padding-right: 0; - border-right: none; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options:first-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options.first { - padding-left: 0; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 { - color: #999999; - padding-left: 0; - display: block; - clear: none; - float: left; - font-family: "Droid Sans", sans-serif; - font-weight: bold; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 a { - color: #999999; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 a:hover { - color: black; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation { - float: none; - clear: both; - overflow: hidden; - display: block; - margin: 0 0 10px; - padding: 0; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading { - float: none; - clear: both; - overflow: hidden; - display: block; - margin: 0; - padding: 0; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 { - display: block; - clear: none; - float: left; - width: auto; - margin: 0; - padding: 0; - line-height: 1.1em; - color: black; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path { - padding-left: 10px; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path a { - color: black; - text-decoration: none; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path a.toggleOperation.deprecated { - text-decoration: line-through; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path a:hover { - text-decoration: underline; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.http_method a { - text-transform: uppercase; - text-decoration: none; - color: white; - display: inline-block; - width: 50px; - font-size: 0.7em; - text-align: center; - padding: 7px 0 4px; - -moz-border-radius: 2px; - -webkit-border-radius: 2px; - -o-border-radius: 2px; - -ms-border-radius: 2px; - -khtml-border-radius: 2px; - border-radius: 2px; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span { - margin: 0; - padding: 0; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options { - overflow: hidden; - padding: 0; - display: block; - clear: none; - float: right; - margin: 6px 10px 0 0; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li { - float: left; - clear: none; - margin: 0; - padding: 2px 10px; - font-size: 0.9em; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li a { - text-decoration: none; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li.access { - color: black; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content { - border-top: none; - padding: 10px; - -moz-border-radius-bottomleft: 6px; - -webkit-border-bottom-left-radius: 6px; - -o-border-bottom-left-radius: 6px; - -ms-border-bottom-left-radius: 6px; - -khtml-border-bottom-left-radius: 6px; - border-bottom-left-radius: 6px; - -moz-border-radius-bottomright: 6px; - -webkit-border-bottom-right-radius: 6px; - -o-border-bottom-right-radius: 6px; - -ms-border-bottom-right-radius: 6px; - -khtml-border-bottom-right-radius: 6px; - border-bottom-right-radius: 6px; - margin: 0 0 20px; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content h4 { - font-size: 1.1em; - margin: 0; - padding: 15px 0 5px; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header { - float: none; - clear: both; - overflow: hidden; - display: block; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header a { - padding: 4px 0 0 10px; - display: inline-block; - font-size: 0.9em; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header input.submit { - display: block; - clear: none; - float: left; - padding: 6px 8px; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header span.response_throbber { - background-image: url('../images/throbber.gif'); - width: 128px; - height: 16px; - display: block; - clear: none; - float: right; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content form input[type='text'].error { - outline: 2px solid black; - outline-color: #cc0000; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content form select[name='parameterContentType'] { - max-width: 300px; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.response div.block pre { - font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; - padding: 10px; - font-size: 0.9em; - max-height: 400px; - overflow-y: auto; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading { - background-color: #f9f2e9; - border: 1px solid #f0e0ca; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading h3 span.http_method a { - background-color: #c5862b; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li { - border-right: 1px solid #dddddd; - border-right-color: #f0e0ca; - color: #c5862b; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li a { - color: #c5862b; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content { - background-color: #faf5ee; - border: 1px solid #f0e0ca; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content h4 { - color: #c5862b; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content div.sandbox_header a { - color: #dcb67f; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading { - background-color: #fcffcd; - border: 1px solid black; - border-color: #ffd20f; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading h3 span.http_method a { - text-transform: uppercase; - background-color: #ffd20f; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li { - border-right: 1px solid #dddddd; - border-right-color: #ffd20f; - color: #ffd20f; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li a { - color: #ffd20f; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content { - background-color: #fcffcd; - border: 1px solid black; - border-color: #ffd20f; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content h4 { - color: #ffd20f; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content div.sandbox_header a { - color: #6fc992; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading { - background-color: #f5e8e8; - border: 1px solid #e8c6c7; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading h3 span.http_method a { - text-transform: uppercase; - background-color: #a41e22; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li { - border-right: 1px solid #dddddd; - border-right-color: #e8c6c7; - color: #a41e22; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li a { - color: #a41e22; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content { - background-color: #f7eded; - border: 1px solid #e8c6c7; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content h4 { - color: #a41e22; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content div.sandbox_header a { - color: #c8787a; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading { - background-color: #e7f6ec; - border: 1px solid #c3e8d1; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading h3 span.http_method a { - background-color: #10a54a; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li { - border-right: 1px solid #dddddd; - border-right-color: #c3e8d1; - color: #10a54a; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li a { - color: #10a54a; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content { - background-color: #ebf7f0; - border: 1px solid #c3e8d1; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content h4 { - color: #10a54a; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content div.sandbox_header a { - color: #6fc992; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading { - background-color: #FCE9E3; - border: 1px solid #F5D5C3; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading h3 span.http_method a { - background-color: #D38042; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li { - border-right: 1px solid #dddddd; - border-right-color: #f0cecb; - color: #D38042; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li a { - color: #D38042; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content { - background-color: #faf0ef; - border: 1px solid #f0cecb; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content h4 { - color: #D38042; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content div.sandbox_header a { - color: #dcb67f; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading { - background-color: #e7f0f7; - border: 1px solid #c3d9ec; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading h3 span.http_method a { - background-color: #0f6ab4; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li { - border-right: 1px solid #dddddd; - border-right-color: #c3d9ec; - color: #0f6ab4; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li a { - color: #0f6ab4; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content { - background-color: #ebf3f9; - border: 1px solid #c3d9ec; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content h4 { - color: #0f6ab4; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content div.sandbox_header a { - color: #6fa5d2; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading { - background-color: #e7f0f7; - border: 1px solid #c3d9ec; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading h3 span.http_method a { - background-color: #0f6ab4; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading ul.options li { - border-right: 1px solid #dddddd; - border-right-color: #c3d9ec; - color: #0f6ab4; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading ul.options li a { - color: #0f6ab4; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.content { - background-color: #ebf3f9; - border: 1px solid #c3d9ec; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.content h4 { - color: #0f6ab4; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.content div.sandbox_header a { - color: #6fa5d2; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content { - border-top: none; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li:last-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li:last-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li:last-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li:last-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li:last-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li:last-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li.last, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li.last, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li.last, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li.last, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li.last, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li.last { - padding-right: 0; - border-right: none; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a:hover, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a:active, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a.active { - text-decoration: underline; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li:first-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li.first { - padding-left: 0; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations:first-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations.first { - padding-left: 0; -} - -.swagger-section .swagger-ui-wrap p#colophon { - margin: 0 15px 40px 15px; - padding: 10px 0; - font-size: 0.8em; - border-top: 1px solid #dddddd; - font-family: "Droid Sans", sans-serif; - color: #999999; - font-style: italic; -} - -.swagger-section .swagger-ui-wrap p#colophon a { - text-decoration: none; - color: #547f00; -} - -.swagger-section .swagger-ui-wrap h3 { - color: black; - font-size: 1.1em; - padding: 10px 0 10px 0; -} - -.swagger-section .swagger-ui-wrap .markdown ol, -.swagger-section .swagger-ui-wrap .markdown ul { - font-family: "Droid Sans", sans-serif; - margin: 5px 0 10px; - padding: 0 0 0 18px; - list-style-type: disc; -} - -.swagger-section .swagger-ui-wrap form.form_box { - background-color: #ebf3f9; - border: 1px solid #c3d9ec; - padding: 10px; -} - -.swagger-section .swagger-ui-wrap form.form_box label { - color: #0f6ab4 !important; -} - -.swagger-section .swagger-ui-wrap form.form_box input[type=submit] { - display: block; - padding: 10px; -} - -.swagger-section .swagger-ui-wrap form.form_box p.weak { - font-size: 0.8em; -} - -.swagger-section .swagger-ui-wrap form.form_box p { - font-size: 0.9em; - padding: 0 0 15px; - color: #7e7b6d; -} - -.swagger-section .swagger-ui-wrap form.form_box p a { - color: #646257; -} - -.swagger-section .swagger-ui-wrap form.form_box p strong { - color: black; -} - -.swagger-section .swagger-ui-wrap .operation-status td.markdown > p:last-child { - padding-bottom: 0; -} - -.swagger-section .title { - font-style: bold; -} - -.swagger-section .secondary_form { - display: none; -} - -.swagger-section .main_image { - display: block; - margin-left: auto; - margin-right: auto; -} - -.swagger-section .oauth_body { - margin-left: 100px; - margin-right: 100px; -} - -.swagger-section .oauth_submit { - text-align: center; -} - -.swagger-section .api-popup-dialog { - z-index: 10000; - position: absolute; - width: 500px; - background: #FFF; - padding: 20px; - border: 1px solid #ccc; - border-radius: 5px; - display: none; - font-size: 13px; - color: #777; -} - -.swagger-section .api-popup-dialog .api-popup-title { - font-size: 24px; - padding: 10px 0; -} - -.swagger-section .api-popup-dialog .api-popup-title { - font-size: 24px; - padding: 10px 0; -} - -.swagger-section .api-popup-dialog .error-msg { - padding-left: 5px; - padding-bottom: 5px; -} - -.swagger-section .api-popup-dialog .api-popup-authbtn { - height: 30px; -} - -.swagger-section .api-popup-dialog .api-popup-cancel { - height: 30px; -} - -.swagger-section .api-popup-scopes { - padding: 10px 20px; -} - -.swagger-section .api-popup-scopes li { - padding: 5px 0; - line-height: 20px; -} - -.swagger-section .api-popup-scopes li input { - position: relative; - top: 2px; -} - -.swagger-section .api-popup-scopes .api-scope-desc { - padding-left: 20px; - font-style: italic; -} - -.swagger-section .api-popup-actions { - padding-top: 10px; -} - -#header { - display: none; -} - -.swagger-section .swagger-ui-wrap .model-signature pre { - max-height: none; -} - -.swagger-section .swagger-ui-wrap .body-textarea { - width: 100px; -} - -.swagger-section .swagger-ui-wrap input.parameter { - width: 100px; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options { - display: none; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints { - display: block !important; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content { - display: block !important; -} diff --git a/src/main/resources/static/swagger/css/reset.css b/src/main/resources/static/swagger/css/reset.css deleted file mode 100644 index 8b259cad..00000000 --- a/src/main/resources/static/swagger/css/reset.css +++ /dev/null @@ -1,131 +0,0 @@ -/* http://meyerweb.com/eric/tools/css/reset/ v2.0 | 20110126 */ -html, -body, -div, -span, -applet, -object, -iframe, -h1, -h2, -h3, -h4, -h5, -h6, -p, -blockquote, -pre, -a, -abbr, -acronym, -address, -big, -cite, -code, -del, -dfn, -em, -img, -ins, -kbd, -q, -s, -samp, -small, -strike, -strong, -sub, -sup, -tt, -var, -b, -u, -i, -center, -dl, -dt, -dd, -ol, -ul, -li, -fieldset, -form, -label, -legend, -table, -caption, -tbody, -tfoot, -thead, -tr, -th, -td, -article, -aside, -canvas, -details, -embed, -figure, -figcaption, -footer, -header, -hgroup, -menu, -nav, -output, -ruby, -section, -summary, -time, -mark, -audio, -video { - margin: 0; - padding: 0; - border: 0; - font-size: 100%; - font: inherit; - vertical-align: baseline; -} - -/* HTML5 display-role reset for older browsers */ -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -menu, -nav, -section { - display: block; -} - -body { - line-height: 1; -} - -ol, -ul { - list-style: none; -} - -blockquote, -q { - quotes: none; -} - -blockquote:before, -blockquote:after, -q:before, -q:after { - content: ''; - content: none; -} - -table { - border-collapse: collapse; - border-spacing: 0; -} diff --git a/src/main/resources/static/swagger/css/screen.css b/src/main/resources/static/swagger/css/screen.css deleted file mode 100644 index 788121f6..00000000 --- a/src/main/resources/static/swagger/css/screen.css +++ /dev/null @@ -1,1629 +0,0 @@ -/* Original style from softwaremaniacs.org (c) Ivan Sagalaev */ -.swagger-section pre code { - display: block; - padding: 0.5em; - background: #F0F0F0; -} - -.swagger-section pre code, -.swagger-section pre .subst, -.swagger-section pre .tag .title, -.swagger-section pre .lisp .title, -.swagger-section pre .clojure .built_in, -.swagger-section pre .nginx .title { - color: black; -} - -.swagger-section pre .string, -.swagger-section pre .title, -.swagger-section pre .constant, -.swagger-section pre .parent, -.swagger-section pre .tag .value, -.swagger-section pre .rules .value, -.swagger-section pre .rules .value .number, -.swagger-section pre .preprocessor, -.swagger-section pre .ruby .symbol, -.swagger-section pre .ruby .symbol .string, -.swagger-section pre .aggregate, -.swagger-section pre .template_tag, -.swagger-section pre .django .variable, -.swagger-section pre .smalltalk .class, -.swagger-section pre .addition, -.swagger-section pre .flow, -.swagger-section pre .stream, -.swagger-section pre .bash .variable, -.swagger-section pre .apache .tag, -.swagger-section pre .apache .cbracket, -.swagger-section pre .tex .command, -.swagger-section pre .tex .special, -.swagger-section pre .erlang_repl .function_or_atom, -.swagger-section pre .markdown .header { - color: #800; -} - -.swagger-section pre .comment, -.swagger-section pre .annotation, -.swagger-section pre .template_comment, -.swagger-section pre .diff .header, -.swagger-section pre .chunk, -.swagger-section pre .markdown .blockquote { - color: #888; -} - -.swagger-section pre .number, -.swagger-section pre .date, -.swagger-section pre .regexp, -.swagger-section pre .literal, -.swagger-section pre .smalltalk .symbol, -.swagger-section pre .smalltalk .char, -.swagger-section pre .go .constant, -.swagger-section pre .change, -.swagger-section pre .markdown .bullet, -.swagger-section pre .markdown .link_url { - color: #080; -} - -.swagger-section pre .label, -.swagger-section pre .javadoc, -.swagger-section pre .ruby .string, -.swagger-section pre .decorator, -.swagger-section pre .filter .argument, -.swagger-section pre .localvars, -.swagger-section pre .array, -.swagger-section pre .attr_selector, -.swagger-section pre .important, -.swagger-section pre .pseudo, -.swagger-section pre .pi, -.swagger-section pre .doctype, -.swagger-section pre .deletion, -.swagger-section pre .envvar, -.swagger-section pre .shebang, -.swagger-section pre .apache .sqbracket, -.swagger-section pre .nginx .built_in, -.swagger-section pre .tex .formula, -.swagger-section pre .erlang_repl .reserved, -.swagger-section pre .prompt, -.swagger-section pre .markdown .link_label, -.swagger-section pre .vhdl .attribute, -.swagger-section pre .clojure .attribute, -.swagger-section pre .coffeescript .property { - color: #88F; -} - -.swagger-section pre .keyword, -.swagger-section pre .id, -.swagger-section pre .phpdoc, -.swagger-section pre .title, -.swagger-section pre .built_in, -.swagger-section pre .aggregate, -.swagger-section pre .css .tag, -.swagger-section pre .javadoctag, -.swagger-section pre .phpdoc, -.swagger-section pre .yardoctag, -.swagger-section pre .smalltalk .class, -.swagger-section pre .winutils, -.swagger-section pre .bash .variable, -.swagger-section pre .apache .tag, -.swagger-section pre .go .typename, -.swagger-section pre .tex .command, -.swagger-section pre .markdown .strong, -.swagger-section pre .request, -.swagger-section pre .status { - font-weight: bold; -} - -.swagger-section pre .markdown .emphasis { - font-style: italic; -} - -.swagger-section pre .nginx .built_in { - font-weight: normal; -} - -.swagger-section pre .coffeescript .javascript, -.swagger-section pre .javascript .xml, -.swagger-section pre .tex .formula, -.swagger-section pre .xml .javascript, -.swagger-section pre .xml .vbscript, -.swagger-section pre .xml .css, -.swagger-section pre .xml .cdata { - opacity: 0.5; -} - -.swagger-section .hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #F0F0F0; -} - -.swagger-section .hljs, -.swagger-section .hljs-subst { - color: #444; -} - -.swagger-section .hljs-keyword, -.swagger-section .hljs-attribute, -.swagger-section .hljs-selector-tag, -.swagger-section .hljs-meta-keyword, -.swagger-section .hljs-doctag, -.swagger-section .hljs-name { - font-weight: bold; -} - -.swagger-section .hljs-built_in, -.swagger-section .hljs-literal, -.swagger-section .hljs-bullet, -.swagger-section .hljs-code, -.swagger-section .hljs-addition { - color: #1F811F; -} - -.swagger-section .hljs-regexp, -.swagger-section .hljs-symbol, -.swagger-section .hljs-variable, -.swagger-section .hljs-template-variable, -.swagger-section .hljs-link, -.swagger-section .hljs-selector-attr, -.swagger-section .hljs-selector-pseudo { - color: #BC6060; -} - -.swagger-section .hljs-type, -.swagger-section .hljs-string, -.swagger-section .hljs-number, -.swagger-section .hljs-selector-id, -.swagger-section .hljs-selector-class, -.swagger-section .hljs-quote, -.swagger-section .hljs-template-tag, -.swagger-section .hljs-deletion { - color: #880000; -} - -.swagger-section .hljs-title, -.swagger-section .hljs-section { - color: #880000; - font-weight: bold; -} - -.swagger-section .hljs-comment { - color: #888888; -} - -.swagger-section .hljs-meta { - color: #2B6EA1; -} - -.swagger-section .hljs-emphasis { - font-style: italic; -} - -.swagger-section .hljs-strong { - font-weight: bold; -} - -.swagger-section .swagger-ui-wrap { - line-height: 1; - font-family: "Droid Sans", sans-serif; - max-width: 960px; - margin-left: auto; - margin-right: auto; - /* JSONEditor specific styling */ -} - -.swagger-section .swagger-ui-wrap b, -.swagger-section .swagger-ui-wrap strong { - font-family: "Droid Sans", sans-serif; - font-weight: bold; -} - -.swagger-section .swagger-ui-wrap q, -.swagger-section .swagger-ui-wrap blockquote { - quotes: none; -} - -.swagger-section .swagger-ui-wrap p { - line-height: 1.4em; - padding: 0 0 10px; - color: #333333; -} - -.swagger-section .swagger-ui-wrap q:before, -.swagger-section .swagger-ui-wrap q:after, -.swagger-section .swagger-ui-wrap blockquote:before, -.swagger-section .swagger-ui-wrap blockquote:after { - content: none; -} - -.swagger-section .swagger-ui-wrap .heading_with_menu h1, -.swagger-section .swagger-ui-wrap .heading_with_menu h2, -.swagger-section .swagger-ui-wrap .heading_with_menu h3, -.swagger-section .swagger-ui-wrap .heading_with_menu h4, -.swagger-section .swagger-ui-wrap .heading_with_menu h5, -.swagger-section .swagger-ui-wrap .heading_with_menu h6 { - display: block; - clear: none; - float: left; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; - width: 60%; -} - -.swagger-section .swagger-ui-wrap table { - border-collapse: collapse; - border-spacing: 0; -} - -.swagger-section .swagger-ui-wrap table thead tr th { - padding: 5px; - font-size: 0.9em; - color: #666666; - border-bottom: 1px solid #999999; -} - -.swagger-section .swagger-ui-wrap table tbody tr:last-child td { - border-bottom: none; -} - -.swagger-section .swagger-ui-wrap table tbody tr.offset { - background-color: #f0f0f0; -} - -.swagger-section .swagger-ui-wrap table tbody tr td { - padding: 6px; - font-size: 0.9em; - border-bottom: 1px solid #cccccc; - vertical-align: top; - line-height: 1.3em; -} - -.swagger-section .swagger-ui-wrap ol { - margin: 0px 0 10px; - padding: 0 0 0 18px; - list-style-type: decimal; -} - -.swagger-section .swagger-ui-wrap ol li { - padding: 5px 0px; - font-size: 0.9em; - color: #333333; -} - -.swagger-section .swagger-ui-wrap ol, -.swagger-section .swagger-ui-wrap ul { - list-style: none; -} - -.swagger-section .swagger-ui-wrap h1 a, -.swagger-section .swagger-ui-wrap h2 a, -.swagger-section .swagger-ui-wrap h3 a, -.swagger-section .swagger-ui-wrap h4 a, -.swagger-section .swagger-ui-wrap h5 a, -.swagger-section .swagger-ui-wrap h6 a { - text-decoration: none; -} - -.swagger-section .swagger-ui-wrap h1 a:hover, -.swagger-section .swagger-ui-wrap h2 a:hover, -.swagger-section .swagger-ui-wrap h3 a:hover, -.swagger-section .swagger-ui-wrap h4 a:hover, -.swagger-section .swagger-ui-wrap h5 a:hover, -.swagger-section .swagger-ui-wrap h6 a:hover { - text-decoration: underline; -} - -.swagger-section .swagger-ui-wrap h1 span.divider, -.swagger-section .swagger-ui-wrap h2 span.divider, -.swagger-section .swagger-ui-wrap h3 span.divider, -.swagger-section .swagger-ui-wrap h4 span.divider, -.swagger-section .swagger-ui-wrap h5 span.divider, -.swagger-section .swagger-ui-wrap h6 span.divider { - color: #aaaaaa; -} - -.swagger-section .swagger-ui-wrap a { - color: #547f00; -} - -.swagger-section .swagger-ui-wrap a img { - border: none; -} - -.swagger-section .swagger-ui-wrap article, -.swagger-section .swagger-ui-wrap aside, -.swagger-section .swagger-ui-wrap details, -.swagger-section .swagger-ui-wrap figcaption, -.swagger-section .swagger-ui-wrap figure, -.swagger-section .swagger-ui-wrap footer, -.swagger-section .swagger-ui-wrap header, -.swagger-section .swagger-ui-wrap hgroup, -.swagger-section .swagger-ui-wrap menu, -.swagger-section .swagger-ui-wrap nav, -.swagger-section .swagger-ui-wrap section, -.swagger-section .swagger-ui-wrap summary { - display: block; -} - -.swagger-section .swagger-ui-wrap pre { - font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; - background-color: #fcf6db; - border: 1px solid #e5e0c6; - padding: 10px; -} - -.swagger-section .swagger-ui-wrap pre code { - line-height: 1.6em; - background: none; -} - -.swagger-section .swagger-ui-wrap .content > .content-type > div > label { - clear: both; - display: block; - color: #0F6AB4; - font-size: 1.1em; - margin: 0; - padding: 15px 0 5px; -} - -.swagger-section .swagger-ui-wrap .content pre { - font-size: 12px; - margin-top: 5px; - padding: 5px; -} - -.swagger-section .swagger-ui-wrap .icon-btn { - cursor: pointer; -} - -.swagger-section .swagger-ui-wrap .info_title { - padding-bottom: 10px; - font-weight: bold; - font-size: 25px; -} - -.swagger-section .swagger-ui-wrap .footer { - margin-top: 20px; -} - -.swagger-section .swagger-ui-wrap p.big, -.swagger-section .swagger-ui-wrap div.big p { - font-size: 1em; - margin-bottom: 10px; -} - -.swagger-section .swagger-ui-wrap form.fullwidth ol li.string input, -.swagger-section .swagger-ui-wrap form.fullwidth ol li.url input, -.swagger-section .swagger-ui-wrap form.fullwidth ol li.text textarea, -.swagger-section .swagger-ui-wrap form.fullwidth ol li.numeric input { - width: 500px !important; -} - -.swagger-section .swagger-ui-wrap .info_license { - padding-bottom: 5px; -} - -.swagger-section .swagger-ui-wrap .info_tos { - padding-bottom: 5px; -} - -.swagger-section .swagger-ui-wrap .message-fail { - color: #cc0000; -} - -.swagger-section .swagger-ui-wrap .info_url { - padding-bottom: 5px; -} - -.swagger-section .swagger-ui-wrap .info_email { - padding-bottom: 5px; -} - -.swagger-section .swagger-ui-wrap .info_name { - padding-bottom: 5px; -} - -.swagger-section .swagger-ui-wrap .info_description { - padding-bottom: 10px; - font-size: 15px; -} - -.swagger-section .swagger-ui-wrap .markdown ol li, -.swagger-section .swagger-ui-wrap .markdown ul li { - padding: 3px 0px; - line-height: 1.4em; - color: #333333; -} - -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.string input, -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.url input, -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.numeric input { - display: block; - padding: 4px; - width: auto; - clear: both; -} - -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.string input.title, -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.url input.title, -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.numeric input.title { - font-size: 1.3em; -} - -.swagger-section .swagger-ui-wrap table.fullwidth { - width: 100%; -} - -.swagger-section .swagger-ui-wrap .model-signature { - font-family: "Droid Sans", sans-serif; - font-size: 1em; - line-height: 1.5em; -} - -.swagger-section .swagger-ui-wrap .model-signature .signature-nav a { - text-decoration: none; - color: #AAA; -} - -.swagger-section .swagger-ui-wrap .model-signature .signature-nav a:hover { - text-decoration: underline; - color: black; -} - -.swagger-section .swagger-ui-wrap .model-signature .signature-nav .selected { - color: black; - text-decoration: none; -} - -.swagger-section .swagger-ui-wrap .model-signature .propType { - color: #5555aa; -} - -.swagger-section .swagger-ui-wrap .model-signature pre:hover { - background-color: #ffffdd; -} - -.swagger-section .swagger-ui-wrap .model-signature pre { - font-size: .85em; - line-height: 1.2em; - overflow: auto; - max-height: 200px; - cursor: pointer; -} - -.swagger-section .swagger-ui-wrap .model-signature ul.signature-nav { - display: block; - min-width: 230px; - margin: 0; - padding: 0; -} - -.swagger-section .swagger-ui-wrap .model-signature ul.signature-nav li:last-child { - padding-right: 0; - border-right: none; -} - -.swagger-section .swagger-ui-wrap .model-signature ul.signature-nav li { - float: left; - margin: 0 5px 5px 0; - padding: 2px 5px 2px 0; - border-right: 1px solid #ddd; -} - -.swagger-section .swagger-ui-wrap .model-signature .propOpt { - color: #555; -} - -.swagger-section .swagger-ui-wrap .model-signature .snippet small { - font-size: 0.75em; -} - -.swagger-section .swagger-ui-wrap .model-signature .propOptKey { - font-style: italic; -} - -.swagger-section .swagger-ui-wrap .model-signature .description .strong { - font-weight: bold; - color: #000; - font-size: .9em; -} - -.swagger-section .swagger-ui-wrap .model-signature .description div { - font-size: 0.9em; - line-height: 1.5em; - margin-left: 1em; -} - -.swagger-section .swagger-ui-wrap .model-signature .description .stronger { - font-weight: bold; - color: #000; -} - -.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper { - border-spacing: 0; - position: absolute; - background-color: #ffffff; - border: 1px solid #bbbbbb; - display: none; - font-size: 11px; - max-width: 400px; - line-height: 30px; - color: black; - padding: 5px; - margin-left: 10px; -} - -.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper th { - text-align: center; - background-color: #eeeeee; - border: 1px solid #bbbbbb; - font-size: 11px; - color: #666666; - font-weight: bold; - padding: 5px; - line-height: 15px; -} - -.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper .optionName { - font-weight: bold; -} - -.swagger-section .swagger-ui-wrap .model-signature .description .propDesc.markdown > p:first-child, -.swagger-section .swagger-ui-wrap .model-signature .description .propDesc.markdown > p:last-child { - display: inline; -} - -.swagger-section .swagger-ui-wrap .model-signature .description .propDesc.markdown > p:not(:first-child):before { - display: block; - content: ''; -} - -.swagger-section .swagger-ui-wrap .model-signature .description span:last-of-type.propDesc.markdown > p:only-child { - margin-right: -3px; -} - -.swagger-section .swagger-ui-wrap .model-signature .propName { - font-weight: bold; -} - -.swagger-section .swagger-ui-wrap .model-signature .signature-container { - clear: both; -} - -.swagger-section .swagger-ui-wrap .body-textarea { - width: 300px; - height: 100px; - border: 1px solid #aaa; -} - -.swagger-section .swagger-ui-wrap .markdown p code, -.swagger-section .swagger-ui-wrap .markdown li code { - font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; - background-color: #f0f0f0; - color: black; - padding: 1px 3px; -} - -.swagger-section .swagger-ui-wrap .required { - font-weight: bold; -} - -.swagger-section .swagger-ui-wrap .editor_holder { - font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; - font-size: 0.9em; -} - -.swagger-section .swagger-ui-wrap .editor_holder label { - font-weight: normal !important; - /* JSONEditor uses bold by default for all labels, we revert that back to normal to not give the impression that by default fields are required */ -} - -.swagger-section .swagger-ui-wrap .editor_holder label.required { - font-weight: bold !important; -} - -.swagger-section .swagger-ui-wrap input.parameter { - width: 300px; - border: 1px solid #aaa; -} - -.swagger-section .swagger-ui-wrap h1 { - color: black; - font-size: 1.5em; - line-height: 1.3em; - padding: 10px 0 10px 0; - font-family: "Droid Sans", sans-serif; - font-weight: bold; -} - -.swagger-section .swagger-ui-wrap .heading_with_menu { - float: none; - clear: both; - overflow: hidden; - display: block; -} - -.swagger-section .swagger-ui-wrap .heading_with_menu ul { - display: block; - clear: none; - float: right; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; - margin-top: 10px; -} - -.swagger-section .swagger-ui-wrap h2 { - color: black; - font-size: 1.3em; - padding: 10px 0 10px 0; -} - -.swagger-section .swagger-ui-wrap h2 a { - color: black; -} - -.swagger-section .swagger-ui-wrap h2 span.sub { - font-size: 0.7em; - color: #999999; - font-style: italic; -} - -.swagger-section .swagger-ui-wrap h2 span.sub a { - color: #777777; -} - -.swagger-section .swagger-ui-wrap span.weak { - color: #666666; -} - -.swagger-section .swagger-ui-wrap .message-success { - color: #89BF04; -} - -.swagger-section .swagger-ui-wrap caption, -.swagger-section .swagger-ui-wrap th, -.swagger-section .swagger-ui-wrap td { - text-align: left; - font-weight: normal; - vertical-align: middle; -} - -.swagger-section .swagger-ui-wrap .code { - font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; -} - -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.text textarea { - font-family: "Droid Sans", sans-serif; - height: 250px; - padding: 4px; - display: block; - clear: both; -} - -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.select select { - display: block; - clear: both; -} - -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean { - float: none; - clear: both; - overflow: hidden; - display: block; -} - -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean label { - display: block; - float: left; - clear: none; - margin: 0; - padding: 0; -} - -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean input { - display: block; - float: left; - clear: none; - margin: 0 5px 0 0; -} - -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.required label { - color: black; -} - -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li label { - display: block; - clear: both; - width: auto; - padding: 0 0 3px; - color: #666666; -} - -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li label abbr { - padding-left: 3px; - color: #888888; -} - -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li p.inline-hints { - margin-left: 0; - font-style: italic; - font-size: 0.9em; - margin: 0; -} - -.swagger-section .swagger-ui-wrap form.formtastic fieldset.buttons { - margin: 0; - padding: 0; -} - -.swagger-section .swagger-ui-wrap span.blank, -.swagger-section .swagger-ui-wrap span.empty { - color: #888888; - font-style: italic; -} - -.swagger-section .swagger-ui-wrap .markdown h3 { - color: #547f00; -} - -.swagger-section .swagger-ui-wrap .markdown h4 { - color: #666666; -} - -.swagger-section .swagger-ui-wrap .markdown pre { - font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; - background-color: #fcf6db; - border: 1px solid #e5e0c6; - padding: 10px; - margin: 0 0 10px 0; -} - -.swagger-section .swagger-ui-wrap .markdown pre code { - line-height: 1.6em; -} - -.swagger-section .swagger-ui-wrap div.gist { - margin: 20px 0 25px 0 !important; -} - -.swagger-section .swagger-ui-wrap ul#resources { - font-family: "Droid Sans", sans-serif; - font-size: 0.9em; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource { - border-bottom: 1px solid #dddddd; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource:hover div.heading h2 a, -.swagger-section .swagger-ui-wrap ul#resources li.resource.active div.heading h2 a { - color: black; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource:hover div.heading ul.options li a, -.swagger-section .swagger-ui-wrap ul#resources li.resource.active div.heading ul.options li a { - color: #555555; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource:last-child { - border-bottom: none; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading { - border: 1px solid transparent; - float: none; - clear: both; - overflow: hidden; - display: block; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options { - overflow: hidden; - padding: 0; - display: block; - clear: none; - float: right; - margin: 14px 10px 0 0; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li { - float: left; - clear: none; - margin: 0; - padding: 2px 10px; - border-right: 1px solid #dddddd; - color: #666666; - font-size: 0.9em; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a { - color: #aaaaaa; - text-decoration: none; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:hover { - text-decoration: underline; - color: black; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:hover, -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:active, -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a.active { - text-decoration: underline; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li:first-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li.first { - padding-left: 0; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li:last-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li.last { - padding-right: 0; - border-right: none; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options:first-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options.first { - padding-left: 0; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 { - color: #999999; - padding-left: 0; - display: block; - clear: none; - float: left; - font-family: "Droid Sans", sans-serif; - font-weight: bold; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 a { - color: #999999; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 a:hover { - color: black; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation { - float: none; - clear: both; - overflow: hidden; - display: block; - margin: 0 0 10px; - padding: 0; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading { - float: none; - clear: both; - overflow: hidden; - display: block; - margin: 0; - padding: 0; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 { - display: block; - clear: none; - float: left; - width: auto; - margin: 0; - padding: 0; - line-height: 1.1em; - color: black; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path { - padding-left: 10px; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path a { - color: black; - text-decoration: none; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path a.toggleOperation.deprecated { - text-decoration: line-through; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path a:hover { - text-decoration: underline; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.http_method a { - text-transform: uppercase; - text-decoration: none; - color: white; - display: inline-block; - width: 50px; - font-size: 0.7em; - text-align: center; - padding: 7px 0 4px; - -moz-border-radius: 2px; - -webkit-border-radius: 2px; - -o-border-radius: 2px; - -ms-border-radius: 2px; - -khtml-border-radius: 2px; - border-radius: 2px; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span { - margin: 0; - padding: 0; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options { - overflow: hidden; - padding: 0; - display: block; - clear: none; - float: right; - margin: 6px 10px 0 0; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li { - float: left; - clear: none; - margin: 0; - padding: 2px 10px; - font-size: 0.9em; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li a { - text-decoration: none; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li.access { - color: black; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content { - border-top: none; - padding: 10px; - -moz-border-radius-bottomleft: 6px; - -webkit-border-bottom-left-radius: 6px; - -o-border-bottom-left-radius: 6px; - -ms-border-bottom-left-radius: 6px; - -khtml-border-bottom-left-radius: 6px; - border-bottom-left-radius: 6px; - -moz-border-radius-bottomright: 6px; - -webkit-border-bottom-right-radius: 6px; - -o-border-bottom-right-radius: 6px; - -ms-border-bottom-right-radius: 6px; - -khtml-border-bottom-right-radius: 6px; - border-bottom-right-radius: 6px; - margin: 0 0 20px; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content h4 { - font-size: 1.1em; - margin: 0; - padding: 15px 0 5px; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header { - float: none; - clear: both; - overflow: hidden; - display: block; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header a { - padding: 4px 0 0 10px; - display: inline-block; - font-size: 0.9em; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header input.submit { - display: block; - clear: none; - float: left; - padding: 6px 8px; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header span.response_throbber { - background-image: url('../images/throbber.gif'); - width: 128px; - height: 16px; - display: block; - clear: none; - float: right; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content form input[type='text'].error { - outline: 2px solid black; - outline-color: #cc0000; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content form select[name='parameterContentType'] { - max-width: 300px; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.response div.block pre { - font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; - padding: 10px; - font-size: 0.9em; - max-height: 400px; - overflow-y: auto; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading { - background-color: #f9f2e9; - border: 1px solid #f0e0ca; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading h3 span.http_method a { - background-color: #c5862b; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li { - border-right: 1px solid #dddddd; - border-right-color: #f0e0ca; - color: #c5862b; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li a { - color: #c5862b; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content { - background-color: #faf5ee; - border: 1px solid #f0e0ca; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content h4 { - color: #c5862b; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content div.sandbox_header a { - color: #dcb67f; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading { - background-color: #fcffcd; - border: 1px solid black; - border-color: #ffd20f; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading h3 span.http_method a { - text-transform: uppercase; - background-color: #ffd20f; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li { - border-right: 1px solid #dddddd; - border-right-color: #ffd20f; - color: #ffd20f; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li a { - color: #ffd20f; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content { - background-color: #fcffcd; - border: 1px solid black; - border-color: #ffd20f; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content h4 { - color: #ffd20f; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content div.sandbox_header a { - color: #6fc992; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading { - background-color: #f5e8e8; - border: 1px solid #e8c6c7; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading h3 span.http_method a { - text-transform: uppercase; - background-color: #a41e22; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li { - border-right: 1px solid #dddddd; - border-right-color: #e8c6c7; - color: #a41e22; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li a { - color: #a41e22; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content { - background-color: #f7eded; - border: 1px solid #e8c6c7; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content h4 { - color: #a41e22; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content div.sandbox_header a { - color: #c8787a; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading { - background-color: #e7f6ec; - border: 1px solid #c3e8d1; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading h3 span.http_method a { - background-color: #10a54a; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li { - border-right: 1px solid #dddddd; - border-right-color: #c3e8d1; - color: #10a54a; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li a { - color: #10a54a; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content { - background-color: #ebf7f0; - border: 1px solid #c3e8d1; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content h4 { - color: #10a54a; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content div.sandbox_header a { - color: #6fc992; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading { - background-color: #FCE9E3; - border: 1px solid #F5D5C3; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading h3 span.http_method a { - background-color: #D38042; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li { - border-right: 1px solid #dddddd; - border-right-color: #f0cecb; - color: #D38042; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li a { - color: #D38042; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content { - background-color: #faf0ef; - border: 1px solid #f0cecb; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content h4 { - color: #D38042; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content div.sandbox_header a { - color: #dcb67f; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading { - background-color: #e7f0f7; - border: 1px solid #c3d9ec; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading h3 span.http_method a { - background-color: #0f6ab4; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li { - border-right: 1px solid #dddddd; - border-right-color: #c3d9ec; - color: #0f6ab4; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li a { - color: #0f6ab4; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content { - background-color: #ebf3f9; - border: 1px solid #c3d9ec; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content h4 { - color: #0f6ab4; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content div.sandbox_header a { - color: #6fa5d2; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading { - background-color: #e7f0f7; - border: 1px solid #c3d9ec; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading h3 span.http_method a { - background-color: #0f6ab4; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading ul.options li { - border-right: 1px solid #dddddd; - border-right-color: #c3d9ec; - color: #0f6ab4; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading ul.options li a { - color: #0f6ab4; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.content { - background-color: #ebf3f9; - border: 1px solid #c3d9ec; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.content h4 { - color: #0f6ab4; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.content div.sandbox_header a { - color: #6fa5d2; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content { - border-top: none; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li:last-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li:last-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li:last-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li:last-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li:last-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li:last-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li.last, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li.last, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li.last, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li.last, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li.last, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li.last { - padding-right: 0; - border-right: none; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a:hover, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a:active, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a.active { - text-decoration: underline; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li:first-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li.first { - padding-left: 0; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations:first-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations.first { - padding-left: 0; -} - -.swagger-section .swagger-ui-wrap p#colophon { - margin: 0 15px 40px 15px; - padding: 10px 0; - font-size: 0.8em; - border-top: 1px solid #dddddd; - font-family: "Droid Sans", sans-serif; - color: #999999; - font-style: italic; -} - -.swagger-section .swagger-ui-wrap p#colophon a { - text-decoration: none; - color: #547f00; -} - -.swagger-section .swagger-ui-wrap h3 { - color: black; - font-size: 1.1em; - padding: 10px 0 10px 0; -} - -.swagger-section .swagger-ui-wrap .markdown ol, -.swagger-section .swagger-ui-wrap .markdown ul { - font-family: "Droid Sans", sans-serif; - margin: 5px 0 10px; - padding: 0 0 0 18px; - list-style-type: disc; -} - -.swagger-section .swagger-ui-wrap form.form_box { - background-color: #ebf3f9; - border: 1px solid #c3d9ec; - padding: 10px; -} - -.swagger-section .swagger-ui-wrap form.form_box label { - color: #0f6ab4 !important; -} - -.swagger-section .swagger-ui-wrap form.form_box input[type=submit] { - display: block; - padding: 10px; -} - -.swagger-section .swagger-ui-wrap form.form_box p.weak { - font-size: 0.8em; -} - -.swagger-section .swagger-ui-wrap form.form_box p { - font-size: 0.9em; - padding: 0 0 15px; - color: #7e7b6d; -} - -.swagger-section .swagger-ui-wrap form.form_box p a { - color: #646257; -} - -.swagger-section .swagger-ui-wrap form.form_box p strong { - color: black; -} - -.swagger-section .swagger-ui-wrap .operation-status td.markdown > p:last-child { - padding-bottom: 0; -} - -.swagger-section .title { - font-style: bold; -} - -.swagger-section .secondary_form { - display: none; -} - -.swagger-section .main_image { - display: block; - margin-left: auto; - margin-right: auto; -} - -.swagger-section .oauth_body { - margin-left: 100px; - margin-right: 100px; -} - -.swagger-section .oauth_submit { - text-align: center; -} - -.swagger-section .api-popup-dialog { - z-index: 10000; - position: absolute; - width: 500px; - background: #FFF; - padding: 20px; - border: 1px solid #ccc; - border-radius: 5px; - display: none; - font-size: 13px; - color: #777; -} - -.swagger-section .api-popup-dialog .api-popup-title { - font-size: 24px; - padding: 10px 0; -} - -.swagger-section .api-popup-dialog .api-popup-title { - font-size: 24px; - padding: 10px 0; -} - -.swagger-section .api-popup-dialog .error-msg { - padding-left: 5px; - padding-bottom: 5px; -} - -.swagger-section .api-popup-dialog .api-popup-authbtn { - height: 30px; -} - -.swagger-section .api-popup-dialog .api-popup-cancel { - height: 30px; -} - -.swagger-section .api-popup-scopes { - padding: 10px 20px; -} - -.swagger-section .api-popup-scopes li { - padding: 5px 0; - line-height: 20px; -} - -.swagger-section .api-popup-scopes li input { - position: relative; - top: 2px; -} - -.swagger-section .api-popup-scopes .api-scope-desc { - padding-left: 20px; - font-style: italic; -} - -.swagger-section .api-popup-actions { - padding-top: 10px; -} - -.swagger-section .access { - float: right; -} - -.swagger-section .auth { - float: right; -} - -.swagger-section .api-ic { - height: 18px; - vertical-align: middle; - display: inline-block; - background: url(../images/explorer_icons.png) no-repeat; -} - -.swagger-section .api-ic .api_information_panel { - position: relative; - margin-top: 20px; - margin-left: -5px; - background: #FFF; - border: 1px solid #ccc; - border-radius: 5px; - display: none; - font-size: 13px; - max-width: 300px; - line-height: 30px; - color: black; - padding: 5px; -} - -.swagger-section .api-ic .api_information_panel p .api-msg-enabled { - color: green; -} - -.swagger-section .api-ic .api_information_panel p .api-msg-disabled { - color: red; -} - -.swagger-section .api-ic:hover .api_information_panel { - position: absolute; - display: block; -} - -.swagger-section .ic-info { - background-position: 0 0; - width: 18px; - margin-top: -6px; - margin-left: 4px; -} - -.swagger-section .ic-warning { - background-position: -60px 0; - width: 18px; - margin-top: -6px; - margin-left: 4px; -} - -.swagger-section .ic-error { - background-position: -30px 0; - width: 18px; - margin-top: -6px; - margin-left: 4px; -} - -.swagger-section .ic-off { - background-position: -90px 0; - width: 58px; - margin-top: -4px; - cursor: pointer; -} - -.swagger-section .ic-on { - background-position: -160px 0; - width: 58px; - margin-top: -4px; - cursor: pointer; -} - -.swagger-section #header { - background-color: #89bf04; - padding: 14px; -} - -.swagger-section #input_baseUrl { - width: 400px; -} - -.swagger-section #api_selector { - display: block; - clear: none; - float: right; -} - -.swagger-section #api_selector .input { - display: block; - clear: none; - float: left; - margin: 0 10px 0 0; -} - -.swagger-section #api_selector input { - font-size: 0.9em; - padding: 3px; - margin: 0; -} - -.swagger-section #input_apiKey { - width: 200px; -} - -.swagger-section #explore { - display: block; - text-decoration: none; - font-weight: bold; - padding: 6px 8px; - font-size: 0.9em; - color: white; - background-color: #547f00; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - -o-border-radius: 4px; - -ms-border-radius: 4px; - -khtml-border-radius: 4px; - border-radius: 4px; -} - -.swagger-section #explore:hover { - background-color: #547f00; -} - -.swagger-section #header #logo { - font-size: 1.5em; - font-weight: bold; - text-decoration: none; - background: transparent url(../images/logo_small.png) no-repeat left center; - padding: 20px 0 20px 40px; - color: white; -} - -.swagger-section #content_message { - margin: 10px 15px; - font-style: italic; - color: #999999; -} - -.swagger-section #message-bar { - min-height: 30px; - text-align: center; - padding-top: 10px; -} - -.swagger-section .swagger-collapse:before { - content: "-"; -} - -.swagger-section .swagger-expand:before { - content: "+"; -} diff --git a/src/main/resources/static/swagger/css/style.css b/src/main/resources/static/swagger/css/style.css deleted file mode 100644 index 1a044ab9..00000000 --- a/src/main/resources/static/swagger/css/style.css +++ /dev/null @@ -1,301 +0,0 @@ -.swagger-section #header a#logo { - font-size: 1.5em; - font-weight: bold; - text-decoration: none; - background: transparent url(../images/logo.png) no-repeat left center; - padding: 20px 0 20px 40px; -} - -#text-head { - font-size: 80px; - font-family: 'Roboto', sans-serif; - color: #ffffff; - float: right; - margin-right: 20%; -} - -.navbar-fixed-top .navbar-nav { - height: auto; -} - -.navbar-fixed-top .navbar-brand { - height: auto; -} - -.navbar-header { - height: auto; -} - -.navbar-inverse { - background-color: #000; - border-color: #000; -} - -#navbar-brand { - margin-left: 20%; -} - -.navtext { - font-size: 10px; -} - -.h1, -h1 { - font-size: 60px; -} - -.navbar-default .navbar-header .navbar-brand { - color: #a2dfee; -} - -/* tag titles */ -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 a { - color: #393939; - font-family: 'Arvo', serif; - font-size: 1.5em; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 a:hover { - color: black; -} - -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 { - color: #525252; - padding-left: 0px; - display: block; - clear: none; - float: left; - font-family: 'Arvo', serif; - font-weight: bold; -} - -.navbar-default .navbar-collapse, -.navbar-default .navbar-form { - border-color: #0A0A0A; -} - -.container1 { - width: 1500px; - margin: auto; - margin-top: 0; - background-image: url('../images/shield.png'); - background-repeat: no-repeat; - background-position: -40px -20px; - margin-bottom: 210px; -} - -.container-inner { - width: 1200px; - margin: auto; - background-color: rgba(223, 227, 228, 0.75); - padding-bottom: 40px; - padding-top: 40px; - border-radius: 15px; -} - -.header-content { - padding: 0; - width: 1000px; -} - -.title1 { - font-size: 80px; - font-family: 'Vollkorn', serif; - color: #404040; - text-align: center; - padding-top: 40px; - padding-bottom: 100px; -} - -#icon { - margin-top: -18px; -} - -.subtext { - font-size: 25px; - font-style: italic; - color: #08b; - text-align: right; - padding-right: 250px; -} - -.bg-primary { - background-color: #00468b; -} - -.navbar-default .nav > li > a, -.navbar-default .nav > li > a:focus { - color: #08b; -} - -.navbar-default .nav > li > a, -.navbar-default .nav > li > a:hover { - color: #08b; -} - -.navbar-default .nav > li > a, -.navbar-default .nav > li > a:focus:hover { - color: #08b; -} - -.text-faded { - font-size: 25px; - font-family: 'Vollkorn', serif; -} - -.section-heading { - font-family: 'Vollkorn', serif; - font-size: 45px; - padding-bottom: 10px; -} - -hr { - border-color: #00468b; - padding-bottom: 10px; -} - -.description { - margin-top: 20px; - padding-bottom: 200px; -} - -.description li { - font-family: 'Vollkorn', serif; - font-size: 25px; - color: #525252; - margin-left: 28%; - padding-top: 5px; -} - -.gap { - margin-top: 200px; -} - -.troubleshootingtext { - color: rgba(255, 255, 255, 0.7); - padding-left: 30%; -} - -.troubleshootingtext li { - list-style-type: circle; - font-size: 25px; - padding-bottom: 5px; -} - -.overlay { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - z-index: 1000; -} - -.block.response_body.json:hover { - cursor: pointer; -} - -.backdrop { - color: blue; -} - -#myModal { - height: 100%; -} - -.modal-backdrop { - bottom: 0; - position: fixed; -} - -.curl { - padding: 10px; - font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; - font-size: 0.9em; - max-height: 400px; - margin-top: 5px; - overflow-y: auto; - background-color: #fcf6db; - border: 1px solid #e5e0c6; - border-radius: 4px; -} - -.curl_title { - font-size: 1.1em; - margin: 0; - padding: 15px 0 5px; - font-family: 'Open Sans', 'Helvetica Neue', Arial, sans-serif; - font-weight: 500; - line-height: 1.1; -} - -.footer { - display: none; -} - -.swagger-section .swagger-ui-wrap h2 { - padding: 0; -} - -h2 { - margin: 0; - margin-bottom: 5px; -} - -.markdown p { - font-size: 15px; - font-family: 'Arvo', serif; -} - -.swagger-section .swagger-ui-wrap .code { - font-size: 15px; - font-family: 'Arvo', serif; -} - -.swagger-section .swagger-ui-wrap b { - font-family: 'Arvo', serif; -} - -#signin:hover { - cursor: pointer; -} - -.dropdown-menu { - padding: 15px; -} - -.navbar-right .dropdown-menu { - left: 0; - right: auto; -} - -#signinbutton { - width: 100%; - height: 32px; - font-size: 13px; - font-weight: bold; - color: #08b; -} - -.navbar-default .nav > li .details { - color: #000000; - text-transform: none; - font-size: 15px; - font-weight: normal; - font-family: 'Open Sans', sans-serif; - font-style: italic; - line-height: 20px; - top: -2px; -} - -.navbar-default .nav > li .details:hover { - color: black; -} - -#signout { - width: 100%; - height: 32px; - font-size: 13px; - font-weight: bold; - color: #08b; -} diff --git a/src/main/resources/static/swagger/css/typography.css b/src/main/resources/static/swagger/css/typography.css deleted file mode 100644 index c7339b86..00000000 --- a/src/main/resources/static/swagger/css/typography.css +++ /dev/null @@ -1,15 +0,0 @@ -/* Google Font's Droid Sans */ -@font-face { - font-family: 'Droid Sans'; - font-style: normal; - font-weight: 400; - src: local('Droid Sans'), local('DroidSans'), url('../fonts/DroidSans.ttf') format('truetype'); -} - -/* Google Font's Droid Sans Bold */ -@font-face { - font-family: 'Droid Sans'; - font-style: normal; - font-weight: 700; - src: local('Droid Sans Bold'), local('DroidSans-Bold'), url('../fonts/DroidSans-Bold.ttf') format('truetype'); -} diff --git a/src/main/resources/static/swagger/fonts/DroidSans-Bold.ttf b/src/main/resources/static/swagger/fonts/DroidSans-Bold.ttf deleted file mode 100644 index 036c4d135bf954ef3c2b15bc6493f72a01909aee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42480 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 diff --git a/src/main/resources/static/swagger/fonts/DroidSans.ttf b/src/main/resources/static/swagger/fonts/DroidSans.ttf deleted file mode 100644 index e517a0c5b9dfcdde4c4dee7569fa191b40f208bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41028 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 V%-PYbojQLtAN=*7zd~Ud`%m*7fg1n- diff --git a/src/main/resources/static/swagger/images/collapse.gif b/src/main/resources/static/swagger/images/collapse.gif deleted file mode 100644 index 8843e8ce5a46781defd33d5304a0cb4191e72546..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69 zcmZ?wbhEHbwd`J-OQ1PRqNMh0sDWgikt diff --git a/src/main/resources/static/swagger/images/expand.gif b/src/main/resources/static/swagger/images/expand.gif deleted file mode 100644 index 477bf13718dc56928f313ef6eeb1c2b1a47db69a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73 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 diff --git a/src/main/resources/static/swagger/images/favicon-32x32.png b/src/main/resources/static/swagger/images/favicon-32x32.png deleted file mode 100755 index 32f319f89bd07e691de2ccaf21632bb9793a9cd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1654 zcmV-+28sEJP)Z zYjBlU6^5U+_c^%{LI@BBNTw~6nu{hdI!rrEwGFgm#aci_3sGk}<7m?sf9eb^ z&gef46cL=-R%Vz2t>aV&tTwa+k{T7cTawZs4M`*flAN4x@8yqkX_Av0()aswzFB*( z_g(v2XYI9wX~KJNyap8@D?yj3`UN7k2td_e5i#!rt)NGYgj$R-e!9LVh4Vp9;GzxA zMK7v)oerFfUJTsuv(5*(Q~8(4BX%1_Ls=xV0tMmqzMUI4PvXOov* zN@+ngMR`jQiMjRax>fZ#BX;*hCo--8?_I7}_iH1eH6lVJdXsn0?&9dFMn390GigKx zvpz#@c|A3YzfF2L8&$=tJ7mOs!x(#QN&()xLa+W!YeGv@mDYd1!hz-=a(&=GlM;_b zPG%vitA9$x!Y2?Bybn%_m{rEu%M%KSMehG%O=wBrhS}Hj9gdybeM`h+QN3s*YnL|? zvgvUVc7-t}c@jwh@o&E0n$ViS4YT|3W1Q?bbX(*J+;!)d`PKvb6Cw_Y*hdmMVUhyW zZ8T!ns4DxK>OV1ZfPY>3J+HpK1yx1F)_HZC5;g(w-sLEI-iR$|x$s+l^XGNR&0(9# z+U1ShGrx|W{)=pX?Y>FLo_?g2xjCQaWXJ2g+O&meFp#vZ`{G`z$~NHDbpvJAgsz!b z^uFGREr>*Ka-jL?Q4VX$H&eA}1J?(yaQ5=yDWg5td6>SNom7^sV|jV~DBHp21|rcL z7_oCzwI0BD?~T9~fOpTln3C=D^Q!>ZbNFi<93yT#96a8@?!#XNptPWRl&yd8BaWWl z34kD5y!Xa<4JwQYEl^dOPB*4F%u0_Hvw`81zwm@e6sU}FPKxd5=|)r)V{EC{pvuH* zJ6!Jl2VH$<$8i_SQ&l%@0nSHJRgly=clG*tI(ymx5M-qRT?Ww6)jY1Vth8L5k8)$E zd)fkqhWl`Sm>KDF#NbSZjd4f1W4iLB@ygIB2Q(Evj zKI~~rAs@*lV&6Bw-ypSUBrp)UhBaZbGx8@q#<9o<&%&CtWIY&*`2|&ppREQs0#KB< zgo0U%##!zYYNsv0+Hfp4R8wsEISVP7vn=s?#2B$H-n(`Yp>|B|1{jR=0g#zCWqX%I zR@!U;hN9O~Y_;X}i3a5ZBlfs4#&|`42~e~6Npdm^M{Vf1dK`d_D_^Fr>iH?jAFkZS zH}BsU+uL<~lx=2a0X5~D0Z?>@F~%DJ5oz@5yVJwjtghZZYSYovJ2-LvC30t!u()K^ zlmg02Rxx|VJX$Zjl5)4yRc$9DJQJ_JTg3bVMs!5ZMK_7qUje-Q*G)8^+cPEEt)Q}O zJ?p-(7XYvB$&d~2f)O2&h~4AW9TE}NE^p+nc@KSJTfS+;@4SL}@UgYJ}w)Q)V=$7{=rRQ;RAgzi>VS}wfAf#wGK z2d~@`@yyISSY5T9%ChzGtaqnG%mc=liQDoKB63yzUJ+Xt8%%ES&Y7Jwo!-IKzH^fj z=jW7BTfT+b^39}&XT}GU;0+^o{j>&?k41Rn)ol`yZ6ims&fdS%-gS)L{`TapmX$u6 zyqTqx=2ufZ=iU*cneSC~&lw5r`oD)&=Y!n94L=*WXvefB)7Ws@5xC*4w>6xOb0Q(H zL4_bI75%KLUtq)*#v*lBL~MLK=dE~!3#Q}ufBOd*=m{K;N&o-=07*qoM6N<$g6kDD A00000 diff --git a/src/main/resources/static/swagger/images/favicon.ico b/src/main/resources/static/swagger/images/favicon.ico deleted file mode 100755 index 8b60bcf06a7685b9ea53983c125e7058906fbcbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5430 zcmcgwYiv|S6douFYJ&9 zoHH|LSE(UtsLIS#7_-&1VM>ivN@Zu;-zA{00&N^|8r`@w~u}3a1X>=27;pf_a{DPJMTR$JSvjrVZRL?J~Ga>i0GO0Y%B;(7M$}2m+kcrz@>Hae2Pk^@b^f8%H zL>`N;qJuC@Oe+t~7I z<(F|AfU$#EfN{kFKA+53u@A<+4YnEIf**{2=CuCE#{h4Wo9v-X#BN#D=ro%g~u zG`=OQBiQEDZgc6n2RYf*+oRWbKVZW9eJJuGNa8A-F{8(f+y@)q2tylad}QmVTBh{m zkpvl@O*Y<9#KzvA;3if`|g4qjlr75YyFqbGlV2Q--{B?*ERj@$;+A#v6A5% zKJZ-k(ti_bGM?eOj#f{ZHOKc6lK8&sk-j?4Kdjr4z{}bU>r#UnlQAQ!`bOZB;Ct>?+|WpbgrOY2zPu-B!V?-m447=gVK(*?-RQObKSO{281uhZ-RJZ_ax0d9HE}&gAII8uJO7-x&ULT3$-hG# zr#*GDR$v46R``GL&)??M=Z|+Z8{*GeE`I+!{6E}3tWV7S1MCU*9ccYQdsa7AC-|$l z32U8*#-^_c?O%nK{oI ze@n2sr7p*=%uQX9Dk-qo-r2V)7}P0ZWaab6B%)NcuSZfL*ZERjG4kd;J~ udLgV-)@7w`Z&hkIdqAlS_J#Nx!E}|RnRSkVm|Sa24|P&EF^Huxf&C8$As%)B diff --git a/src/main/resources/static/swagger/images/logo_small.png b/src/main/resources/static/swagger/images/logo_small.png deleted file mode 100644 index 5496a65579ae903d4008f9d268fac422ef9d3679..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 770 zcmV+d1O5DoP)K11rQipnJ)eVnTSzHNF zN8ab&RhE5cC$$4FI-PZXx$pga@8yN)KS}L2Us~^y$(x-xioWbnFcV+~b9ig=!ft8Q z0RD+rpA8910Smyc0GviVUOPGiY6YM@-r6Nn8S&~cxHl27$l)-R$1(!Xx045RDy;_& zeXkG{;_#i9rz0B6149#Ddj=KM6MV^rTD%ylzGdCBX<^=^@I0X3SCR7OMbn}sUKdeF zKO-flaJa%@kJ27@Rod?J9=+Qx5|=PtG8n> zy~9rIu}+48M}FW5Bbqw3t#po?c?kmG!FX32W(dOjzTb+U@64MzHItoeB!M0Jcd}|E z>ekW`<~FjR_ZVVJkF|_htH&v!({Oad?xax?0K0sLwBY%nr46DpCmIIaa?@|Y&?n0q z@kJlMy`pE2HtEgASNd~xNzt$Kn7w#^Fy5oi`e$bUE*+f>Vk5z7=-2pj68afrqli$_ zvqe##5V?a)QU_-s9+s?mJYT5m`MQDRH4cYs^L1lCW;Dua5Ln9lG0BC@9DJQHA(}y&Z}$apb{kU zbezR}b^|O%6i+$BFsT3zqAe8wg9`vfiRp#{)z2bsJw`vBQL7Bt!IexM3$Hsf0tHK3 z+R=x{lR$K`s;7__?ASPW=3?*xgCpGaiadSEpoi0pw-_V#OXM8Ap{4qlG08x0ig9IY z3Ijqh(t1_=g#jocuqyJO=729e9OSiNDSrhR0Gc5G)(QGH?*IS*07*qoM6N<$f<~fU A82|tP diff --git a/src/main/resources/static/swagger/images/pet_store_api.png b/src/main/resources/static/swagger/images/pet_store_api.png deleted file mode 100644 index f9f9cd4aeb35a108c4b2f1dddb59977d56c595d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 824 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 z 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 - - - - Swagger UI - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- -
 
-
- - diff --git a/src/main/resources/static/swagger/lang/en.js b/src/main/resources/static/swagger/lang/en.js deleted file mode 100644 index 677ded21..00000000 --- a/src/main/resources/static/swagger/lang/en.js +++ /dev/null @@ -1,56 +0,0 @@ -'use strict'; - -/* jshint quotmark: double */ -window.SwaggerTranslator.learn({ - "Warning: Deprecated": "Warning: Deprecated", - "Implementation Notes": "Implementation Notes", - "Response Class": "Response Class", - "Status": "Status", - "Parameters": "Parameters", - "Parameter": "Parameter", - "Value": "Value", - "Description": "Description", - "Parameter Type": "Parameter Type", - "Data Type": "Data Type", - "Response Messages": "Response Messages", - "HTTP Status Code": "HTTP Status Code", - "Reason": "Reason", - "Response Model": "Response Model", - "Request URL": "Request URL", - "Response Body": "Response Body", - "Response Code": "Response Code", - "Response Headers": "Response Headers", - "Hide Response": "Hide Response", - "Headers": "Headers", - "Try it out!": "Try it out!", - "Show/Hide": "Show/Hide", - "List Operations": "List Operations", - "Expand Operations": "Expand Operations", - "Raw": "Raw", - "can't parse JSON. Raw result": "can't parse JSON. Raw result", - "Example Value": "Example Value", - "Model Schema": "Model Schema", - "Model": "Model", - "Click to set as parameter value": "Click to set as parameter value", - "apply": "apply", - "Username": "Username", - "Password": "Password", - "Terms of service": "Terms of service", - "Created by": "Created by", - "See more at": "See more at", - "Contact the developer": "Contact the developer", - "api version": "api version", - "Response Content Type": "Response Content Type", - "Parameter content type:": "Parameter content type:", - "fetching resource": "fetching resource", - "fetching resource list": "fetching resource list", - "Explore": "Explore", - "Show Swagger Petstore Example Apis": "Show Swagger Petstore Example Apis", - "Can't read from server. It may not have the appropriate access-control-origin settings.": "Can't read from server. It may not have the appropriate access-control-origin settings.", - "Please specify the protocol for": "Please specify the protocol for", - "Can't read swagger JSON from": "Can't read swagger JSON from", - "Finished Loading Resource Information. Rendering Swagger UI": "Finished Loading Resource Information. Rendering Swagger UI", - "Unable to read api": "Unable to read api", - "from path": "from path", - "server returned": "server returned" -}); diff --git a/src/main/resources/static/swagger/lang/es.js b/src/main/resources/static/swagger/lang/es.js deleted file mode 100644 index 89112c9d..00000000 --- a/src/main/resources/static/swagger/lang/es.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; - -/* jshint quotmark: double */ -window.SwaggerTranslator.learn({ - "Warning: Deprecated": "Advertencia: Obsoleto", - "Implementation Notes": "Notas de implementación", - "Response Class": "Clase de la Respuesta", - "Status": "Status", - "Parameters": "Parámetros", - "Parameter": "Parámetro", - "Value": "Valor", - "Description": "Descripción", - "Parameter Type": "Tipo del Parámetro", - "Data Type": "Tipo del Dato", - "Response Messages": "Mensajes de la Respuesta", - "HTTP Status Code": "Código de Status HTTP", - "Reason": "Razón", - "Response Model": "Modelo de la Respuesta", - "Request URL": "URL de la Solicitud", - "Response Body": "Cuerpo de la Respuesta", - "Response Code": "Código de la Respuesta", - "Response Headers": "Encabezados de la Respuesta", - "Hide Response": "Ocultar Respuesta", - "Try it out!": "Pruébalo!", - "Show/Hide": "Mostrar/Ocultar", - "List Operations": "Listar Operaciones", - "Expand Operations": "Expandir Operaciones", - "Raw": "Crudo", - "can't parse JSON. Raw result": "no puede parsear el JSON. Resultado crudo", - "Example Value": "Valor de Ejemplo", - "Model Schema": "Esquema del Modelo", - "Model": "Modelo", - "apply": "aplicar", - "Username": "Nombre de usuario", - "Password": "Contraseña", - "Terms of service": "Términos de Servicio", - "Created by": "Creado por", - "See more at": "Ver más en", - "Contact the developer": "Contactar al desarrollador", - "api version": "versión de la api", - "Response Content Type": "Tipo de Contenido (Content Type) de la Respuesta", - "fetching resource": "buscando recurso", - "fetching resource list": "buscando lista del recurso", - "Explore": "Explorar", - "Show Swagger Petstore Example Apis": "Mostrar Api Ejemplo de Swagger Petstore", - "Can't read from server. It may not have the appropriate access-control-origin settings.": "No se puede leer del servidor. Tal vez no tiene la configuración de control de acceso de origen (access-control-origin) apropiado.", - "Please specify the protocol for": "Por favor, especificar el protocola para", - "Can't read swagger JSON from": "No se puede leer el JSON de swagger desde", - "Finished Loading Resource Information. Rendering Swagger UI": "Finalizada la carga del recurso de Información. Mostrando Swagger UI", - "Unable to read api": "No se puede leer la api", - "from path": "desde ruta", - "server returned": "el servidor retornó" -}); diff --git a/src/main/resources/static/swagger/lang/fr.js b/src/main/resources/static/swagger/lang/fr.js deleted file mode 100644 index 8366857c..00000000 --- a/src/main/resources/static/swagger/lang/fr.js +++ /dev/null @@ -1,54 +0,0 @@ -'use strict'; - -/* jshint quotmark: double */ -window.SwaggerTranslator.learn({ - "Warning: Deprecated": "Avertissement : Obsolète", - "Implementation Notes": "Notes d'implémentation", - "Response Class": "Classe de la réponse", - "Status": "Statut", - "Parameters": "Paramètres", - "Parameter": "Paramètre", - "Value": "Valeur", - "Description": "Description", - "Parameter Type": "Type du paramètre", - "Data Type": "Type de données", - "Response Messages": "Messages de la réponse", - "HTTP Status Code": "Code de statut HTTP", - "Reason": "Raison", - "Response Model": "Modèle de réponse", - "Request URL": "URL appelée", - "Response Body": "Corps de la réponse", - "Response Code": "Code de la réponse", - "Response Headers": "En-têtes de la réponse", - "Hide Response": "Cacher la réponse", - "Headers": "En-têtes", - "Try it out!": "Testez !", - "Show/Hide": "Afficher/Masquer", - "List Operations": "Liste des opérations", - "Expand Operations": "Développer les opérations", - "Raw": "Brut", - "can't parse JSON. Raw result": "impossible de décoder le JSON. Résultat brut", - "Example Value": "Exemple la valeur", - "Model Schema": "Définition du modèle", - "Model": "Modèle", - "apply": "appliquer", - "Username": "Nom d'utilisateur", - "Password": "Mot de passe", - "Terms of service": "Conditions de service", - "Created by": "Créé par", - "See more at": "Voir plus sur", - "Contact the developer": "Contacter le développeur", - "api version": "version de l'api", - "Response Content Type": "Content Type de la réponse", - "fetching resource": "récupération de la ressource", - "fetching resource list": "récupération de la liste de ressources", - "Explore": "Explorer", - "Show Swagger Petstore Example Apis": "Montrer les Apis de l'exemple Petstore de Swagger", - "Can't read from server. It may not have the appropriate access-control-origin settings.": "Impossible de lire à partir du serveur. Il se peut que les réglages access-control-origin ne soient pas appropriés.", - "Please specify the protocol for": "Veuillez spécifier un protocole pour", - "Can't read swagger JSON from": "Impossible de lire le JSON swagger à partir de", - "Finished Loading Resource Information. Rendering Swagger UI": "Chargement des informations terminé. Affichage de Swagger UI", - "Unable to read api": "Impossible de lire l'api", - "from path": "à partir du chemin", - "server returned": "réponse du serveur" -}); diff --git a/src/main/resources/static/swagger/lang/geo.js b/src/main/resources/static/swagger/lang/geo.js deleted file mode 100644 index 0586c3ff..00000000 --- a/src/main/resources/static/swagger/lang/geo.js +++ /dev/null @@ -1,56 +0,0 @@ -'use strict'; - -/* jshint quotmark: double */ -window.SwaggerTranslator.learn({ - "Warning: Deprecated": "ყურადღება: აღარ გამოიყენება", - "Implementation Notes": "იმპლემენტაციის აღწერა", - "Response Class": "რესპონს კლასი", - "Status": "სტატუსი", - "Parameters": "პარამეტრები", - "Parameter": "პარამეტრი", - "Value": "მნიშვნელობა", - "Description": "აღწერა", - "Parameter Type": "პარამეტრის ტიპი", - "Data Type": "მონაცემის ტიპი", - "Response Messages": "პასუხი", - "HTTP Status Code": "HTTP სტატუსი", - "Reason": "მიზეზი", - "Response Model": "რესპონს მოდელი", - "Request URL": "მოთხოვნის URL", - "Response Body": "პასუხის სხეული", - "Response Code": "პასუხის კოდი", - "Response Headers": "პასუხის ჰედერები", - "Hide Response": "დამალე პასუხი", - "Headers": "ჰედერები", - "Try it out!": "ცადე !", - "Show/Hide": "გამოჩენა/დამალვა", - "List Operations": "ოპერაციების სია", - "Expand Operations": "ოპერაციები ვრცლად", - "Raw": "ნედლი", - "can't parse JSON. Raw result": "JSON-ის დამუშავება ვერ მოხერხდა. ნედლი პასუხი", - "Example Value": "მაგალითი", - "Model Schema": "მოდელის სტრუქტურა", - "Model": "მოდელი", - "Click to set as parameter value": "პარამეტრისთვის მნიშვნელობის მისანიჭებლად, დააკლიკე", - "apply": "გამოყენება", - "Username": "მოხმარებელი", - "Password": "პაროლი", - "Terms of service": "მომსახურების პირობები", - "Created by": "შექმნა", - "See more at": "ნახე ვრცლად", - "Contact the developer": "დაუკავშირდი დეველოპერს", - "api version": "api ვერსია", - "Response Content Type": "პასუხის კონტენტის ტიპი", - "Parameter content type:": "პარამეტრის კონტენტის ტიპი:", - "fetching resource": "რესურსების მიღება", - "fetching resource list": "რესურსების სიის მიღება", - "Explore": "ნახვა", - "Show Swagger Petstore Example Apis": "ნახე Swagger Petstore სამაგალითო Api", - "Can't read from server. It may not have the appropriate access-control-origin settings.": "სერვერთან დაკავშირება ვერ ხერხდება. შეამოწმეთ access-control-origin.", - "Please specify the protocol for": "მიუთითეთ პროტოკოლი", - "Can't read swagger JSON from": "swagger JSON წაკითხვა ვერ მოხერხდა", - "Finished Loading Resource Information. Rendering Swagger UI": "რესურსების ჩატვირთვა სრულდება. Swagger UI რენდერდება", - "Unable to read api": "api წაკითხვა ვერ მოხერხდა", - "from path": "მისამართიდან", - "server returned": "სერვერმა დააბრუნა" -}); diff --git a/src/main/resources/static/swagger/lang/it.js b/src/main/resources/static/swagger/lang/it.js deleted file mode 100644 index 5300a867..00000000 --- a/src/main/resources/static/swagger/lang/it.js +++ /dev/null @@ -1,52 +0,0 @@ -'use strict'; - -/* jshint quotmark: double */ -window.SwaggerTranslator.learn({ - "Warning: Deprecated": "Attenzione: Deprecato", - "Implementation Notes": "Note di implementazione", - "Response Class": "Classe della risposta", - "Status": "Stato", - "Parameters": "Parametri", - "Parameter": "Parametro", - "Value": "Valore", - "Description": "Descrizione", - "Parameter Type": "Tipo di parametro", - "Data Type": "Tipo di dato", - "Response Messages": "Messaggi della risposta", - "HTTP Status Code": "Codice stato HTTP", - "Reason": "Motivo", - "Response Model": "Modello di risposta", - "Request URL": "URL della richiesta", - "Response Body": "Corpo della risposta", - "Response Code": "Oggetto della risposta", - "Response Headers": "Intestazioni della risposta", - "Hide Response": "Nascondi risposta", - "Try it out!": "Provalo!", - "Show/Hide": "Mostra/Nascondi", - "List Operations": "Mostra operazioni", - "Expand Operations": "Espandi operazioni", - "Raw": "Grezzo (raw)", - "can't parse JSON. Raw result": "non è possibile parsare il JSON. Risultato grezzo (raw).", - "Model Schema": "Schema del modello", - "Model": "Modello", - "apply": "applica", - "Username": "Nome utente", - "Password": "Password", - "Terms of service": "Condizioni del servizio", - "Created by": "Creato da", - "See more at": "Informazioni aggiuntive:", - "Contact the developer": "Contatta lo sviluppatore", - "api version": "versione api", - "Response Content Type": "Tipo di contenuto (content type) della risposta", - "fetching resource": "recuperando la risorsa", - "fetching resource list": "recuperando lista risorse", - "Explore": "Esplora", - "Show Swagger Petstore Example Apis": "Mostra le api di esempio di Swagger Petstore", - "Can't read from server. It may not have the appropriate access-control-origin settings.": "Non è possibile leggere dal server. Potrebbe non avere le impostazioni di controllo accesso origine (access-control-origin) appropriate.", - "Please specify the protocol for": "Si prega di specificare il protocollo per", - "Can't read swagger JSON from": "Impossibile leggere JSON swagger da:", - "Finished Loading Resource Information. Rendering Swagger UI": "Lettura informazioni risorse termianta. Swagger UI viene mostrata", - "Unable to read api": "Impossibile leggere la api", - "from path": "da cartella", - "server returned": "il server ha restituito" -}); diff --git a/src/main/resources/static/swagger/lang/ja.js b/src/main/resources/static/swagger/lang/ja.js deleted file mode 100755 index 364c2859..00000000 --- a/src/main/resources/static/swagger/lang/ja.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; - -/* jshint quotmark: double */ -window.SwaggerTranslator.learn({ - "Warning: Deprecated": "警告: 廃止予定", - "Implementation Notes": "実装メモ", - "Response Class": "レスポンスクラス", - "Status": "ステータス", - "Parameters": "パラメータ群", - "Parameter": "パラメータ", - "Value": "値", - "Description": "説明", - "Parameter Type": "パラメータタイプ", - "Data Type": "データタイプ", - "Response Messages": "レスポンスメッセージ", - "HTTP Status Code": "HTTPステータスコード", - "Reason": "理由", - "Response Model": "レスポンスモデル", - "Request URL": "リクエストURL", - "Response Body": "レスポンスボディ", - "Response Code": "レスポンスコード", - "Response Headers": "レスポンスヘッダ", - "Hide Response": "レスポンスを隠す", - "Headers": "ヘッダ", - "Try it out!": "実際に実行!", - "Show/Hide": "表示/非表示", - "List Operations": "操作一覧", - "Expand Operations": "操作の展開", - "Raw": "Raw", - "can't parse JSON. Raw result": "JSONへ解釈できません. 未加工の結果", - "Model Schema": "モデルスキーマ", - "Model": "モデル", - "apply": "実行", - "Username": "ユーザ名", - "Password": "パスワード", - "Terms of service": "サービス利用規約", - "Created by": "Created by", - "See more at": "See more at", - "Contact the developer": "開発者に連絡", - "api version": "APIバージョン", - "Response Content Type": "レスポンス コンテンツタイプ", - "fetching resource": "リソースの取得", - "fetching resource list": "リソース一覧の取得", - "Explore": "Explore", - "Show Swagger Petstore Example Apis": "SwaggerペットストアAPIの表示", - "Can't read from server. It may not have the appropriate access-control-origin settings.": "サーバから読み込めません. 適切なaccess-control-origin設定を持っていない可能性があります.", - "Please specify the protocol for": "プロトコルを指定してください", - "Can't read swagger JSON from": "次からswagger JSONを読み込めません", - "Finished Loading Resource Information. Rendering Swagger UI": "リソース情報の読み込みが完了しました. Swagger UIを描画しています", - "Unable to read api": "APIを読み込めません", - "from path": "次のパスから", - "server returned": "サーバからの返答" -}); diff --git a/src/main/resources/static/swagger/lang/pl.js b/src/main/resources/static/swagger/lang/pl.js deleted file mode 100644 index 9efe96de..00000000 --- a/src/main/resources/static/swagger/lang/pl.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; - -/* jshint quotmark: double */ -window.SwaggerTranslator.learn({ - "Warning: Deprecated": "Uwaga: Wycofane", - "Implementation Notes": "Uwagi Implementacji", - "Response Class": "Klasa Odpowiedzi", - "Status": "Status", - "Parameters": "Parametry", - "Parameter": "Parametr", - "Value": "Wartość", - "Description": "Opis", - "Parameter Type": "Typ Parametru", - "Data Type": "Typ Danych", - "Response Messages": "Wiadomości Odpowiedzi", - "HTTP Status Code": "Kod Statusu HTTP", - "Reason": "Przyczyna", - "Response Model": "Model Odpowiedzi", - "Request URL": "URL Wywołania", - "Response Body": "Treść Odpowiedzi", - "Response Code": "Kod Odpowiedzi", - "Response Headers": "Nagłówki Odpowiedzi", - "Hide Response": "Ukryj Odpowiedź", - "Headers": "Nagłówki", - "Try it out!": "Wypróbuj!", - "Show/Hide": "Pokaż/Ukryj", - "List Operations": "Lista Operacji", - "Expand Operations": "Rozwiń Operacje", - "Raw": "Nieprzetworzone", - "can't parse JSON. Raw result": "nie można przetworzyć pliku JSON. Nieprzetworzone dane", - "Model Schema": "Schemat Modelu", - "Model": "Model", - "apply": "użyj", - "Username": "Nazwa użytkownika", - "Password": "Hasło", - "Terms of service": "Warunki używania", - "Created by": "Utworzone przez", - "See more at": "Zobacz więcej na", - "Contact the developer": "Kontakt z deweloperem", - "api version": "wersja api", - "Response Content Type": "Typ Zasobu Odpowiedzi", - "fetching resource": "ładowanie zasobu", - "fetching resource list": "ładowanie listy zasobów", - "Explore": "Eksploruj", - "Show Swagger Petstore Example Apis": "Pokaż Przykładowe Api Swagger Petstore", - "Can't read from server. It may not have the appropriate access-control-origin settings.": "Brak połączenia z serwerem. Może on nie mieć odpowiednich ustawień access-control-origin.", - "Please specify the protocol for": "Proszę podać protokół dla", - "Can't read swagger JSON from": "Nie można odczytać swagger JSON z", - "Finished Loading Resource Information. Rendering Swagger UI": "Ukończono Ładowanie Informacji o Zasobie. Renderowanie Swagger UI", - "Unable to read api": "Nie można odczytać api", - "from path": "ze ścieżki", - "server returned": "serwer zwrócił" -}); diff --git a/src/main/resources/static/swagger/lang/pt.js b/src/main/resources/static/swagger/lang/pt.js deleted file mode 100644 index 2f2c6338..00000000 --- a/src/main/resources/static/swagger/lang/pt.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; - -/* jshint quotmark: double */ -window.SwaggerTranslator.learn({ - "Warning: Deprecated": "Aviso: Depreciado", - "Implementation Notes": "Notas de Implementação", - "Response Class": "Classe de resposta", - "Status": "Status", - "Parameters": "Parâmetros", - "Parameter": "Parâmetro", - "Value": "Valor", - "Description": "Descrição", - "Parameter Type": "Tipo de parâmetro", - "Data Type": "Tipo de dados", - "Response Messages": "Mensagens de resposta", - "HTTP Status Code": "Código de status HTTP", - "Reason": "Razão", - "Response Model": "Modelo resposta", - "Request URL": "URL requisição", - "Response Body": "Corpo da resposta", - "Response Code": "Código da resposta", - "Response Headers": "Cabeçalho da resposta", - "Headers": "Cabeçalhos", - "Hide Response": "Esconder resposta", - "Try it out!": "Tente agora!", - "Show/Hide": "Mostrar/Esconder", - "List Operations": "Listar operações", - "Expand Operations": "Expandir operações", - "Raw": "Cru", - "can't parse JSON. Raw result": "Falha ao analisar JSON. Resulto cru", - "Model Schema": "Modelo esquema", - "Model": "Modelo", - "apply": "Aplicar", - "Username": "Usuário", - "Password": "Senha", - "Terms of service": "Termos do serviço", - "Created by": "Criado por", - "See more at": "Veja mais em", - "Contact the developer": "Contate o desenvolvedor", - "api version": "Versão api", - "Response Content Type": "Tipo de conteúdo da resposta", - "fetching resource": "busca recurso", - "fetching resource list": "buscando lista de recursos", - "Explore": "Explorar", - "Show Swagger Petstore Example Apis": "Show Swagger Petstore Example Apis", - "Can't read from server. It may not have the appropriate access-control-origin settings.": "Não é possível ler do servidor. Pode não ter as apropriadas configurações access-control-origin", - "Please specify the protocol for": "Por favor especifique o protocolo", - "Can't read swagger JSON from": "Não é possível ler o JSON Swagger de", - "Finished Loading Resource Information. Rendering Swagger UI": "Carregar informação de recurso finalizada. Renderizando Swagger UI", - "Unable to read api": "Não foi possível ler api", - "from path": "do caminho", - "server returned": "servidor retornou" -}); diff --git a/src/main/resources/static/swagger/lang/ru.js b/src/main/resources/static/swagger/lang/ru.js deleted file mode 100644 index 83bbf00e..00000000 --- a/src/main/resources/static/swagger/lang/ru.js +++ /dev/null @@ -1,56 +0,0 @@ -'use strict'; - -/* jshint quotmark: double */ -window.SwaggerTranslator.learn({ - "Warning: Deprecated": "Предупреждение: Устарело", - "Implementation Notes": "Заметки", - "Response Class": "Пример ответа", - "Status": "Статус", - "Parameters": "Параметры", - "Parameter": "Параметр", - "Value": "Значение", - "Description": "Описание", - "Parameter Type": "Тип параметра", - "Data Type": "Тип данных", - "HTTP Status Code": "HTTP код", - "Reason": "Причина", - "Response Model": "Структура ответа", - "Request URL": "URL запроса", - "Response Body": "Тело ответа", - "Response Code": "HTTP код ответа", - "Response Headers": "Заголовки ответа", - "Hide Response": "Спрятать ответ", - "Headers": "Заголовки", - "Response Messages": "Что может прийти в ответ", - "Try it out!": "Попробовать!", - "Show/Hide": "Показать/Скрыть", - "List Operations": "Операции кратко", - "Expand Operations": "Операции подробно", - "Raw": "В сыром виде", - "can't parse JSON. Raw result": "Не удается распарсить ответ:", - "Example Value": "Пример", - "Model Schema": "Структура", - "Model": "Описание", - "Click to set as parameter value": "Нажмите, чтобы испльзовать в качестве значения параметра", - "apply": "применить", - "Username": "Имя пользователя", - "Password": "Пароль", - "Terms of service": "Условия использования", - "Created by": "Разработано", - "See more at": "Еще тут", - "Contact the developer": "Связаться с разработчиком", - "api version": "Версия API", - "Response Content Type": "Content Type ответа", - "Parameter content type:": "Content Type параметра:", - "fetching resource": "Получение ресурса", - "fetching resource list": "Получение ресурсов", - "Explore": "Показать", - "Show Swagger Petstore Example Apis": "Показать примеры АПИ", - "Can't read from server. It may not have the appropriate access-control-origin settings.": "Не удается получить ответ от сервера. Возможно, проблема с настройками доступа", - "Please specify the protocol for": "Пожалуйста, укажите протокол для", - "Can't read swagger JSON from": "Не получается прочитать swagger json из", - "Finished Loading Resource Information. Rendering Swagger UI": "Загрузка информации о ресурсах завершена. Рендерим", - "Unable to read api": "Не удалось прочитать api", - "from path": "по адресу", - "server returned": "сервер сказал" -}); diff --git a/src/main/resources/static/swagger/lang/tr.js b/src/main/resources/static/swagger/lang/tr.js deleted file mode 100644 index e8ec9dec..00000000 --- a/src/main/resources/static/swagger/lang/tr.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; - -/* jshint quotmark: double */ -window.SwaggerTranslator.learn({ - "Warning: Deprecated": "Uyarı: Deprecated", - "Implementation Notes": "Gerçekleştirim Notları", - "Response Class": "Dönen Sınıf", - "Status": "Statü", - "Parameters": "Parametreler", - "Parameter": "Parametre", - "Value": "Değer", - "Description": "Açıklama", - "Parameter Type": "Parametre Tipi", - "Data Type": "Veri Tipi", - "Response Messages": "Dönüş Mesajı", - "HTTP Status Code": "HTTP Statü Kodu", - "Reason": "Gerekçe", - "Response Model": "Dönüş Modeli", - "Request URL": "İstek URL", - "Response Body": "Dönüş İçeriği", - "Response Code": "Dönüş Kodu", - "Response Headers": "Dönüş Üst Bilgileri", - "Hide Response": "Dönüşü Gizle", - "Headers": "Üst Bilgiler", - "Try it out!": "Dene!", - "Show/Hide": "Göster/Gizle", - "List Operations": "Operasyonları Listele", - "Expand Operations": "Operasyonları Aç", - "Raw": "Ham", - "can't parse JSON. Raw result": "JSON çözümlenemiyor. Ham sonuç", - "Model Schema": "Model Şema", - "Model": "Model", - "apply": "uygula", - "Username": "Kullanıcı Adı", - "Password": "Parola", - "Terms of service": "Servis şartları", - "Created by": "Oluşturan", - "See more at": "Daha fazlası için", - "Contact the developer": "Geliştirici ile İletişime Geçin", - "api version": "api versiyon", - "Response Content Type": "Dönüş İçerik Tipi", - "fetching resource": "kaynak getiriliyor", - "fetching resource list": "kaynak listesi getiriliyor", - "Explore": "Keşfet", - "Show Swagger Petstore Example Apis": "Swagger Petstore Örnek Api'yi Gör", - "Can't read from server. It may not have the appropriate access-control-origin settings.": "Sunucudan okuma yapılamıyor. Sunucu access-control-origin ayarlarınızı kontrol edin.", - "Please specify the protocol for": "Lütfen istenen adres için protokol belirtiniz", - "Can't read swagger JSON from": "Swagger JSON bu kaynaktan okunamıyor", - "Finished Loading Resource Information. Rendering Swagger UI": "Kaynak baglantısı tamamlandı. Swagger UI gösterime hazırlanıyor", - "Unable to read api": "api okunamadı", - "from path": "yoldan", - "server returned": "sunucuya dönüldü" -}); diff --git a/src/main/resources/static/swagger/lang/translator.js b/src/main/resources/static/swagger/lang/translator.js deleted file mode 100644 index cae3f12a..00000000 --- a/src/main/resources/static/swagger/lang/translator.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict'; - -/** - * Translator for documentation pages. - * - * To enable translation you should include one of language-files in your index.html - * after . - * For example - - * - * If you wish to translate some new texsts you should do two things: - * 1. Add a new phrase pair ("New Phrase": "New Translation") into your language file (for example lang/ru.js). It will be great if you add it in other language files too. - * 2. Mark that text it templates this way New Phrase or . - * The main thing here is attribute data-sw-translate. Only inner html, title-attribute and value-attribute are going to translate. - * - */ -window.SwaggerTranslator = { - - _words: [], - - translate: function (sel) { - var $this = this; - sel = sel || '[data-sw-translate]'; - - $(sel).each(function () { - $(this).html($this._tryTranslate($(this).html())); - - $(this).val($this._tryTranslate($(this).val())); - $(this).attr('title', $this._tryTranslate($(this).attr('title'))); - }); - }, - - _tryTranslate: function (word) { - return this._words[$.trim(word)] !== undefined ? this._words[$.trim(word)] : word; - }, - - learn: function (wordsMap) { - this._words = wordsMap; - } -}; diff --git a/src/main/resources/static/swagger/lang/zh-cn.js b/src/main/resources/static/swagger/lang/zh-cn.js deleted file mode 100644 index 530be030..00000000 --- a/src/main/resources/static/swagger/lang/zh-cn.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; - -/* jshint quotmark: double */ -window.SwaggerTranslator.learn({ - "Warning: Deprecated": "警告:已过时", - "Implementation Notes": "实现备注", - "Response Class": "响应类", - "Status": "状态", - "Parameters": "参数", - "Parameter": "参数", - "Value": "值", - "Description": "描述", - "Parameter Type": "参数类型", - "Data Type": "数据类型", - "Response Messages": "响应消息", - "HTTP Status Code": "HTTP状态码", - "Reason": "原因", - "Response Model": "响应模型", - "Request URL": "请求URL", - "Response Body": "响应体", - "Response Code": "响应码", - "Response Headers": "响应头", - "Hide Response": "隐藏响应", - "Headers": "头", - "Try it out!": "试一下!", - "Show/Hide": "显示/隐藏", - "List Operations": "显示操作", - "Expand Operations": "展开操作", - "Raw": "原始", - "can't parse JSON. Raw result": "无法解析JSON. 原始结果", - "Model Schema": "模型架构", - "Model": "模型", - "apply": "应用", - "Username": "用户名", - "Password": "密码", - "Terms of service": "服务条款", - "Created by": "创建者", - "See more at": "查看更多:", - "Contact the developer": "联系开发者", - "api version": "api版本", - "Response Content Type": "响应Content Type", - "fetching resource": "正在获取资源", - "fetching resource list": "正在获取资源列表", - "Explore": "浏览", - "Show Swagger Petstore Example Apis": "显示 Swagger Petstore 示例 Apis", - "Can't read from server. It may not have the appropriate access-control-origin settings.": "无法从服务器读取。可能没有正确设置access-control-origin。", - "Please specify the protocol for": "请指定协议:", - "Can't read swagger JSON from": "无法读取swagger JSON于", - "Finished Loading Resource Information. Rendering Swagger UI": "已加载资源信息。正在渲染Swagger UI", - "Unable to read api": "无法读取api", - "from path": "从路径", - "server returned": "服务器返回" -}); diff --git a/src/main/resources/static/swagger/lib/backbone-min.js b/src/main/resources/static/swagger/lib/backbone-min.js deleted file mode 100644 index 982be04f..00000000 --- a/src/main/resources/static/swagger/lib/backbone-min.js +++ /dev/null @@ -1,888 +0,0 @@ -// Backbone.js 1.1.2 - -(function (t, e) { - if (typeof define === "function" && define.amd) { - define(["underscore", "jquery", "exports"], function (i, r, s) { - t.Backbone = e(t, s, i, r) - }) - } else if (typeof exports !== "undefined") { - var i = require("underscore"); - e(t, exports, i) - } else { - t.Backbone = e(t, {}, t._, t.jQuery || t.Zepto || t.ender || t.$) - } -})(this, function (t, e, i, r) { - var s = t.Backbone; - var n = []; - var a = n.push; - var o = n.slice; - var h = n.splice; - e.VERSION = "1.1.2"; - e.$ = r; - e.noConflict = function () { - t.Backbone = s; - return this - }; - e.emulateHTTP = false; - e.emulateJSON = false; - var u = e.Events = { - on: function (t, e, i) { - if (!c(this, "on", t, [e, i]) || !e)return this; - this._events || (this._events = {}); - var r = this._events[t] || (this._events[t] = []); - r.push({callback: e, context: i, ctx: i || this}); - return this - }, once: function (t, e, r) { - if (!c(this, "once", t, [e, r]) || !e)return this; - var s = this; - var n = i.once(function () { - s.off(t, n); - e.apply(this, arguments) - }); - n._callback = e; - return this.on(t, n, r) - }, off: function (t, e, r) { - var s, n, a, o, h, u, l, f; - if (!this._events || !c(this, "off", t, [e, r]))return this; - if (!t && !e && !r) { - this._events = void 0; - return this - } - o = t ? [t] : i.keys(this._events); - for (h = 0, u = o.length; h < u; h++) { - t = o[h]; - if (a = this._events[t]) { - this._events[t] = s = []; - if (e || r) { - for (l = 0, f = a.length; l < f; l++) { - n = a[l]; - if (e && e !== n.callback && e !== n.callback._callback || r && r !== n.context) { - s.push(n) - } - } - } - if (!s.length)delete this._events[t] - } - } - return this - }, trigger: function (t) { - if (!this._events)return this; - var e = o.call(arguments, 1); - if (!c(this, "trigger", t, e))return this; - var i = this._events[t]; - var r = this._events.all; - if (i)f(i, e); - if (r)f(r, arguments); - return this - }, stopListening: function (t, e, r) { - var s = this._listeningTo; - if (!s)return this; - var n = !e && !r; - if (!r && typeof e === "object")r = this; - if (t)(s = {})[t._listenId] = t; - for (var a in s) { - t = s[a]; - t.off(e, r, this); - if (n || i.isEmpty(t._events))delete this._listeningTo[a] - } - return this - } - }; - var l = /\s+/; - var c = function (t, e, i, r) { - if (!i)return true; - if (typeof i === "object") { - for (var s in i) { - t[e].apply(t, [s, i[s]].concat(r)) - } - return false - } - if (l.test(i)) { - var n = i.split(l); - for (var a = 0, o = n.length; a < o; a++) { - t[e].apply(t, [n[a]].concat(r)) - } - return false - } - return true - }; - var f = function (t, e) { - var i, r = -1, s = t.length, n = e[0], a = e[1], o = e[2]; - switch (e.length) { - case 0: - while (++r < s)(i = t[r]).callback.call(i.ctx); - return; - case 1: - while (++r < s)(i = t[r]).callback.call(i.ctx, n); - return; - case 2: - while (++r < s)(i = t[r]).callback.call(i.ctx, n, a); - return; - case 3: - while (++r < s)(i = t[r]).callback.call(i.ctx, n, a, o); - return; - default: - while (++r < s)(i = t[r]).callback.apply(i.ctx, e); - return - } - }; - var d = {listenTo: "on", listenToOnce: "once"}; - i.each(d, function (t, e) { - u[e] = function (e, r, s) { - var n = this._listeningTo || (this._listeningTo = {}); - var a = e._listenId || (e._listenId = i.uniqueId("l")); - n[a] = e; - if (!s && typeof r === "object")s = this; - e[t](r, s, this); - return this - } - }); - u.bind = u.on; - u.unbind = u.off; - i.extend(e, u); - var p = e.Model = function (t, e) { - var r = t || {}; - e || (e = {}); - this.cid = i.uniqueId("c"); - this.attributes = {}; - if (e.collection)this.collection = e.collection; - if (e.parse)r = this.parse(r, e) || {}; - r = i.defaults({}, r, i.result(this, "defaults")); - this.set(r, e); - this.changed = {}; - this.initialize.apply(this, arguments) - }; - i.extend(p.prototype, u, { - changed: null, validationError: null, idAttribute: "id", initialize: function () { - }, toJSON: function (t) { - return i.clone(this.attributes) - }, sync: function () { - return e.sync.apply(this, arguments) - }, get: function (t) { - return this.attributes[t] - }, escape: function (t) { - return i.escape(this.get(t)) - }, has: function (t) { - return this.get(t) != null - }, set: function (t, e, r) { - var s, n, a, o, h, u, l, c; - if (t == null)return this; - if (typeof t === "object") { - n = t; - r = e - } else { - (n = {})[t] = e - } - r || (r = {}); - if (!this._validate(n, r))return false; - a = r.unset; - h = r.silent; - o = []; - u = this._changing; - this._changing = true; - if (!u) { - this._previousAttributes = i.clone(this.attributes); - this.changed = {} - } - c = this.attributes, l = this._previousAttributes; - if (this.idAttribute in n)this.id = n[this.idAttribute]; - for (s in n) { - e = n[s]; - if (!i.isEqual(c[s], e))o.push(s); - if (!i.isEqual(l[s], e)) { - this.changed[s] = e - } else { - delete this.changed[s] - } - a ? delete c[s] : c[s] = e - } - if (!h) { - if (o.length)this._pending = r; - for (var f = 0, d = o.length; f < d; f++) { - this.trigger("change:" + o[f], this, c[o[f]], r) - } - } - if (u)return this; - if (!h) { - while (this._pending) { - r = this._pending; - this._pending = false; - this.trigger("change", this, r) - } - } - this._pending = false; - this._changing = false; - return this - }, unset: function (t, e) { - return this.set(t, void 0, i.extend({}, e, {unset: true})) - }, clear: function (t) { - var e = {}; - for (var r in this.attributes)e[r] = void 0; - return this.set(e, i.extend({}, t, {unset: true})) - }, hasChanged: function (t) { - if (t == null)return !i.isEmpty(this.changed); - return i.has(this.changed, t) - }, changedAttributes: function (t) { - if (!t)return this.hasChanged() ? i.clone(this.changed) : false; - var e, r = false; - var s = this._changing ? this._previousAttributes : this.attributes; - for (var n in t) { - if (i.isEqual(s[n], e = t[n]))continue; - (r || (r = {}))[n] = e - } - return r - }, previous: function (t) { - if (t == null || !this._previousAttributes)return null; - return this._previousAttributes[t] - }, previousAttributes: function () { - return i.clone(this._previousAttributes) - }, fetch: function (t) { - t = t ? i.clone(t) : {}; - if (t.parse === void 0)t.parse = true; - var e = this; - var r = t.success; - t.success = function (i) { - if (!e.set(e.parse(i, t), t))return false; - if (r)r(e, i, t); - e.trigger("sync", e, i, t) - }; - q(this, t); - return this.sync("read", this, t) - }, save: function (t, e, r) { - var s, n, a, o = this.attributes; - if (t == null || typeof t === "object") { - s = t; - r = e - } else { - (s = {})[t] = e - } - r = i.extend({validate: true}, r); - if (s && !r.wait) { - if (!this.set(s, r))return false - } else { - if (!this._validate(s, r))return false - } - if (s && r.wait) { - this.attributes = i.extend({}, o, s) - } - if (r.parse === void 0)r.parse = true; - var h = this; - var u = r.success; - r.success = function (t) { - h.attributes = o; - var e = h.parse(t, r); - if (r.wait)e = i.extend(s || {}, e); - if (i.isObject(e) && !h.set(e, r)) { - return false - } - if (u)u(h, t, r); - h.trigger("sync", h, t, r) - }; - q(this, r); - n = this.isNew() ? "create" : r.patch ? "patch" : "update"; - if (n === "patch")r.attrs = s; - a = this.sync(n, this, r); - if (s && r.wait)this.attributes = o; - return a - }, destroy: function (t) { - t = t ? i.clone(t) : {}; - var e = this; - var r = t.success; - var s = function () { - e.trigger("destroy", e, e.collection, t) - }; - t.success = function (i) { - if (t.wait || e.isNew())s(); - if (r)r(e, i, t); - if (!e.isNew())e.trigger("sync", e, i, t) - }; - if (this.isNew()) { - t.success(); - return false - } - q(this, t); - var n = this.sync("delete", this, t); - if (!t.wait)s(); - return n - }, url: function () { - var t = i.result(this, "urlRoot") || i.result(this.collection, "url") || M(); - if (this.isNew())return t; - return t.replace(/([^\/])$/, "$1/") + encodeURIComponent(this.id) - }, parse: function (t, e) { - return t - }, clone: function () { - return new this.constructor(this.attributes) - }, isNew: function () { - return !this.has(this.idAttribute) - }, isValid: function (t) { - return this._validate({}, i.extend(t || {}, {validate: true})) - }, _validate: function (t, e) { - if (!e.validate || !this.validate)return true; - t = i.extend({}, this.attributes, t); - var r = this.validationError = this.validate(t, e) || null; - if (!r)return true; - this.trigger("invalid", this, r, i.extend(e, {validationError: r})); - return false - } - }); - var v = ["keys", "values", "pairs", "invert", "pick", "omit"]; - i.each(v, function (t) { - p.prototype[t] = function () { - var e = o.call(arguments); - e.unshift(this.attributes); - return i[t].apply(i, e) - } - }); - var g = e.Collection = function (t, e) { - e || (e = {}); - if (e.model)this.model = e.model; - if (e.comparator !== void 0)this.comparator = e.comparator; - this._reset(); - this.initialize.apply(this, arguments); - if (t)this.reset(t, i.extend({silent: true}, e)) - }; - var m = {add: true, remove: true, merge: true}; - var y = {add: true, remove: false}; - i.extend(g.prototype, u, { - model: p, initialize: function () { - }, toJSON: function (t) { - return this.map(function (e) { - return e.toJSON(t) - }) - }, sync: function () { - return e.sync.apply(this, arguments) - }, add: function (t, e) { - return this.set(t, i.extend({merge: false}, e, y)) - }, remove: function (t, e) { - var r = !i.isArray(t); - t = r ? [t] : i.clone(t); - e || (e = {}); - var s, n, a, o; - for (s = 0, n = t.length; s < n; s++) { - o = t[s] = this.get(t[s]); - if (!o)continue; - delete this._byId[o.id]; - delete this._byId[o.cid]; - a = this.indexOf(o); - this.models.splice(a, 1); - this.length--; - if (!e.silent) { - e.index = a; - o.trigger("remove", o, this, e) - } - this._removeReference(o, e) - } - return r ? t[0] : t - }, set: function (t, e) { - e = i.defaults({}, e, m); - if (e.parse)t = this.parse(t, e); - var r = !i.isArray(t); - t = r ? t ? [t] : [] : i.clone(t); - var s, n, a, o, h, u, l; - var c = e.at; - var f = this.model; - var d = this.comparator && c == null && e.sort !== false; - var v = i.isString(this.comparator) ? this.comparator : null; - var g = [], y = [], _ = {}; - var b = e.add, w = e.merge, x = e.remove; - var E = !d && b && x ? [] : false; - for (s = 0, n = t.length; s < n; s++) { - h = t[s] || {}; - if (h instanceof p) { - a = o = h - } else { - a = h[f.prototype.idAttribute || "id"] - } - if (u = this.get(a)) { - if (x)_[u.cid] = true; - if (w) { - h = h === o ? o.attributes : h; - if (e.parse)h = u.parse(h, e); - u.set(h, e); - if (d && !l && u.hasChanged(v))l = true - } - t[s] = u - } else if (b) { - o = t[s] = this._prepareModel(h, e); - if (!o)continue; - g.push(o); - this._addReference(o, e) - } - o = u || o; - if (E && (o.isNew() || !_[o.id]))E.push(o); - _[o.id] = true - } - if (x) { - for (s = 0, n = this.length; s < n; ++s) { - if (!_[(o = this.models[s]).cid])y.push(o) - } - if (y.length)this.remove(y, e) - } - if (g.length || E && E.length) { - if (d)l = true; - this.length += g.length; - if (c != null) { - for (s = 0, n = g.length; s < n; s++) { - this.models.splice(c + s, 0, g[s]) - } - } else { - if (E)this.models.length = 0; - var k = E || g; - for (s = 0, n = k.length; s < n; s++) { - this.models.push(k[s]) - } - } - } - if (l)this.sort({silent: true}); - if (!e.silent) { - for (s = 0, n = g.length; s < n; s++) { - (o = g[s]).trigger("add", o, this, e) - } - if (l || E && E.length)this.trigger("sort", this, e) - } - return r ? t[0] : t - }, reset: function (t, e) { - e || (e = {}); - for (var r = 0, s = this.models.length; r < s; r++) { - this._removeReference(this.models[r], e) - } - e.previousModels = this.models; - this._reset(); - t = this.add(t, i.extend({silent: true}, e)); - if (!e.silent)this.trigger("reset", this, e); - return t - }, push: function (t, e) { - return this.add(t, i.extend({at: this.length}, e)) - }, pop: function (t) { - var e = this.at(this.length - 1); - this.remove(e, t); - return e - }, unshift: function (t, e) { - return this.add(t, i.extend({at: 0}, e)) - }, shift: function (t) { - var e = this.at(0); - this.remove(e, t); - return e - }, slice: function () { - return o.apply(this.models, arguments) - }, get: function (t) { - if (t == null)return void 0; - return this._byId[t] || this._byId[t.id] || this._byId[t.cid] - }, at: function (t) { - return this.models[t] - }, where: function (t, e) { - if (i.isEmpty(t))return e ? void 0 : []; - return this[e ? "find" : "filter"](function (e) { - for (var i in t) { - if (t[i] !== e.get(i))return false - } - return true - }) - }, findWhere: function (t) { - return this.where(t, true) - }, sort: function (t) { - if (!this.comparator)throw new Error("Cannot sort a set without a comparator"); - t || (t = {}); - if (i.isString(this.comparator) || this.comparator.length === 1) { - this.models = this.sortBy(this.comparator, this) - } else { - this.models.sort(i.bind(this.comparator, this)) - } - if (!t.silent)this.trigger("sort", this, t); - return this - }, pluck: function (t) { - return i.invoke(this.models, "get", t) - }, fetch: function (t) { - t = t ? i.clone(t) : {}; - if (t.parse === void 0)t.parse = true; - var e = t.success; - var r = this; - t.success = function (i) { - var s = t.reset ? "reset" : "set"; - r[s](i, t); - if (e)e(r, i, t); - r.trigger("sync", r, i, t) - }; - q(this, t); - return this.sync("read", this, t) - }, create: function (t, e) { - e = e ? i.clone(e) : {}; - if (!(t = this._prepareModel(t, e)))return false; - if (!e.wait)this.add(t, e); - var r = this; - var s = e.success; - e.success = function (t, i) { - if (e.wait)r.add(t, e); - if (s)s(t, i, e) - }; - t.save(null, e); - return t - }, parse: function (t, e) { - return t - }, clone: function () { - return new this.constructor(this.models) - }, _reset: function () { - this.length = 0; - this.models = []; - this._byId = {} - }, _prepareModel: function (t, e) { - if (t instanceof p)return t; - e = e ? i.clone(e) : {}; - e.collection = this; - var r = new this.model(t, e); - if (!r.validationError)return r; - this.trigger("invalid", this, r.validationError, e); - return false - }, _addReference: function (t, e) { - this._byId[t.cid] = t; - if (t.id != null)this._byId[t.id] = t; - if (!t.collection)t.collection = this; - t.on("all", this._onModelEvent, this) - }, _removeReference: function (t, e) { - if (this === t.collection)delete t.collection; - t.off("all", this._onModelEvent, this) - }, _onModelEvent: function (t, e, i, r) { - if ((t === "add" || t === "remove") && i !== this)return; - if (t === "destroy")this.remove(e, r); - if (e && t === "change:" + e.idAttribute) { - delete this._byId[e.previous(e.idAttribute)]; - if (e.id != null)this._byId[e.id] = e - } - this.trigger.apply(this, arguments) - } - }); - var _ = ["forEach", "each", "map", "collect", "reduce", "foldl", "inject", "reduceRight", "foldr", "find", "detect", "filter", "select", "reject", "every", "all", "some", "any", "include", "contains", "invoke", "max", "min", "toArray", "size", "first", "head", "take", "initial", "rest", "tail", "drop", "last", "without", "difference", "indexOf", "shuffle", "lastIndexOf", "isEmpty", "chain", "sample"]; - i.each(_, function (t) { - g.prototype[t] = function () { - var e = o.call(arguments); - e.unshift(this.models); - return i[t].apply(i, e) - } - }); - var b = ["groupBy", "countBy", "sortBy", "indexBy"]; - i.each(b, function (t) { - g.prototype[t] = function (e, r) { - var s = i.isFunction(e) ? e : function (t) { - return t.get(e) - }; - return i[t](this.models, s, r) - } - }); - var w = e.View = function (t) { - this.cid = i.uniqueId("view"); - t || (t = {}); - i.extend(this, i.pick(t, E)); - this._ensureElement(); - this.initialize.apply(this, arguments); - this.delegateEvents() - }; - var x = /^(\S+)\s*(.*)$/; - var E = ["model", "collection", "el", "id", "attributes", "className", "tagName", "events"]; - i.extend(w.prototype, u, { - tagName: "div", $: function (t) { - return this.$el.find(t) - }, initialize: function () { - }, render: function () { - return this - }, remove: function () { - this.$el.remove(); - this.stopListening(); - return this - }, setElement: function (t, i) { - if (this.$el)this.undelegateEvents(); - this.$el = t instanceof e.$ ? t : e.$(t); - this.el = this.$el[0]; - if (i !== false)this.delegateEvents(); - return this - }, delegateEvents: function (t) { - if (!(t || (t = i.result(this, "events"))))return this; - this.undelegateEvents(); - for (var e in t) { - var r = t[e]; - if (!i.isFunction(r))r = this[t[e]]; - if (!r)continue; - var s = e.match(x); - var n = s[1], a = s[2]; - r = i.bind(r, this); - n += ".delegateEvents" + this.cid; - if (a === "") { - this.$el.on(n, r) - } else { - this.$el.on(n, a, r) - } - } - return this - }, undelegateEvents: function () { - this.$el.off(".delegateEvents" + this.cid); - return this - }, _ensureElement: function () { - if (!this.el) { - var t = i.extend({}, i.result(this, "attributes")); - if (this.id)t.id = i.result(this, "id"); - if (this.className)t["class"] = i.result(this, "className"); - var r = e.$("<" + i.result(this, "tagName") + ">").attr(t); - this.setElement(r, false) - } else { - this.setElement(i.result(this, "el"), false) - } - } - }); - e.sync = function (t, r, s) { - var n = T[t]; - i.defaults(s || (s = {}), {emulateHTTP: e.emulateHTTP, emulateJSON: e.emulateJSON}); - var a = {type: n, dataType: "json"}; - if (!s.url) { - a.url = i.result(r, "url") || M() - } - if (s.data == null && r && (t === "create" || t === "update" || t === "patch")) { - a.contentType = "application/json"; - a.data = JSON.stringify(s.attrs || r.toJSON(s)) - } - if (s.emulateJSON) { - a.contentType = "application/x-www-form-urlencoded"; - a.data = a.data ? {model: a.data} : {} - } - if (s.emulateHTTP && (n === "PUT" || n === "DELETE" || n === "PATCH")) { - a.type = "POST"; - if (s.emulateJSON)a.data._method = n; - var o = s.beforeSend; - s.beforeSend = function (t) { - t.setRequestHeader("X-HTTP-Method-Override", n); - if (o)return o.apply(this, arguments) - } - } - if (a.type !== "GET" && !s.emulateJSON) { - a.processData = false - } - if (a.type === "PATCH" && k) { - a.xhr = function () { - return new ActiveXObject("Microsoft.XMLHTTP") - } - } - var h = s.xhr = e.ajax(i.extend(a, s)); - r.trigger("request", r, h, s); - return h - }; - var k = typeof window !== "undefined" && !!window.ActiveXObject && !(window.XMLHttpRequest && (new XMLHttpRequest).dispatchEvent); - var T = {create: "POST", update: "PUT", patch: "PATCH", "delete": "DELETE", read: "GET"}; - e.ajax = function () { - return e.$.ajax.apply(e.$, arguments) - }; - var $ = e.Router = function (t) { - t || (t = {}); - if (t.routes)this.routes = t.routes; - this._bindRoutes(); - this.initialize.apply(this, arguments) - }; - var S = /\((.*?)\)/g; - var H = /(\(\?)?:\w+/g; - var A = /\*\w+/g; - var I = /[\-{}\[\]+?.,\\\^$|#\s]/g; - i.extend($.prototype, u, { - initialize: function () { - }, route: function (t, r, s) { - if (!i.isRegExp(t))t = this._routeToRegExp(t); - if (i.isFunction(r)) { - s = r; - r = "" - } - if (!s)s = this[r]; - var n = this; - e.history.route(t, function (i) { - var a = n._extractParameters(t, i); - n.execute(s, a); - n.trigger.apply(n, ["route:" + r].concat(a)); - n.trigger("route", r, a); - e.history.trigger("route", n, r, a) - }); - return this - }, execute: function (t, e) { - if (t)t.apply(this, e) - }, navigate: function (t, i) { - e.history.navigate(t, i); - return this - }, _bindRoutes: function () { - if (!this.routes)return; - this.routes = i.result(this, "routes"); - var t, e = i.keys(this.routes); - while ((t = e.pop()) != null) { - this.route(t, this.routes[t]) - } - }, _routeToRegExp: function (t) { - t = t.replace(I, "\\$&").replace(S, "(?:$1)?").replace(H, function (t, e) { - return e ? t : "([^/?]+)" - }).replace(A, "([^?]*?)"); - return new RegExp("^" + t + "(?:\\?([\\s\\S]*))?$") - }, _extractParameters: function (t, e) { - var r = t.exec(e).slice(1); - return i.map(r, function (t, e) { - if (e === r.length - 1)return t || null; - return t ? decodeURIComponent(t) : null - }) - } - }); - var N = e.History = function () { - this.handlers = []; - i.bindAll(this, "checkUrl"); - if (typeof window !== "undefined") { - this.location = window.location; - this.history = window.history - } - }; - var R = /^[#\/]|\s+$/g; - var O = /^\/+|\/+$/g; - var P = /msie [\w.]+/; - var C = /\/$/; - var j = /#.*$/; - N.started = false; - i.extend(N.prototype, u, { - interval: 50, atRoot: function () { - return this.location.pathname.replace(/[^\/]$/, "$&/") === this.root - }, getHash: function (t) { - var e = (t || this).location.href.match(/#(.*)$/); - return e ? e[1] : "" - }, getFragment: function (t, e) { - if (t == null) { - if (this._hasPushState || !this._wantsHashChange || e) { - t = decodeURI(this.location.pathname + this.location.search); - var i = this.root.replace(C, ""); - if (!t.indexOf(i))t = t.slice(i.length) - } else { - t = this.getHash() - } - } - return t.replace(R, "") - }, start: function (t) { - if (N.started)throw new Error("Backbone.history has already been started"); - N.started = true; - this.options = i.extend({root: "/"}, this.options, t); - this.root = this.options.root; - this._wantsHashChange = this.options.hashChange !== false; - this._wantsPushState = !!this.options.pushState; - this._hasPushState = !!(this.options.pushState && this.history && this.history.pushState); - var r = this.getFragment(); - var s = document.documentMode; - var n = P.exec(navigator.userAgent.toLowerCase()) && (!s || s <= 7); - this.root = ("/" + this.root + "/").replace(O, "/"); - if (n && this._wantsHashChange) { - var a = e.$('