diff --git a/application/src/main/java/org/thingsboard/server/controller/BaseController.java b/application/src/main/java/org/thingsboard/server/controller/BaseController.java index ff9039aabc..8ac6af240b 100644 --- a/application/src/main/java/org/thingsboard/server/controller/BaseController.java +++ b/application/src/main/java/org/thingsboard/server/controller/BaseController.java @@ -50,6 +50,7 @@ import org.thingsboard.server.common.data.asset.Asset; import org.thingsboard.server.common.data.asset.AssetInfo; import org.thingsboard.server.common.data.audit.ActionType; import org.thingsboard.server.common.data.edge.Edge; +import org.thingsboard.server.common.data.edge.EdgeInfo; import org.thingsboard.server.common.data.edge.EdgeEventActionType; import org.thingsboard.server.common.data.edge.EdgeEventType; import org.thingsboard.server.common.data.exception.ThingsboardErrorCode; @@ -643,6 +644,18 @@ public abstract class BaseController { } } + EdgeInfo checkEdgeInfoId(EdgeId edgeId, Operation operation) throws ThingsboardException { + try { + validateId(edgeId, "Incorrect edgeId " + edgeId); + EdgeInfo edge = edgeService.findEdgeInfoById(getCurrentUser().getTenantId(), edgeId); + checkNotNull(edge); + accessControlService.checkPermission(getCurrentUser(), Resource.EDGE, operation, edgeId, edge); + return edge; + } catch (Exception e) { + throw handleException(e, false); + } + } + DashboardInfo checkDashboardInfoId(DashboardId dashboardId, Operation operation) throws ThingsboardException { try { validateId(dashboardId, "Incorrect dashboardId " + dashboardId); diff --git a/application/src/main/java/org/thingsboard/server/controller/EdgeController.java b/application/src/main/java/org/thingsboard/server/controller/EdgeController.java index 21f5438d59..5bc41802fd 100644 --- a/application/src/main/java/org/thingsboard/server/controller/EdgeController.java +++ b/application/src/main/java/org/thingsboard/server/controller/EdgeController.java @@ -36,10 +36,7 @@ import org.thingsboard.server.common.data.edge.EdgeEventActionType; import org.thingsboard.server.common.data.edge.EdgeSearchQuery; import org.thingsboard.server.common.data.exception.ThingsboardErrorCode; import org.thingsboard.server.common.data.exception.ThingsboardException; -import org.thingsboard.server.common.data.id.CustomerId; -import org.thingsboard.server.common.data.id.EdgeId; -import org.thingsboard.server.common.data.id.RuleChainId; -import org.thingsboard.server.common.data.id.TenantId; +import org.thingsboard.server.common.data.id.*; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.common.data.plugin.ComponentLifecycleEvent; @@ -77,6 +74,19 @@ public class EdgeController extends BaseController { } } + @PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')") + @RequestMapping(value = "/edge/info/{edgeId}", method = RequestMethod.GET) + @ResponseBody + public EdgeInfo getEdgeInfoById(@PathVariable(EDGE_ID) String strEdgeId) throws ThingsboardException { + checkParameter(EDGE_ID, strEdgeId); + try { + EdgeId edgeId = new EdgeId(toUUID(strEdgeId)); + return checkEdgeInfoId(edgeId, Operation.READ); + } catch (Exception e) { + throw handleException(e); + } + } + @PreAuthorize("hasAuthority('TENANT_ADMIN')") @RequestMapping(value = "/edge", method = RequestMethod.POST) @ResponseBody diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/edge/EdgeService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/edge/EdgeService.java index f112690950..e28048e94c 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/edge/EdgeService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/edge/EdgeService.java @@ -20,12 +20,7 @@ import org.thingsboard.server.common.data.EntitySubtype; import org.thingsboard.server.common.data.edge.Edge; import org.thingsboard.server.common.data.edge.EdgeInfo; import org.thingsboard.server.common.data.edge.EdgeSearchQuery; -import org.thingsboard.server.common.data.id.CustomerId; -import org.thingsboard.server.common.data.id.DashboardId; -import org.thingsboard.server.common.data.id.EdgeId; -import org.thingsboard.server.common.data.id.EntityId; -import org.thingsboard.server.common.data.id.RuleChainId; -import org.thingsboard.server.common.data.id.TenantId; +import org.thingsboard.server.common.data.id.*; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; @@ -36,6 +31,8 @@ public interface EdgeService { Edge findEdgeById(TenantId tenantId, EdgeId edgeId); + EdgeInfo findEdgeInfoById(TenantId tenantId, EdgeId edgeId); + ListenableFuture findEdgeByIdAsync(TenantId tenantId, EdgeId edgeId); Edge findEdgeByTenantIdAndName(TenantId tenantId, String name); diff --git a/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerServiceImpl.java index b1b5c46479..2fcd9643c9 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerServiceImpl.java @@ -34,6 +34,7 @@ import org.thingsboard.server.common.data.tenant.profile.DefaultTenantProfileCon import org.thingsboard.server.dao.asset.AssetService; import org.thingsboard.server.dao.dashboard.DashboardService; import org.thingsboard.server.dao.device.DeviceService; +import org.thingsboard.server.dao.edge.EdgeService; import org.thingsboard.server.dao.entity.AbstractEntityService; import org.thingsboard.server.dao.entityview.EntityViewService; import org.thingsboard.server.dao.exception.DataValidationException; @@ -79,6 +80,9 @@ public class CustomerServiceImpl extends AbstractEntityService implements Custom @Autowired private DashboardService dashboardService; + @Autowired + private EdgeService edgeService; + @Autowired @Lazy private TbTenantProfileCache tenantProfileCache; diff --git a/dao/src/main/java/org/thingsboard/server/dao/edge/EdgeDao.java b/dao/src/main/java/org/thingsboard/server/dao/edge/EdgeDao.java index ecd13d9e80..fdaa6bf930 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/edge/EdgeDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/edge/EdgeDao.java @@ -42,6 +42,15 @@ public interface EdgeDao extends Dao { */ Edge save(TenantId tenantId, Edge edge); + /** + * Find edge info by id. + * + * @param tenantId the tenant id + * @param edgeId the edge id + * @return the edge info object + */ + EdgeInfo findEdgeInfoById(TenantId tenantId, UUID edgeId); + /** * Find edges by tenantId and page link. * diff --git a/dao/src/main/java/org/thingsboard/server/dao/edge/EdgeServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/edge/EdgeServiceImpl.java index 26a683b814..2215952694 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/edge/EdgeServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/edge/EdgeServiceImpl.java @@ -44,14 +44,7 @@ import org.thingsboard.server.common.data.User; import org.thingsboard.server.common.data.edge.Edge; import org.thingsboard.server.common.data.edge.EdgeInfo; import org.thingsboard.server.common.data.edge.EdgeSearchQuery; -import org.thingsboard.server.common.data.id.CustomerId; -import org.thingsboard.server.common.data.id.DashboardId; -import org.thingsboard.server.common.data.id.EdgeId; -import org.thingsboard.server.common.data.id.EntityId; -import org.thingsboard.server.common.data.id.IdBased; -import org.thingsboard.server.common.data.id.RuleChainId; -import org.thingsboard.server.common.data.id.TenantId; -import org.thingsboard.server.common.data.id.UserId; +import org.thingsboard.server.common.data.id.*; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.common.data.relation.EntityRelation; @@ -143,6 +136,13 @@ public class EdgeServiceImpl extends AbstractEntityService implements EdgeServic return edgeDao.findById(tenantId, edgeId.getId()); } + @Override + public EdgeInfo findEdgeInfoById(TenantId tenantId, EdgeId edgeId) { + log.trace("Executing findEdgeInfoById [{}]", edgeId); + validateId(edgeId, INCORRECT_EDGE_ID + edgeId); + return edgeDao.findEdgeInfoById(tenantId, edgeId.getId()); + } + @Override public ListenableFuture findEdgeByIdAsync(TenantId tenantId, EdgeId edgeId) { log.trace("Executing findEdgeById [{}]", edgeId); diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/edge/EdgeRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/edge/EdgeRepository.java index f194156d8f..c3a48bc304 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/edge/EdgeRepository.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/edge/EdgeRepository.java @@ -36,6 +36,12 @@ public interface EdgeRepository extends PagingAndSortingRepository findByTenantId(@Param("tenantId") UUID tenantId, diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/edge/JpaEdgeDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/edge/JpaEdgeDao.java index 5bc076c7af..3633c97ccb 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/edge/JpaEdgeDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/edge/JpaEdgeDao.java @@ -67,6 +67,11 @@ public class JpaEdgeDao extends JpaAbstractSearchTextDao imple return edgeRepository; } + @Override + public EdgeInfo findEdgeInfoById(TenantId tenantId, UUID edgeId) { + return DaoUtil.getData(edgeRepository.findEdgeInfoById(edgeId)); + } + @Override public PageData findEdgesByTenantId(UUID tenantId, PageLink pageLink) { return DaoUtil.toPageData( diff --git a/ui-ngx/proxy.conf.js b/ui-ngx/proxy.conf.js index a0881867ca..5be6bde1d1 100644 --- a/ui-ngx/proxy.conf.js +++ b/ui-ngx/proxy.conf.js @@ -14,8 +14,8 @@ * limitations under the License. */ -const forwardUrl = "http://localhost:8081"; -const wsForwardUrl = "ws://localhost:8081"; +const forwardUrl = "http://localhost:8080"; +const wsForwardUrl = "ws://localhost:8080"; const ruleNodeUiforwardUrl = forwardUrl; const PROXY_CONFIG = { diff --git a/ui-ngx/src/app/core/http/edge.service.ts b/ui-ngx/src/app/core/http/edge.service.ts index 775bdd83e9..f02d09147b 100644 --- a/ui-ngx/src/app/core/http/edge.service.ts +++ b/ui-ngx/src/app/core/http/edge.service.ts @@ -38,8 +38,12 @@ export class EdgeService { defaultHttpOptionsFromConfig(config)); } - public getEdge(edgeId: string, config?: RequestConfig): Observable { - return this.http.get(`/api/edge/${edgeId}`, defaultHttpOptionsFromConfig(config)); + public getEdge(edgeId: string, config?: RequestConfig): Observable { + return this.http.get(`/api/edge/${edgeId}`, defaultHttpOptionsFromConfig(config)); + } + + public getEdgeInfo(edgeId: string, config?: RequestConfig): Observable { + return this.http.get(`/api/edge/info/${edgeId}`, defaultHttpOptionsFromConfig(config)); } public saveEdge(edge: Edge, config?: RequestConfig): Observable { @@ -72,7 +76,7 @@ export class EdgeService { } public makeEdgePublic(edgeId: string, config?: RequestConfig): Observable { - return this.http.post(`/api/customer/public/edge/${edgeId}`, + return this.http.post(`/api/customer/public/edge/${edgeId}`, null, defaultHttpOptionsFromConfig(config)); } diff --git a/ui-ngx/src/app/modules/home/components/import-export/import-export.service.ts b/ui-ngx/src/app/modules/home/components/import-export/import-export.service.ts index 6cd1cf5a54..e8a94a52a7 100644 --- a/ui-ngx/src/app/modules/home/components/import-export/import-export.service.ts +++ b/ui-ngx/src/app/modules/home/components/import-export/import-export.service.ts @@ -415,7 +415,7 @@ export class ImportExportService { this.store.dispatch(new ActionNotificationShow( {message: this.translate.instant('rulechain.invalid-rulechain-type-error', { expectedRuleChainType: expectedRuleChainType }), type: 'error'})); - throw new Error('Invalid rule chain file'); + throw new Error('Invalid rule chain type'); } else { return this.ruleChainService.resolveRuleChainMetadata(ruleChainImport.metadata).pipe( map((resolvedMetadata) => { diff --git a/ui-ngx/src/app/modules/home/pages/edge/edge-routing.module.ts b/ui-ngx/src/app/modules/home/pages/edge/edge-routing.module.ts index adca2e34b1..53ba2902d8 100644 --- a/ui-ngx/src/app/modules/home/pages/edge/edge-routing.module.ts +++ b/ui-ngx/src/app/modules/home/pages/edge/edge-routing.module.ts @@ -27,9 +27,9 @@ import { RuleChainsTableConfigResolver } from "@home/pages/rulechain/rulechains- import { DashboardPageComponent } from "@home/pages/dashboard/dashboard-page.component"; import { dashboardBreadcumbLabelFunction, DashboardResolver } from "@home/pages/dashboard/dashboard-routing.module"; import { BreadCrumbConfig } from "@shared/components/breadcrumb"; -import {RuleChainPageComponent} from "@home/pages/rulechain/rulechain-page.component"; -import {ConfirmOnExitGuard} from "@core/guards/confirm-on-exit.guard"; -import {ruleChainType} from "@shared/models/rule-chain.models"; +import { RuleChainPageComponent } from "@home/pages/rulechain/rulechain-page.component"; +import { ConfirmOnExitGuard } from "@core/guards/confirm-on-exit.guard"; +import { ruleChainType } from "@shared/models/rule-chain.models"; import { importRuleChainBreadcumbLabelFunction, ResolvedRuleChainMetaDataResolver, diff --git a/ui-ngx/src/app/modules/home/pages/edge/edges-table-config.resolver.ts b/ui-ngx/src/app/modules/home/pages/edge/edges-table-config.resolver.ts index ba2a69ac6f..9fe8c9b77e 100644 --- a/ui-ngx/src/app/modules/home/pages/edge/edges-table-config.resolver.ts +++ b/ui-ngx/src/app/modules/home/pages/edge/edges-table-config.resolver.ts @@ -86,13 +86,13 @@ export class EdgesTableConfigResolver implements Resolve this.translate.instant('edge.delete-edges-title', {count}); this.config.deleteEntitiesContent = () => this.translate.instant('edge.delete-edges-text'); - this.config.loadEntity = id => this.edgeService.getEdge(id.id); + this.config.loadEntity = id => this.edgeService.getEdgeInfo(id.id); this.config.saveEntity = edge => { return this.edgeService.saveEdge(edge).pipe( tap(() => { this.broadcast.broadcast('edgeSaved'); }), - mergeMap((savedEdge) => this.edgeService.getEdge(savedEdge.id.id) + mergeMap((savedEdge) => this.edgeService.getEdgeInfo(savedEdge.id.id) )); }; this.config.onEntityAction = action => this.onEdgeAction(action); diff --git a/ui-ngx/src/app/modules/home/pages/rulechain/rulechains-table-config.resolver.ts b/ui-ngx/src/app/modules/home/pages/rulechain/rulechains-table-config.resolver.ts index 69efc2d7f2..c37659fbc4 100644 --- a/ui-ngx/src/app/modules/home/pages/rulechain/rulechains-table-config.resolver.ts +++ b/ui-ngx/src/app/modules/home/pages/rulechain/rulechains-table-config.resolver.ts @@ -45,7 +45,7 @@ import { AddEntitiesToEdgeDialogData } from "@home/dialogs/add-entities-to-edge-dialog.component"; import {MatDialog} from "@angular/material/dialog"; -import {isDefined, isUndefined} from "@core/utils"; +import {isUndefined} from "@core/utils"; import {PageLink} from "@shared/models/page/page-link"; import {Edge} from "@shared/models/edge.models"; @@ -490,17 +490,17 @@ export class RuleChainsTableConfigResolver implements Resolve