TB-50: Improve swagger configuration (#5)
This commit is contained in:
parent
e1dd86041f
commit
b154f1a4fd
@ -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")
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user