-
-
Notifications
You must be signed in to change notification settings - Fork 7.5k
Ng galien claude/add clientregistrationid annotation rm tc0 #23807
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from all commits
8bc31c5
a0b7037
e711a8d
eca2bbb
4359711
51eb5a7
f960433
3d7e074
4f381a9
5f92145
bbeae12
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,12 @@ | ||
| generatorName: spring | ||
| library: spring-http-interface | ||
| outputDir: samples/client/petstore/spring-http-interface-oauth | ||
| inputSpec: modules/openapi-generator/src/test/resources/3_0/spring/petstore-with-fake-endpoints-models-for-testing.yaml | ||
| templateDir: modules/openapi-generator/src/main/resources/JavaSpring | ||
| additionalProperties: | ||
| artifactId: spring-http-interface-oauth | ||
| snapshotVersion: "true" | ||
| hideGenerationTimestamp: "true" | ||
| modelNameSuffix: 'Dto' | ||
| generatedConstructorWithRequiredArgs: "false" | ||
| clientRegistrationId: "petstore-oauth" |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,26 @@ | ||
| # OpenAPI Generator Ignore | ||
| # Generated by openapi-generator https://github.com/openapitools/openapi-generator | ||
|
|
||
| # Use this file to prevent files from being overwritten by the generator. | ||
| # The patterns follow closely to .gitignore or .dockerignore. | ||
|
|
||
| # As an example, the C# client generator defines ApiClient.cs. | ||
| # You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: | ||
| #ApiClient.cs | ||
|
|
||
| # You can match any string of characters against a directory, file or extension with a single asterisk (*): | ||
| #foo/*/qux | ||
| # The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux | ||
|
|
||
| # You can recursively match patterns against a directory, file or extension with a double asterisk (**): | ||
| #foo/**/qux | ||
| # This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux | ||
|
|
||
| # You can also negate patterns with an exclamation (!). | ||
| # For example, you can ignore all files in a docs folder with the file extension .md: | ||
| #docs/*.md | ||
| # Then explicitly reverse the ignore rule for a single file: | ||
| #!docs/README.md | ||
|
|
||
| # Preserve custom OAuth2 documentation | ||
| README.md |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,58 @@ | ||
| pom.xml | ||
| src/main/java/org/openapitools/api/AnotherFakeApi.java | ||
| src/main/java/org/openapitools/api/FakeApi.java | ||
| src/main/java/org/openapitools/api/FakeClassnameTags123Api.java | ||
| src/main/java/org/openapitools/api/PetApi.java | ||
| src/main/java/org/openapitools/api/StoreApi.java | ||
| src/main/java/org/openapitools/api/UserApi.java | ||
| src/main/java/org/openapitools/configuration/HttpInterfacesAbstractConfigurator.java | ||
| src/main/java/org/openapitools/model/AdditionalPropertiesAnyTypeDto.java | ||
| src/main/java/org/openapitools/model/AdditionalPropertiesArrayDto.java | ||
| src/main/java/org/openapitools/model/AdditionalPropertiesBooleanDto.java | ||
| src/main/java/org/openapitools/model/AdditionalPropertiesClassDto.java | ||
| src/main/java/org/openapitools/model/AdditionalPropertiesIntegerDto.java | ||
| src/main/java/org/openapitools/model/AdditionalPropertiesNumberDto.java | ||
| src/main/java/org/openapitools/model/AdditionalPropertiesObjectDto.java | ||
| src/main/java/org/openapitools/model/AdditionalPropertiesStringDto.java | ||
| src/main/java/org/openapitools/model/AnimalDto.java | ||
| src/main/java/org/openapitools/model/ApiResponseDto.java | ||
| src/main/java/org/openapitools/model/ArrayOfArrayOfNumberOnlyDto.java | ||
| src/main/java/org/openapitools/model/ArrayOfNumberOnlyDto.java | ||
| src/main/java/org/openapitools/model/ArrayTestDto.java | ||
| src/main/java/org/openapitools/model/BigCatDto.java | ||
| src/main/java/org/openapitools/model/CapitalizationDto.java | ||
| src/main/java/org/openapitools/model/CatDto.java | ||
| src/main/java/org/openapitools/model/CategoryDto.java | ||
| src/main/java/org/openapitools/model/ChildWithNullableDto.java | ||
| src/main/java/org/openapitools/model/ClassModelDto.java | ||
| src/main/java/org/openapitools/model/ClientDto.java | ||
| src/main/java/org/openapitools/model/ContainerDefaultValueDto.java | ||
| src/main/java/org/openapitools/model/DogDto.java | ||
| src/main/java/org/openapitools/model/EnumArraysDto.java | ||
| src/main/java/org/openapitools/model/EnumClassDto.java | ||
| src/main/java/org/openapitools/model/EnumTestDto.java | ||
| src/main/java/org/openapitools/model/FileDto.java | ||
| src/main/java/org/openapitools/model/FileSchemaTestClassDto.java | ||
| src/main/java/org/openapitools/model/FormatTestDto.java | ||
| src/main/java/org/openapitools/model/HasOnlyReadOnlyDto.java | ||
| src/main/java/org/openapitools/model/ListDto.java | ||
| src/main/java/org/openapitools/model/MapTestDto.java | ||
| src/main/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClassDto.java | ||
| src/main/java/org/openapitools/model/Model200ResponseDto.java | ||
| src/main/java/org/openapitools/model/NameDto.java | ||
| src/main/java/org/openapitools/model/NullableMapPropertyDto.java | ||
| src/main/java/org/openapitools/model/NumberOnlyDto.java | ||
| src/main/java/org/openapitools/model/OrderDto.java | ||
| src/main/java/org/openapitools/model/OuterCompositeDto.java | ||
| src/main/java/org/openapitools/model/OuterEnumDto.java | ||
| src/main/java/org/openapitools/model/ParentWithNullableDto.java | ||
| src/main/java/org/openapitools/model/PetDto.java | ||
| src/main/java/org/openapitools/model/ReadOnlyFirstDto.java | ||
| src/main/java/org/openapitools/model/ResponseObjectWithDifferentFieldNamesDto.java | ||
| src/main/java/org/openapitools/model/ReturnDto.java | ||
| src/main/java/org/openapitools/model/SpecialModelNameDto.java | ||
| src/main/java/org/openapitools/model/TagDto.java | ||
| src/main/java/org/openapitools/model/TypeHolderDefaultDto.java | ||
| src/main/java/org/openapitools/model/TypeHolderExampleDto.java | ||
| src/main/java/org/openapitools/model/UserDto.java | ||
| src/main/java/org/openapitools/model/XmlItemDto.java |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| 7.23.0-SNAPSHOT |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,108 @@ | ||
| # Spring HTTP Interface with OAuth2 (@ClientRegistrationId) | ||
|
|
||
| This sample demonstrates the use of the `@ClientRegistrationId` annotation with Spring HTTP Interface clients. | ||
|
|
||
| ## Overview | ||
|
|
||
| This code was generated by the [OpenAPI Generator](https://openapi-generator.tech) project. | ||
| When generating Spring HTTP Interface clients, you can specify a `clientRegistrationId` parameter to automatically add the `@ClientRegistrationId` annotation to all generated API interfaces. | ||
|
|
||
| ## Configuration | ||
|
|
||
| Add the `clientRegistrationId` property to your generator configuration: | ||
|
|
||
| ```yaml | ||
| generatorName: spring | ||
| library: spring-http-interface | ||
| additionalProperties: | ||
| clientRegistrationId: "petstore-oauth" | ||
| ``` | ||
|
|
||
| Or via command line: | ||
|
|
||
| ```bash | ||
| openapi-generator-cli generate \ | ||
| -g spring \ | ||
| --library spring-http-interface \ | ||
| --additional-properties clientRegistrationId=petstore-oauth \ | ||
| -i petstore.yaml \ | ||
| -o ./output | ||
| ``` | ||
|
|
||
| ## Generated Code | ||
|
|
||
| The generated interface will include the `@ClientRegistrationId` annotation at the class level: | ||
|
|
||
| ```java | ||
| @ClientRegistrationId("petstore-oauth") | ||
| public interface PetApi { | ||
|
|
||
| @HttpExchange( | ||
| method = "GET", | ||
| value = "/pet/{petId}", | ||
| accept = { "application/json" } | ||
| ) | ||
| ResponseEntity<PetDto> getPetById(@PathVariable("petId") Long petId); | ||
| } | ||
| ``` | ||
|
|
||
| ## Spring Security Integration | ||
|
|
||
| This annotation is part of Spring Security's OAuth2 integration for HTTP Service Clients. It automatically associates OAuth2 tokens with HTTP requests. | ||
|
|
||
| ### Requirements | ||
|
|
||
| - Spring Boot 3.5+ | ||
| - Spring Security 6.5+ | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. P2: The documented minimum Spring Security version is incorrect for Prompt for AI agents |
||
|
|
||
| ### Application Properties | ||
|
|
||
| Configure your Spring application with the OAuth2 client registration: | ||
|
|
||
| ```yaml | ||
| spring: | ||
| security: | ||
| oauth2: | ||
| client: | ||
| registration: | ||
| petstore-oauth: | ||
| client-id: your-client-id | ||
| client-secret: your-client-secret | ||
| authorization-grant-type: client_credentials | ||
| scope: read,write | ||
| provider: | ||
| petstore-oauth: | ||
| token-uri: https://auth.example.com/oauth/token | ||
| ``` | ||
|
|
||
| ### Bean Configuration | ||
|
|
||
| Configure your HTTP Interface beans with OAuth2 support using `RestClient` and the `OAuth2ClientHttpRequestInterceptor`: | ||
|
|
||
| ```java | ||
| @Configuration | ||
| public class HttpInterfaceConfig { | ||
|
|
||
| @Bean | ||
| public PetApi petApi(RestClient.Builder builder, OAuth2AuthorizedClientManager authorizedClientManager) { | ||
| OAuth2ClientHttpRequestInterceptor interceptor = | ||
| new OAuth2ClientHttpRequestInterceptor(authorizedClientManager); | ||
|
|
||
| RestClient restClient = builder | ||
| .baseUrl("https://petstore.example.com/v2") | ||
| .requestInterceptor(interceptor) | ||
| .build(); | ||
|
|
||
| HttpServiceProxyFactory factory = HttpServiceProxyFactory | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. P2: The configuration example is incomplete for Prompt for AI agents |
||
| .builderFor(RestClientAdapter.create(restClient)) | ||
| .build(); | ||
|
|
||
| return factory.createClient(PetApi.class); | ||
| } | ||
| } | ||
| ``` | ||
|
|
||
| ## References | ||
|
|
||
| - [Spring Security HTTP Service Client Integration](https://docs.spring.io/spring-security/reference/servlet/oauth2/client/http-service-client.html) | ||
| - [Spring Framework HTTP Interface](https://docs.spring.io/spring-framework/reference/integration/rest-clients.html#rest-http-interface) | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
looks like updating this will break current supported use cases: https://github.com/OpenAPITools/openapi-generator/actions/runs/26022364837/job/76486919726?pr=23807
so i suggest we update this and address any broken code in a separate PR instead.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
update: filed #23809 to update it and the templates (which broke) as well and all tests passed