@Override public Future<AuthenticatedValue> updateUnitConfigAuthenticated(final AuthenticatedValue authenticatedValue) throws CouldNotPerformException { return GlobalCachedExecutorService.submit(() -> { return AuthenticatedServiceProcessor.authenticatedAction(authenticatedValue, getAuthorizationGroupUnitConfigRegistry().getEntryMap(), getLocationUnitConfigRegistry().getEntryMap(), UnitConfig.class, (UnitConfig unitConfig) -> getUnitConfigRegistry(unitConfig.getType()).update(unitConfig), (UnitConfig unitConfig) -> getUnitConfigById(unitConfig.getId()) ); }); }
@Override public Future<AuthenticatedValue> removeUnitConfigAuthenticated(final AuthenticatedValue authenticatedValue) throws CouldNotPerformException { return GlobalCachedExecutorService.submit(() -> { return AuthenticatedServiceProcessor.authenticatedAction(authenticatedValue, getAuthorizationGroupUnitConfigRegistry().getEntryMap(), getLocationUnitConfigRegistry().getEntryMap(), UnitConfig.class, (UnitConfig unitConfig) -> getUnitConfigRegistry(unitConfig.getType()).remove(unitConfig), (UnitConfig unitConfig) -> getUnitConfigById(unitConfig.getId()) ); }); }
@Override public void processData(String id, IdentifiableMessage<String, UnitConfig, UnitConfig.Builder> entry, ProtoBufMessageMap<String, UnitConfig, UnitConfig.Builder> entryMap, ProtoBufRegistry<String, UnitConfig, UnitConfig.Builder> registry) throws CouldNotPerformException, EntryModification { UnitConfig.Builder unitConfig = entry.getMessage().toBuilder(); if (unitConfig.hasPermissionConfig()) { PermissionConfig.Builder permissionConfig = unitConfig.getPermissionConfigBuilder(); boolean modification = false; // fill other permission fields that are not set if (!permissionIsEmpty(permissionConfig.getOtherPermission())) { Permission otherPermission = AuthorizationHelper.getPermission(entry.getMessage(), null, authorizationGroupConfigRegistry.getEntryMap(), locationConfigRegistry.getEntryMap()); modification = fillEmptyPermissions(permissionConfig.getOtherPermissionBuilder(), otherPermission) || modification; } // fill owner permissions which are not set if (!permissionIsEmpty(permissionConfig.getOwnerPermission())) { Permission ownerPermission = AuthorizationHelper.getPermission(entry.getMessage(), permissionConfig.getOwnerId(), authorizationGroupConfigRegistry.getEntryMap(), locationConfigRegistry.getEntryMap()); modification = fillEmptyPermissions(permissionConfig.getOwnerPermissionBuilder(), ownerPermission) || modification; } // clean empty permission configs if (permissionIsEmpty(permissionConfig.getOtherPermission()) && permissionIsEmpty(permissionConfig.getOwnerPermission()) && permissionConfig.getGroupPermissionList().isEmpty()) { unitConfig.clearPermissionConfig(); modification = true; } if (modification) { throw new EntryModification(entry.setMessage(unitConfig), this); } } }
@Override public Future<AuthenticatedValue> registerUnitConfigAuthenticated(final AuthenticatedValue authenticatedValue) throws CouldNotPerformException { return GlobalCachedExecutorService.submit(() -> { return AuthenticatedServiceProcessor.authenticatedAction(authenticatedValue, getAuthorizationGroupUnitConfigRegistry().getEntryMap(), getLocationUnitConfigRegistry().getEntryMap(), UnitConfig.class, (UnitConfig unitConfig) -> getUnitConfigRegistry(unitConfig.getType()).register(unitConfig), (UnitConfig unitConfig) -> { // If the unit has a location, use the location's UnitConfig for the permissions. if (unitConfig.hasPlacementConfig() && unitConfig.getPlacementConfig().hasLocationId()) { return getLocationUnitConfigRegistry().getMessage(unitConfig.getPlacementConfig().getLocationId()); } // Else, user the permission for the root location UnitConfig rootLocation = null; for (UnitConfig locationUnitConfig : getLocationUnitConfigRegistry().getMessages()) { if (locationUnitConfig.getLocationConfig().getRoot()) { rootLocation = locationUnitConfig; break; } } if (rootLocation == null) { // no root location yet available so use all rights PermissionConfig.Builder permissionConfig = PermissionConfig.newBuilder(); permissionConfig.setOtherPermission(Permission.newBuilder().setAccess(true).setRead(true).setWrite(true)); rootLocation = UnitConfig.newBuilder().setPermissionConfig(permissionConfig).build(); } return rootLocation; } ); }); }