public Optional requestPermissionForBeats()

in service/src/main/java/org/apache/fineract/cn/rhythm/service/internal/service/BeatPublisherService.java [92:119]


  public Optional<String> requestPermissionForBeats(final String tenantIdentifier, final String applicationIdentifier) {
    try (final AutoTenantContext ignored = new AutoTenantContext(tenantIdentifier)) {
      try (final AutoUserContext ignored2 = new AutoUserContext(properties.getUser(), "")) {
        logger.info("Requesting permission to send beats to application '{}' under tenant '{}'.", applicationIdentifier, tenantIdentifier);

        final String consumerPermittableGroupIdentifier = PermittableGroupIds.forApplication(applicationIdentifier);
        final Permission publishBeatPermission = new Permission();
        publishBeatPermission.setAllowedOperations(Collections.singleton(AllowedOperation.CHANGE));
        publishBeatPermission.setPermittableEndpointGroupIdentifier(consumerPermittableGroupIdentifier);
        try {
          applicationPermissionRequestCreator.createApplicationPermission(rhythmApplicationName.toString(), publishBeatPermission);
          logger.debug("Successfully requested permission to send beats to application '{}' under tenant '{}'.", applicationIdentifier, tenantIdentifier);
        }
        catch (final InvalidTokenException e) {
          logger.error("Failed to request permission for application {}, in tenant {} because rhythm does not have permission to access identity.", applicationIdentifier, tenantIdentifier, e);
        }
        catch (final ApplicationPermissionAlreadyExistsException e) {
          logger.debug("Failed to request permission for application {}, in tenant {} because the request already exists. {} was thrown.", applicationIdentifier, tenantIdentifier, e);
        }

        return Optional.of(consumerPermittableGroupIdentifier);
      }
    }
    catch (final Throwable e) {
      logger.warn("Failed to request permission for application {}, in tenant {}.", applicationIdentifier, tenantIdentifier, e);
      return Optional.empty();
    }
  }