All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.scalecube.services.security.VaultServiceRolesProcessor Maven / Gradle / Ivy

The newest version!
package io.scalecube.services.security;

import io.scalecube.security.vault.VaultServiceRolesInstaller;
import io.scalecube.security.vault.VaultServiceRolesInstaller.ServiceRoles;
import io.scalecube.security.vault.VaultServiceRolesInstaller.ServiceRoles.Role;
import io.scalecube.services.auth.ServiceRolesProcessor;
import io.scalecube.services.methods.ServiceRoleDefinition;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.CompletableFuture;
import java.util.function.Supplier;

public class VaultServiceRolesProcessor implements ServiceRolesProcessor {

  private final String environment;
  private final String service;
  private final String vaultAddress;
  private final Supplier> vaultTokenSupplier;

  /**
   * Constructor.
   *
   * @param environment logical environment name
   * @param service logical service name
   * @param vaultAddress vaultAddress
   * @param vaultTokenSupplier vaultTokenSupplier
   */
  public VaultServiceRolesProcessor(
      String environment,
      String service,
      String vaultAddress,
      Supplier> vaultTokenSupplier) {
    this.environment = Objects.requireNonNull(environment, "environment");
    this.service = Objects.requireNonNull(service, "service");
    this.vaultAddress = Objects.requireNonNull(vaultAddress, "vaultAddress");
    this.vaultTokenSupplier = Objects.requireNonNull(vaultTokenSupplier, "vaultTokenSupplier");
  }

  @Override
  public void process(Collection values) {
    VaultServiceRolesInstaller.builder()
        .vaultAddress(vaultAddress)
        .vaultTokenSupplier(vaultTokenSupplier)
        .serviceRolesSources(List.of(() -> toServiceRoles(values)))
        .keyNameSupplier(() -> String.join(".", environment, "identity-key"))
        .roleNameBuilder(role -> String.join(".", environment, service, role))
        .build()
        .install();
  }

  private static ServiceRoles toServiceRoles(Collection values) {
    return new ServiceRoles()
        .roles(
            values.stream()
                .map(
                    roleDefinition -> {
                      final var role = new Role();
                      role.role(roleDefinition.role());
                      role.permissions(new ArrayList<>(roleDefinition.permissions()));
                      return role;
                    })
                .toList());
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy