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

io.camunda.tasklist.spring.TasklistClientConfiguration Maven / Gradle / Ivy

package io.camunda.tasklist.spring;

import com.fasterxml.jackson.databind.ObjectMapper;
import io.camunda.tasklist.CamundaTaskListClient;
import io.camunda.tasklist.CamundaTaskListClientProperties;
import io.camunda.tasklist.auth.Authentication;
import io.camunda.tasklist.auth.JwtAuthentication;
import io.camunda.tasklist.auth.JwtCredential;
import io.camunda.tasklist.auth.SimpleAuthentication;
import io.camunda.tasklist.auth.SimpleCredential;
import io.camunda.tasklist.auth.TokenResponseMapper.JacksonTokenResponseMapper;
import io.camunda.zeebe.client.ZeebeClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Import;

@EnableConfigurationProperties({TasklistClientConfigurationProperties.class})
@ConditionalOnProperty(value = "tasklist.client.enabled", matchIfMissing = true)
@Import(ObjectMapperConfiguration.class)
public class TasklistClientConfiguration {
  private final TasklistClientConfigurationProperties properties;
  private final ObjectMapper objectMapper;

  @Autowired
  public TasklistClientConfiguration(
      TasklistClientConfigurationProperties properties, ObjectMapper objectMapper) {
    this.properties = properties;
    this.objectMapper = objectMapper;
  }

  @Bean
  @ConditionalOnMissingBean
  public CamundaTaskListClient camundaTasklistClient(
      CamundaTaskListClientProperties properties,
      @Autowired(required = false) ZeebeClient zeebeClient) {
    return new CamundaTaskListClient(properties, zeebeClient);
  }

  @Bean
  @ConditionalOnMissingBean
  public CamundaTaskListClientProperties taskListClientProperties(Authentication authentication) {
    return new CamundaTaskListClientProperties(
        authentication,
        properties.baseUrl().toString(),
        properties.defaults().returnVariables(),
        properties.defaults().loadTruncatedVariables(),
        properties.defaults().useZeebeUserTasks());
  }

  @Bean
  @ConditionalOnMissingBean
  public Authentication authentication() {
    if (properties.profile() == null) {
      throw new IllegalStateException("'tasklist.client.profile' is required");
    }
    switch (properties.profile()) {
      case simple -> {
        return new SimpleAuthentication(
            new SimpleCredential(
                properties.username(),
                properties.password(),
                properties.baseUrl(),
                properties.sessionTimeout()));
      }
      case oidc, saas -> {
        return new JwtAuthentication(
            new JwtCredential(
                properties.clientId(),
                properties.clientSecret(),
                properties.audience(),
                properties.authUrl(),
                properties.scope()),
            new JacksonTokenResponseMapper(objectMapper));
      }
      default -> throw new IllegalStateException("Unsupported profile: " + properties.profile());
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy