diff --git a/application/pom.xml b/application/pom.xml index d75ece112b..9d099acf55 100644 --- a/application/pom.xml +++ b/application/pom.xml @@ -21,9 +21,9 @@ org.thingsboard 0.0.1-SNAPSHOT - server + thingsboard - org.thingsboard.server + org.thingsboard application jar @@ -47,35 +47,35 @@ linux-x86_64 - org.thingsboard.server + org.thingsboard extensions-api - org.thingsboard.server + org.thingsboard extensions-core - org.thingsboard.server.common + org.thingsboard.common transport - org.thingsboard.server.transport + org.thingsboard.transport http - org.thingsboard.server.transport + org.thingsboard.transport coap - org.thingsboard.server.transport + org.thingsboard.transport mqtt - org.thingsboard.server + org.thingsboard dao - org.thingsboard.server + org.thingsboard dao test-jar test @@ -97,7 +97,7 @@ test - org.thingsboard.server + org.thingsboard ui ${project.version} runtime @@ -212,6 +212,14 @@ io.grpc grpc-stub + + io.springfox + springfox-swagger-ui + + + io.springfox + springfox-swagger2 + @@ -325,17 +333,17 @@ ${project.build.directory}/extensions - org.thingsboard.server.extensions + org.thingsboard.extensions extension-rabbitmq extension - org.thingsboard.server.extensions + org.thingsboard.extensions extension-rest-api-call extension - org.thingsboard.server.extensions + org.thingsboard.extensions extension-kafka extension diff --git a/application/src/main/java/org/thingsboard/server/ThingsboardServerApplication.java b/application/src/main/java/org/thingsboard/server/ThingsboardServerApplication.java index f082824ab7..9f1bce3a71 100644 --- a/application/src/main/java/org/thingsboard/server/ThingsboardServerApplication.java +++ b/application/src/main/java/org/thingsboard/server/ThingsboardServerApplication.java @@ -19,11 +19,13 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; +import springfox.documentation.swagger2.annotations.EnableSwagger2; import java.util.Arrays; @EnableAutoConfiguration @SpringBootApplication +@EnableSwagger2 @ComponentScan({"org.thingsboard.server"}) public class ThingsboardServerApplication { diff --git a/application/src/main/java/org/thingsboard/server/config/SwaggerConfiguration.java b/application/src/main/java/org/thingsboard/server/config/SwaggerConfiguration.java new file mode 100644 index 0000000000..59e97b751d --- /dev/null +++ b/application/src/main/java/org/thingsboard/server/config/SwaggerConfiguration.java @@ -0,0 +1,78 @@ +/** + * Copyright © 2016 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.server.config; + +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.service.*; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spi.service.contexts.SecurityContext; +import springfox.documentation.spring.web.plugins.Docket; + +import java.util.List; + +import static com.google.common.collect.Lists.newArrayList; + +@Configuration +public class SwaggerConfiguration { + + @Bean + public Docket thingsboardApi() { + return new Docket(DocumentationType.SWAGGER_2) + .groupName("thingsboard") + .apiInfo(apiInfo()) + .select() + .paths(PathSelectors.any()) + .build() + .securitySchemes(newArrayList(jwtTokenKey())) + .securityContexts(newArrayList(securityContext())); + } + + private ApiKey jwtTokenKey() { + return new ApiKey("X-Authorization", "JWT token", "header"); + } + + private SecurityContext securityContext() { + return SecurityContext.builder() + .securityReferences(defaultAuth()) + .forPaths(PathSelectors.regex("/api.*")) + .build(); + } + + List defaultAuth() { + AuthorizationScope[] authorizationScopes = new AuthorizationScope[3]; + authorizationScopes[0] = new AuthorizationScope(Authority.SYS_ADMIN.name(), "System administrator"); + authorizationScopes[1] = new AuthorizationScope(Authority.TENANT_ADMIN.name(), "Tenant administrator"); + authorizationScopes[2] = new AuthorizationScope(Authority.CUSTOMER_USER.name(), "Customer"); + return newArrayList( + new SecurityReference("X-Authorization", authorizationScopes)); + } + + private ApiInfo apiInfo() { + return new ApiInfoBuilder() + .title("Thingsboard REST API") + .description("For instructions how to authorize requests please visit 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") + .version("2.0") + .build(); + } + +} diff --git a/application/src/main/java/org/thingsboard/server/config/ThingsboardSecurityConfiguration.java b/application/src/main/java/org/thingsboard/server/config/ThingsboardSecurityConfiguration.java index ec6ca81367..7ae4604c22 100644 --- a/application/src/main/java/org/thingsboard/server/config/ThingsboardSecurityConfiguration.java +++ b/application/src/main/java/org/thingsboard/server/config/ThingsboardSecurityConfiguration.java @@ -53,10 +53,11 @@ public class ThingsboardSecurityConfiguration extends WebSecurityConfigurerAdapt public static final String JWT_TOKEN_HEADER_PARAM = "X-Authorization"; public static final String JWT_TOKEN_QUERY_PARAM = "token"; + public static final String WEBJARS_ENTRY_POINT = "/webjars/**"; public static final String DEVICE_API_ENTRY_POINT = "/api/v1/**"; public static final String FORM_BASED_LOGIN_ENTRY_POINT = "/api/auth/login"; public static final String TOKEN_REFRESH_ENTRY_POINT = "/api/auth/token"; - public static final String[] NON_TOKEN_BASED_AUTH_ENTRY_POINTS = new String[] {"/index.html", "/static/**", "/api/noauth/**"}; + public static final String[] NON_TOKEN_BASED_AUTH_ENTRY_POINTS = new String[] {"/index.html", "/static/**", "/api/noauth/**", "/webjars/**"}; public static final String TOKEN_BASED_AUTH_ENTRY_POINT = "/api/**"; public static final String WS_TOKEN_BASED_AUTH_ENTRY_POINT = "/api/ws/**"; @@ -89,7 +90,7 @@ public class ThingsboardSecurityConfiguration extends WebSecurityConfigurerAdapt @Bean protected JwtTokenAuthenticationProcessingFilter buildJwtTokenAuthenticationProcessingFilter() throws Exception { List pathsToSkip = new ArrayList(Arrays.asList(NON_TOKEN_BASED_AUTH_ENTRY_POINTS)); - pathsToSkip.addAll(Arrays.asList(WS_TOKEN_BASED_AUTH_ENTRY_POINT, TOKEN_REFRESH_ENTRY_POINT, FORM_BASED_LOGIN_ENTRY_POINT, DEVICE_API_ENTRY_POINT)); + pathsToSkip.addAll(Arrays.asList(WS_TOKEN_BASED_AUTH_ENTRY_POINT, TOKEN_REFRESH_ENTRY_POINT, FORM_BASED_LOGIN_ENTRY_POINT, DEVICE_API_ENTRY_POINT, WEBJARS_ENTRY_POINT)); SkipPathRequestMatcher matcher = new SkipPathRequestMatcher(pathsToSkip, TOKEN_BASED_AUTH_ENTRY_POINT); JwtTokenAuthenticationProcessingFilter filter = new JwtTokenAuthenticationProcessingFilter(failureHandler, jwtHeaderTokenExtractor, matcher); @@ -142,6 +143,7 @@ public class ThingsboardSecurityConfiguration extends WebSecurityConfigurerAdapt .sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() .authorizeRequests() + .antMatchers(WEBJARS_ENTRY_POINT).permitAll() // Webjars .antMatchers(DEVICE_API_ENTRY_POINT).permitAll() // Device HTTP Transport API .antMatchers(FORM_BASED_LOGIN_ENTRY_POINT).permitAll() // Login end-point .antMatchers(TOKEN_REFRESH_ENTRY_POINT).permitAll() // Token refresh end-point diff --git a/application/src/main/java/org/thingsboard/server/config/WebConfig.java b/application/src/main/java/org/thingsboard/server/config/WebConfig.java index 3a2234a2fb..02d8cfc2a8 100644 --- a/application/src/main/java/org/thingsboard/server/config/WebConfig.java +++ b/application/src/main/java/org/thingsboard/server/config/WebConfig.java @@ -21,7 +21,7 @@ import org.springframework.web.bind.annotation.RequestMapping; @Controller public class WebConfig { - @RequestMapping(value = "/{path:^(?!api$)(?!static$)[^\\.]*}/**") + @RequestMapping(value = "/{path:^(?!api$)(?!static$)(?!webjars$)[^\\.]*}/**") public String redirect() { return "forward:/index.html"; } 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 cace783099..e97885d1c5 100644 --- a/application/src/main/java/org/thingsboard/server/controller/AdminController.java +++ b/application/src/main/java/org/thingsboard/server/controller/AdminController.java @@ -15,6 +15,7 @@ */ 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.*; @@ -45,6 +46,18 @@ 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 3c04619529..a21f5dcd29 100644 --- a/application/src/main/java/org/thingsboard/server/controller/RuleController.java +++ b/application/src/main/java/org/thingsboard/server/controller/RuleController.java @@ -15,6 +15,9 @@ */ 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.*; @@ -34,6 +37,12 @@ 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 diff --git a/common/data/pom.xml b/common/data/pom.xml index b458ef1e37..08de1a46f8 100644 --- a/common/data/pom.xml +++ b/common/data/pom.xml @@ -19,11 +19,11 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - org.thingsboard.server + org.thingsboard 0.0.1-SNAPSHOT common - org.thingsboard.server.common + org.thingsboard.common data jar diff --git a/common/message/pom.xml b/common/message/pom.xml index be1492813a..5d433d1667 100644 --- a/common/message/pom.xml +++ b/common/message/pom.xml @@ -19,11 +19,11 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - org.thingsboard.server + org.thingsboard 0.0.1-SNAPSHOT common - org.thingsboard.server.common + org.thingsboard.common message jar @@ -37,7 +37,7 @@ - org.thingsboard.server.common + org.thingsboard.common data diff --git a/common/pom.xml b/common/pom.xml index 97ff8ab62b..7a21a46e28 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -21,9 +21,9 @@ org.thingsboard 0.0.1-SNAPSHOT - server + thingsboard - org.thingsboard.server + org.thingsboard common pom diff --git a/common/transport/pom.xml b/common/transport/pom.xml index e57d3d790a..198d1e7ef5 100644 --- a/common/transport/pom.xml +++ b/common/transport/pom.xml @@ -19,11 +19,11 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - org.thingsboard.server + org.thingsboard 0.0.1-SNAPSHOT common - org.thingsboard.server.common + org.thingsboard.common transport jar @@ -37,11 +37,11 @@ - org.thingsboard.server.common + org.thingsboard.common data - org.thingsboard.server.common + org.thingsboard.common message diff --git a/dao/pom.xml b/dao/pom.xml index f9f0d56454..2a2aa83783 100644 --- a/dao/pom.xml +++ b/dao/pom.xml @@ -21,9 +21,9 @@ org.thingsboard 0.0.1-SNAPSHOT - server + thingsboard - org.thingsboard.server + org.thingsboard dao jar @@ -37,7 +37,7 @@ - org.thingsboard.server.common + org.thingsboard.common data diff --git a/extensions-api/pom.xml b/extensions-api/pom.xml index 4af3de3372..c8b9ede80b 100644 --- a/extensions-api/pom.xml +++ b/extensions-api/pom.xml @@ -21,9 +21,9 @@ org.thingsboard 0.0.1-SNAPSHOT - server + thingsboard - org.thingsboard.server + org.thingsboard extensions-api jar @@ -37,11 +37,11 @@ - org.thingsboard.server.common + org.thingsboard.common data - org.thingsboard.server.common + org.thingsboard.common message diff --git a/extensions-core/pom.xml b/extensions-core/pom.xml index b2e2d183c0..61b2833391 100644 --- a/extensions-core/pom.xml +++ b/extensions-core/pom.xml @@ -21,9 +21,9 @@ org.thingsboard 0.0.1-SNAPSHOT - server + thingsboard - org.thingsboard.server + org.thingsboard extensions-core jar @@ -37,7 +37,7 @@ - org.thingsboard.server + org.thingsboard extensions-api provided diff --git a/extensions/extension-kafka/pom.xml b/extensions/extension-kafka/pom.xml index 23a5e4bbbc..27132c2bd4 100644 --- a/extensions/extension-kafka/pom.xml +++ b/extensions/extension-kafka/pom.xml @@ -21,11 +21,11 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - org.thingsboard.server + org.thingsboard 0.0.1-SNAPSHOT extensions - org.thingsboard.server.extensions + org.thingsboard.extensions extension-kafka jar @@ -49,12 +49,12 @@ provided - org.thingsboard.server + org.thingsboard extensions-api provided - org.thingsboard.server + org.thingsboard extensions-core provided diff --git a/extensions/extension-rabbitmq/pom.xml b/extensions/extension-rabbitmq/pom.xml index f2456c5c5e..4f8ea38c8d 100644 --- a/extensions/extension-rabbitmq/pom.xml +++ b/extensions/extension-rabbitmq/pom.xml @@ -19,11 +19,11 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - org.thingsboard.server + org.thingsboard 0.0.1-SNAPSHOT extensions - org.thingsboard.server.extensions + org.thingsboard.extensions extension-rabbitmq jar @@ -41,12 +41,12 @@ amqp-client - org.thingsboard.server + org.thingsboard extensions-api provided - org.thingsboard.server + org.thingsboard extensions-core provided diff --git a/extensions/extension-rest-api-call/pom.xml b/extensions/extension-rest-api-call/pom.xml index 175d7362ea..0214197e5c 100644 --- a/extensions/extension-rest-api-call/pom.xml +++ b/extensions/extension-rest-api-call/pom.xml @@ -21,11 +21,11 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - org.thingsboard.server + org.thingsboard 0.0.1-SNAPSHOT extensions - org.thingsboard.server.extensions + org.thingsboard.extensions extension-rest-api-call jar @@ -49,7 +49,7 @@ provided - org.thingsboard.server + org.thingsboard extensions-api provided @@ -59,7 +59,7 @@ provided - org.thingsboard.server + org.thingsboard extensions-core provided diff --git a/extensions/pom.xml b/extensions/pom.xml index 8609ea7c23..1fcc5d973e 100644 --- a/extensions/pom.xml +++ b/extensions/pom.xml @@ -21,9 +21,9 @@ org.thingsboard 0.0.1-SNAPSHOT - server + thingsboard - org.thingsboard.server + org.thingsboard extensions pom diff --git a/pom.xml b/pom.xml index 488de00932..bd1faaea6b 100755 --- a/pom.xml +++ b/pom.xml @@ -68,6 +68,7 @@ 3.6.1 2.19.1 3.0.2 + 2.6.1 @@ -301,70 +302,70 @@ - org.thingsboard.server + org.thingsboard extensions-api ${project.version} - org.thingsboard.server + org.thingsboard extensions-core ${project.version} - org.thingsboard.server.extensions + org.thingsboard.extensions extension-rabbitmq extension ${project.version} - org.thingsboard.server.extensions + org.thingsboard.extensions extension-rest-api-call extension ${project.version} - org.thingsboard.server.extensions + org.thingsboard.extensions extension-kafka extension ${project.version} - org.thingsboard.server.common + org.thingsboard.common data ${project.version} - org.thingsboard.server.common + org.thingsboard.common message ${project.version} - org.thingsboard.server.common + org.thingsboard.common transport ${project.version} - org.thingsboard.server.transport + org.thingsboard.transport http ${project.version} - org.thingsboard.server.transport + org.thingsboard.transport coap ${project.version} - org.thingsboard.server.transport + org.thingsboard.transport mqtt ${project.version} - org.thingsboard.server + org.thingsboard dao ${project.version} - org.thingsboard.server + org.thingsboard dao ${project.version} test-jar @@ -672,6 +673,16 @@ hazelcast ${hazelcast.version} + + io.springfox + springfox-swagger-ui + ${springfox-swagger.version} + + + io.springfox + springfox-swagger2 + ${springfox-swagger.version} + diff --git a/tools/pom.xml b/tools/pom.xml index f022ac50ef..0eb68df8da 100644 --- a/tools/pom.xml +++ b/tools/pom.xml @@ -21,9 +21,9 @@ org.thingsboard 0.0.1-SNAPSHOT - server + thingsboard - org.thingsboard.server + org.thingsboard tools jar @@ -37,7 +37,7 @@ - org.thingsboard.server.common + org.thingsboard.common data diff --git a/transport/coap/pom.xml b/transport/coap/pom.xml index 6ddf64bd9a..6634165a17 100644 --- a/transport/coap/pom.xml +++ b/transport/coap/pom.xml @@ -19,11 +19,11 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - org.thingsboard.server + org.thingsboard 0.0.1-SNAPSHOT transport - org.thingsboard.server.transport + org.thingsboard.transport coap jar @@ -37,7 +37,7 @@ - org.thingsboard.server.common + org.thingsboard.common transport diff --git a/transport/http/pom.xml b/transport/http/pom.xml index 665a152657..a13d26f36e 100644 --- a/transport/http/pom.xml +++ b/transport/http/pom.xml @@ -19,11 +19,11 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - org.thingsboard.server + org.thingsboard 0.0.1-SNAPSHOT transport - org.thingsboard.server.transport + org.thingsboard.transport http jar @@ -37,7 +37,7 @@ - org.thingsboard.server.common + org.thingsboard.common transport diff --git a/transport/mqtt/pom.xml b/transport/mqtt/pom.xml index 045bb1f3b9..3941544700 100644 --- a/transport/mqtt/pom.xml +++ b/transport/mqtt/pom.xml @@ -19,11 +19,11 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - org.thingsboard.server + org.thingsboard 0.0.1-SNAPSHOT transport - org.thingsboard.server.transport + org.thingsboard.transport mqtt jar @@ -37,7 +37,7 @@ - org.thingsboard.server.common + org.thingsboard.common transport diff --git a/transport/pom.xml b/transport/pom.xml index 4675cdf300..328ab6dbb3 100644 --- a/transport/pom.xml +++ b/transport/pom.xml @@ -21,9 +21,9 @@ org.thingsboard 0.0.1-SNAPSHOT - server + thingsboard - org.thingsboard.server + org.thingsboard transport pom diff --git a/ui/pom.xml b/ui/pom.xml index c9e4c686a6..e7911ff903 100644 --- a/ui/pom.xml +++ b/ui/pom.xml @@ -21,9 +21,9 @@ org.thingsboard 0.0.1-SNAPSHOT - server + thingsboard - org.thingsboard.server + org.thingsboard ui jar