Details
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 59e97b7..2a1bc46 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<String> apiPaths() {
+ return regex("/api.*");
+ }
+
+ private Predicate<String> securityPaths() {
+ return and(
+ regex("/api.*"),
+ not(regex("/api/noauth.*"))
+ );
+ }
+
List<SecurityReference> 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 <a href='http://thingsboard.io/docs/rest-auth'>Documentation page</a>")
+ .description("For instructions how to authorize requests please visit <a href='http://thingsboard.io/docs/reference/rest-api/'>REST API documentation page</a>.")
.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 e97885d..cace783 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 a21f5dc..3c04619 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