diff --git a/application/src/main/java/org/thingsboard/server/config/SwaggerConfiguration.java b/application/src/main/java/org/thingsboard/server/config/SwaggerConfiguration.java index 59e97b751d..2a1bc46a01 100644 --- a/application/src/main/java/org/thingsboard/server/config/SwaggerConfiguration.java +++ b/application/src/main/java/org/thingsboard/server/config/SwaggerConfiguration.java @@ -15,11 +15,15 @@ */ package org.thingsboard.server.config; +import com.fasterxml.classmate.ResolvedType; +import com.fasterxml.classmate.TypeResolver; +import com.fasterxml.jackson.databind.JsonNode; +import com.google.common.base.Predicate; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.thingsboard.server.common.data.security.Authority; import springfox.documentation.builders.ApiInfoBuilder; -import springfox.documentation.builders.PathSelectors; +import springfox.documentation.schema.AlternateTypeRule; import springfox.documentation.service.*; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spi.service.contexts.SecurityContext; @@ -27,18 +31,33 @@ import springfox.documentation.spring.web.plugins.Docket; import java.util.List; +import static com.google.common.base.Predicates.and; +import static com.google.common.base.Predicates.not; import static com.google.common.collect.Lists.newArrayList; +import static springfox.documentation.builders.PathSelectors.regex; @Configuration public class SwaggerConfiguration { @Bean public Docket thingsboardApi() { + TypeResolver typeResolver = new TypeResolver(); + final ResolvedType jsonNodeType = + typeResolver.resolve( + JsonNode.class); + final ResolvedType stringType = + typeResolver.resolve( + String.class); + return new Docket(DocumentationType.SWAGGER_2) .groupName("thingsboard") .apiInfo(apiInfo()) + .alternateTypeRules( + new AlternateTypeRule( + jsonNodeType, + stringType)) .select() - .paths(PathSelectors.any()) + .paths(apiPaths()) .build() .securitySchemes(newArrayList(jwtTokenKey())) .securityContexts(newArrayList(securityContext())); @@ -51,10 +70,21 @@ public class SwaggerConfiguration { private SecurityContext securityContext() { return SecurityContext.builder() .securityReferences(defaultAuth()) - .forPaths(PathSelectors.regex("/api.*")) + .forPaths(securityPaths()) .build(); } + private Predicate apiPaths() { + return regex("/api.*"); + } + + private Predicate securityPaths() { + return and( + regex("/api.*"), + not(regex("/api/noauth.*")) + ); + } + List defaultAuth() { AuthorizationScope[] authorizationScopes = new AuthorizationScope[3]; authorizationScopes[0] = new AuthorizationScope(Authority.SYS_ADMIN.name(), "System administrator"); @@ -67,7 +97,7 @@ public class SwaggerConfiguration { private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("Thingsboard REST API") - .description("For instructions how to authorize requests please visit Documentation page") + .description("For instructions how to authorize requests please visit REST API documentation page.") .contact(new Contact("Thingsboard team", "http://thingsboard.io", "info@thingsboard.io")) .license("Apache License Version 2.0") .licenseUrl("https://github.com/thingsboard/thingsboard/blob/master/LICENSE") diff --git a/application/src/main/java/org/thingsboard/server/controller/AdminController.java b/application/src/main/java/org/thingsboard/server/controller/AdminController.java index e97885d1c5..cace783099 100644 --- a/application/src/main/java/org/thingsboard/server/controller/AdminController.java +++ b/application/src/main/java/org/thingsboard/server/controller/AdminController.java @@ -15,7 +15,6 @@ */ package org.thingsboard.server.controller; -import io.swagger.annotations.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; @@ -46,18 +45,6 @@ public class AdminController extends BaseController { } @PreAuthorize("hasAuthority('SYS_ADMIN')") - @ApiOperation( - value = "Save admin settings", notes = "Saves admin settings", - response = AdminSettings.class, - authorizations = { - @Authorization(value = "X-Authorization", scopes = { - @AuthorizationScope(scope = "SYS_ADMIN", description = "") - })}) - @ApiResponses(value = { - @ApiResponse(code = 200, response = AdminSettings.class, message = "Admin settings successfully updated"), - @ApiResponse(code = 400, message = "Invalid admin settings payload supplied"), - @ApiResponse(code = 404, message = "Admin settings not found")} - ) @RequestMapping(value = "/settings", method = RequestMethod.POST) @ResponseBody public AdminSettings saveAdminSettings(@RequestBody AdminSettings adminSettings) throws ThingsboardException { diff --git a/application/src/main/java/org/thingsboard/server/controller/RuleController.java b/application/src/main/java/org/thingsboard/server/controller/RuleController.java index a21f5dcd29..3c04619529 100644 --- a/application/src/main/java/org/thingsboard/server/controller/RuleController.java +++ b/application/src/main/java/org/thingsboard/server/controller/RuleController.java @@ -15,9 +15,6 @@ */ package org.thingsboard.server.controller; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiResponse; -import io.swagger.annotations.ApiResponses; import org.springframework.http.HttpStatus; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; @@ -37,12 +34,6 @@ import java.util.List; @RequestMapping("/api") public class RuleController extends BaseController { - @ApiOperation(value = "getRuleById", nickname = "Get Rule By ID") - @ApiResponses(value = { - @ApiResponse(code = 200, message = "Success", response = RuleMetaData.class), - @ApiResponse(code = 401, message = "Unauthorized"), - @ApiResponse(code = 403, message = "Forbidden"), - @ApiResponse(code = 404, message = "Not Found")}) @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')") @RequestMapping(value = "/rule/{ruleId}", method = RequestMethod.GET) @ResponseBody