From e30fa7c3939341e6946c72df542cb96887f58d83 Mon Sep 17 00:00:00 2001 From: metalicn20 Date: Tue, 21 Sep 2021 12:20:13 +0430 Subject: [PATCH 1/2] Add swagger config --- BlockchainGateway/bc-gateway-app/pom.xml | 5 + .../bcgateway/app/config/SwaggerConfig.kt | 97 +++++++++++++++++++ .../src/main/resources/application.yml | 2 + 3 files changed, 104 insertions(+) create mode 100644 BlockchainGateway/bc-gateway-app/src/main/kotlin/co/nilin/opex/bcgateway/app/config/SwaggerConfig.kt diff --git a/BlockchainGateway/bc-gateway-app/pom.xml b/BlockchainGateway/bc-gateway-app/pom.xml index 71355c3df..298eb2d3f 100644 --- a/BlockchainGateway/bc-gateway-app/pom.xml +++ b/BlockchainGateway/bc-gateway-app/pom.xml @@ -103,6 +103,11 @@ bc-gateway-persister-postgres ${bc-gateway.version} + + io.springfox + springfox-boot-starter + 3.0.0 + diff --git a/BlockchainGateway/bc-gateway-app/src/main/kotlin/co/nilin/opex/bcgateway/app/config/SwaggerConfig.kt b/BlockchainGateway/bc-gateway-app/src/main/kotlin/co/nilin/opex/bcgateway/app/config/SwaggerConfig.kt new file mode 100644 index 000000000..9a336a7cb --- /dev/null +++ b/BlockchainGateway/bc-gateway-app/src/main/kotlin/co/nilin/opex/bcgateway/app/config/SwaggerConfig.kt @@ -0,0 +1,97 @@ +package co.nilin.opex.bcgateway.app.config + +import org.springframework.beans.factory.annotation.Value +import org.springframework.context.annotation.Bean +import org.springframework.context.annotation.Configuration +import org.springframework.security.core.annotation.AuthenticationPrincipal +import springfox.documentation.builders.ApiInfoBuilder +import springfox.documentation.builders.OAuthBuilder +import springfox.documentation.builders.PathSelectors +import springfox.documentation.builders.RequestParameterBuilder +import springfox.documentation.service.* +import springfox.documentation.spi.DocumentationType +import springfox.documentation.spi.service.contexts.SecurityContext +import springfox.documentation.spring.web.plugins.Docket +import springfox.documentation.swagger.web.SecurityConfiguration +import springfox.documentation.swagger.web.SecurityConfigurationBuilder +import java.security.Principal +import java.util.* + +@Configuration +class SwaggerConfig { + @Value("\${swagger.authUrl}") + private lateinit var authUrl: String + + @Bean + fun opexBCGateway(): Docket { + return Docket(DocumentationType.SWAGGER_2) + .groupName("opex-bc-gateway") + .apiInfo(apiInfo()) + .select() + .paths(PathSelectors.regex("^/actuator.*").negate()) + .build() + .globalRequestParameters( + Collections.singletonList( + RequestParameterBuilder() + .name("content-type") + .description("content-type") + .`in`(ParameterType.HEADER) + .required(true) + .build() + ) + ) + .ignoredParameterTypes(AuthenticationPrincipal::class.java, Principal::class.java) + .useDefaultResponseMessages(false) + .securitySchemes(Collections.singletonList(oauth())) + .securityContexts(Collections.singletonList(securityContext())) + } + + private fun apiInfo(): ApiInfo { + return ApiInfoBuilder() + .title("OPEX API") + .description("Backend for opex exchange.") + .license("MIT License") + .licenseUrl("https://github.com/opexdev/Back-end/blob/feature/1-MVP/LICENSE") + .version("0.1") + .build() + } + + private fun oauth(): SecurityScheme { + return OAuthBuilder() + .name("opex") + .grantTypes(grantTypes()) + .scopes(scopes()) + .build() + } + + private fun scopes(): List { + return listOf(AuthorizationScope("openid", "OpenId")) + } + + private fun grantTypes(): List { + val tokenUrl = "$authUrl/auth/realms/opex/protocol/openid-connect/token" + val grantType = ResourceOwnerPasswordCredentialsGrant(tokenUrl) + return Collections.singletonList(grantType) + } + + private fun securityContext(): SecurityContext { + val securityReference = SecurityReference.builder() + .reference("opex") + .scopes(emptyArray()) + .build() + return SecurityContext.builder() + .securityReferences(Collections.singletonList(securityReference)) + .operationSelector { true } + .build() + } + + @Bean + fun securityInfo(): SecurityConfiguration { + return SecurityConfigurationBuilder.builder() + .clientId("admin-cli") + .realm("opex") + .appName("opex") + .scopeSeparator(",") + .build() + } +} diff --git a/BlockchainGateway/bc-gateway-app/src/main/resources/application.yml b/BlockchainGateway/bc-gateway-app/src/main/resources/application.yml index c21510415..c1698dc75 100644 --- a/BlockchainGateway/bc-gateway-app/src/main/resources/application.yml +++ b/BlockchainGateway/bc-gateway-app/src/main/resources/application.yml @@ -29,3 +29,5 @@ spring: logging: level: org.apache.kafka: DEBUG + +swagger.authUrl: https://api.opex.dev From e32b5898a193a5fb470baf82ac3d6dbd475f4e07 Mon Sep 17 00:00:00 2001 From: metalicn20 Date: Tue, 21 Sep 2021 12:28:42 +0430 Subject: [PATCH 2/2] Fix auth url in swagger configs --- .../src/main/kotlin/co/nilin/opex/app/config/SwaggerConfig.kt | 4 ++-- .../src/main/kotlin/co/nilin/opex/app/config/SwaggerConfig.kt | 4 ++-- .../kotlin/co/nilin/opex/wallet/app/config/SwaggerConfig.kt | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Api/api-app/src/main/kotlin/co/nilin/opex/app/config/SwaggerConfig.kt b/Api/api-app/src/main/kotlin/co/nilin/opex/app/config/SwaggerConfig.kt index c9fe3d51b..6758b8ee6 100644 --- a/Api/api-app/src/main/kotlin/co/nilin/opex/app/config/SwaggerConfig.kt +++ b/Api/api-app/src/main/kotlin/co/nilin/opex/app/config/SwaggerConfig.kt @@ -20,7 +20,7 @@ import java.util.* @Configuration class SwaggerConfig { @Value("\${swagger.authUrl}") - val authUrl: String = "" + private lateinit var authUrl: String @Bean fun opexApi(): Docket { @@ -94,4 +94,4 @@ class SwaggerConfig { .scopeSeparator(",") .build() } -} \ No newline at end of file +} diff --git a/MatchingGateway/gateway-app/src/main/kotlin/co/nilin/opex/app/config/SwaggerConfig.kt b/MatchingGateway/gateway-app/src/main/kotlin/co/nilin/opex/app/config/SwaggerConfig.kt index 37abadf5e..13860b55e 100644 --- a/MatchingGateway/gateway-app/src/main/kotlin/co/nilin/opex/app/config/SwaggerConfig.kt +++ b/MatchingGateway/gateway-app/src/main/kotlin/co/nilin/opex/app/config/SwaggerConfig.kt @@ -21,7 +21,7 @@ import java.util.* @Configuration class SwaggerConfig { @Value("\${swagger.authUrl}") - val authUrl: String = "" + private lateinit var authUrl: String @Bean fun opexMatchingGateway(): Docket { @@ -95,4 +95,4 @@ class SwaggerConfig { .scopeSeparator(",") .build() } -} \ No newline at end of file +} diff --git a/Wallet/wallet-app/src/main/kotlin/co/nilin/opex/wallet/app/config/SwaggerConfig.kt b/Wallet/wallet-app/src/main/kotlin/co/nilin/opex/wallet/app/config/SwaggerConfig.kt index 76b80d954..eb87f48bf 100644 --- a/Wallet/wallet-app/src/main/kotlin/co/nilin/opex/wallet/app/config/SwaggerConfig.kt +++ b/Wallet/wallet-app/src/main/kotlin/co/nilin/opex/wallet/app/config/SwaggerConfig.kt @@ -20,7 +20,7 @@ import java.util.* @Configuration class SwaggerConfig { @Value("\${swagger.authUrl}") - val authUrl: String = "" + private lateinit var authUrl: String @Bean fun opexWallet(): Docket { @@ -96,4 +96,4 @@ class SwaggerConfig { .scopeSeparator(",") .build() } -} \ No newline at end of file +}