Skip to content

Commit 599f5d4

Browse files
committed
feat(ticketing-eai/client-internal): add autoconfiguration and properties
1 parent 7be672f commit 599f5d4

File tree

4 files changed

+106
-0
lines changed

4 files changed

+106
-0
lines changed

ticketing-eai/api-client-internal/pom.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,15 @@
5959
<groupId>org.springframework.boot</groupId>
6060
<artifactId>spring-boot-starter-validation</artifactId>
6161
</dependency>
62+
<dependency>
63+
<groupId>org.springframework.security</groupId>
64+
<artifactId>spring-security-oauth2-client</artifactId>
65+
</dependency>
66+
<dependency>
67+
<groupId>org.springframework.boot</groupId>
68+
<artifactId>spring-boot-configuration-processor</artifactId>
69+
<optional>true</optional>
70+
</dependency>
6271

6372
<!-- openApi -->
6473
<dependency>
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package de.muenchen.oss.dbs.ticketing.eai.client;
2+
3+
import de.muenchen.oss.dbs.ticketing.eai.client.api.ArticlesApi;
4+
import de.muenchen.oss.dbs.ticketing.eai.client.api.OrganizationsApi;
5+
import de.muenchen.oss.dbs.ticketing.eai.client.api.TicketsApi;
6+
import de.muenchen.oss.dbs.ticketing.eai.client.api.UsersApi;
7+
import org.springframework.boot.autoconfigure.AutoConfiguration;
8+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
9+
import org.springframework.boot.context.properties.EnableConfigurationProperties;
10+
import org.springframework.context.annotation.Bean;
11+
import org.springframework.security.oauth2.client.AuthorizedClientServiceOAuth2AuthorizedClientManager;
12+
import org.springframework.security.oauth2.client.OAuth2AuthorizedClientService;
13+
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
14+
import org.springframework.security.oauth2.client.web.reactive.function.client.ServletOAuth2AuthorizedClientExchangeFilterFunction;
15+
import org.springframework.web.reactive.function.client.WebClient;
16+
17+
@AutoConfiguration
18+
@EnableConfigurationProperties({ApiClientProperties.class})
19+
public class ApiClientAutoConfiguration {
20+
@Bean
21+
@ConditionalOnMissingBean
22+
public ApiClient apiClient(final ApiClientProperties apiClientProperties,
23+
final ClientRegistrationRepository clientRegistrationRepository,
24+
final OAuth2AuthorizedClientService authorizedClientService) {
25+
final ServletOAuth2AuthorizedClientExchangeFilterFunction oauth = new ServletOAuth2AuthorizedClientExchangeFilterFunction(
26+
new AuthorizedClientServiceOAuth2AuthorizedClientManager(
27+
clientRegistrationRepository, authorizedClientService));
28+
oauth.setDefaultClientRegistrationId(apiClientProperties.getOauthClientRegistration());
29+
final WebClient webClient = ApiClient.buildWebClientBuilder()
30+
.apply(oauth.oauth2Configuration())
31+
.build();
32+
final ApiClient apiClient = new ApiClient(webClient);
33+
apiClient.setBasePath(apiClientProperties.getEaiBaseUrl());
34+
return apiClient;
35+
}
36+
37+
@Bean
38+
@ConditionalOnMissingBean
39+
public TicketsApi ticketsApi(final ApiClient apiClient) {
40+
return new TicketsApi(apiClient);
41+
}
42+
43+
@Bean
44+
@ConditionalOnMissingBean
45+
public ArticlesApi articlesApi(final ApiClient apiClient) {
46+
return new ArticlesApi(apiClient);
47+
}
48+
49+
@Bean
50+
@ConditionalOnMissingBean
51+
public OrganizationsApi organizationsApi(final ApiClient apiClient) {
52+
return new OrganizationsApi(apiClient);
53+
}
54+
55+
@Bean
56+
@ConditionalOnMissingBean
57+
public UsersApi usersApi(final ApiClient apiClient) {
58+
return new UsersApi(apiClient);
59+
}
60+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package de.muenchen.oss.dbs.ticketing.eai.client;
2+
3+
import jakarta.validation.constraints.NotBlank;
4+
import org.springframework.boot.context.properties.ConfigurationProperties;
5+
import org.springframework.validation.annotation.Validated;
6+
7+
@ConfigurationProperties("dbs.eai.client")
8+
@Validated
9+
public class ApiClientProperties {
10+
/**
11+
* Base URL of the ticket-eai-service to make API calls against.
12+
*/
13+
@NotBlank
14+
private String eaiBaseUrl;
15+
/**
16+
* Name of the client registration configured via Spring oAuth client to use for authenticating API requests.
17+
*/
18+
@NotBlank
19+
private String oauthClientRegistration = "zammad";
20+
21+
public String getEaiBaseUrl() {
22+
return eaiBaseUrl;
23+
}
24+
25+
public void setEaiBaseUrl(String eaiBaseUrl) {
26+
this.eaiBaseUrl = eaiBaseUrl;
27+
}
28+
29+
public String getOauthClientRegistration() {
30+
return oauthClientRegistration;
31+
}
32+
33+
public void setOauthClientRegistration(String oauthClientRegistration) {
34+
this.oauthClientRegistration = oauthClientRegistration;
35+
}
36+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
de.muenchen.oss.dbs.ticketing.eai.client.ApiClientAutoConfiguration

0 commit comments

Comments
 (0)