/** Get authenticator provider's configuration description */
  @Path("config-description/{providerId}")
  @GET
  @Produces(MediaType.APPLICATION_JSON)
  @NoCache
  public AuthenticatorConfigInfoRepresentation getAuthenticatorConfigDescription(
      @PathParam("providerId") String providerId) {
    auth.requireView();

    ConfigurableAuthenticatorFactory factory =
        CredentialHelper.getConfigurableAuthenticatorFactory(session, providerId);
    if (factory == null) {
      throw new NotFoundException("Could not find authenticator provider");
    }
    AuthenticatorConfigInfoRepresentation rep = new AuthenticatorConfigInfoRepresentation();
    rep.setProviderId(providerId);
    rep.setName(factory.getDisplayType());
    rep.setHelpText(factory.getHelpText());
    rep.setProperties(new LinkedList<ConfigPropertyRepresentation>());
    List<ProviderConfigProperty> configProperties = factory.getConfigProperties();
    for (ProviderConfigProperty prop : configProperties) {
      ConfigPropertyRepresentation propRep = getConfigPropertyRep(prop);
      rep.getProperties().add(propRep);
    }
    return rep;
  }
  public List<Map<String, Object>> buildProviderMetadata(List<ProviderFactory> factories) {
    List<Map<String, Object>> providers = new LinkedList<>();
    for (ProviderFactory factory : factories) {
      Map<String, Object> data = new HashMap<>();
      data.put("id", factory.getId());
      ConfigurableAuthenticatorFactory configured = (ConfigurableAuthenticatorFactory) factory;
      data.put("description", configured.getHelpText());
      data.put("displayName", configured.getDisplayType());

      providers.add(data);
    }
    return providers;
  }