Skip to content

Commit

Permalink
Add support for a token supplier to OAuth based RestClient clients. (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
twonky4 authored Oct 31, 2024
1 parent acb1641 commit c70b078
Show file tree
Hide file tree
Showing 5 changed files with 142 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,49 @@

package {{invokerPackage}}.auth;

import java.util.Optional;
import java.util.function.Supplier;
import org.springframework.http.HttpHeaders;
import org.springframework.util.MultiValueMap;

/**
* Provides support for RFC 6750 - Bearer Token usage for OAUTH 2.0 Authorization.
*/
{{>generatedAnnotation}}
public class OAuth implements Authentication {
private String accessToken;
private Supplier<String> tokenSupplier;
/**
* Returns the bearer token used for Authorization.
*
* @return The bearer token
*/
public String getAccessToken() {
return accessToken;
return tokenSupplier.get();
}

/**
* Sets the bearer access token used for Authorization.
*
* @param accessToken The bearer token to send in the Authorization header
*/
public void setAccessToken(String accessToken) {
this.accessToken = accessToken;
setAccessToken(() -> accessToken);
}

/**
* Sets the supplier of bearer tokens used for Authorization.
*
* @param tokenSupplier The supplier of bearer tokens to send in the Authorization header
*/
public void setAccessToken(Supplier<String> tokenSupplier) {
this.tokenSupplier = tokenSupplier;
}

@Override
public void applyToParams(MultiValueMap<String, String> queryParams, HttpHeaders headerParams, MultiValueMap<String, String> cookieParams) {
if (accessToken != null) {
headerParams.add(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken);
}
Optional.ofNullable(tokenSupplier).map(Supplier::get).ifPresent(accessToken ->
headerParams.add(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken)
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2963,7 +2963,7 @@ void shouldGenerateCorrectJaxbAnnotations(Library library) {


@Test
public void shouldGenerateOAuthTokenSuppliers() {
public void testRestTemplateWithGeneratedOAuthTokenSuppliers() {

final Map<String, File> files = generateFromContract(
"src/test/resources/3_0/java/oauth.yaml",
Expand Down Expand Up @@ -2994,6 +2994,27 @@ public void shouldGenerateOAuthTokenSuppliers() {

}

@Test
public void testRestClientWithGeneratedOAuthTokenSuppliers() {
final Map<String, File> files = generateFromContract(
"src/test/resources/3_0/java/oauth.yaml",
JavaClientCodegen.RESTCLIENT
);

final JavaFileAssert oAuth = JavaFileAssert.assertThat(files.get("OAuth.java"))
.printFileContent();
oAuth
.assertMethod("setAccessToken", "String")
.bodyContainsLines("setAccessToken(() -> accessToken);");
oAuth
.assertMethod("setAccessToken", "Supplier<String>")
.bodyContainsLines("this.tokenSupplier = tokenSupplier;");
oAuth
.assertMethod("applyToParams")
.bodyContainsLines("Optional.ofNullable(tokenSupplier).map(Supplier::get).ifPresent(accessToken ->")
.bodyContainsLines("headerParams.add(HttpHeaders.AUTHORIZATION, \"Bearer \" + accessToken)");
}

@Test public void testRestClientWithXML_issue_19137() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,25 +13,49 @@

package org.openapitools.client.auth;

import java.util.Optional;
import java.util.function.Supplier;
import org.springframework.http.HttpHeaders;
import org.springframework.util.MultiValueMap;

/**
* Provides support for RFC 6750 - Bearer Token usage for OAUTH 2.0 Authorization.
*/
@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.10.0-SNAPSHOT")
public class OAuth implements Authentication {
private String accessToken;
private Supplier<String> tokenSupplier;

/**
* Returns the bearer token used for Authorization.
*
* @return The bearer token
*/
public String getAccessToken() {
return accessToken;
return tokenSupplier.get();
}

/**
* Sets the bearer access token used for Authorization.
*
* @param accessToken The bearer token to send in the Authorization header
*/
public void setAccessToken(String accessToken) {
this.accessToken = accessToken;
setAccessToken(() -> accessToken);
}

/**
* Sets the supplier of bearer tokens used for Authorization.
*
* @param tokenSupplier The supplier of bearer tokens to send in the Authorization header
*/
public void setAccessToken(Supplier<String> tokenSupplier) {
this.tokenSupplier = tokenSupplier;
}

@Override
public void applyToParams(MultiValueMap<String, String> queryParams, HttpHeaders headerParams, MultiValueMap<String, String> cookieParams) {
if (accessToken != null) {
headerParams.add(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken);
}
Optional.ofNullable(tokenSupplier).map(Supplier::get).ifPresent(accessToken ->
headerParams.add(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken)
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,25 +13,49 @@

package org.openapitools.client.auth;

import java.util.Optional;
import java.util.function.Supplier;
import org.springframework.http.HttpHeaders;
import org.springframework.util.MultiValueMap;

/**
* Provides support for RFC 6750 - Bearer Token usage for OAUTH 2.0 Authorization.
*/
@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.10.0-SNAPSHOT")
public class OAuth implements Authentication {
private String accessToken;
private Supplier<String> tokenSupplier;

/**
* Returns the bearer token used for Authorization.
*
* @return The bearer token
*/
public String getAccessToken() {
return accessToken;
return tokenSupplier.get();
}

/**
* Sets the bearer access token used for Authorization.
*
* @param accessToken The bearer token to send in the Authorization header
*/
public void setAccessToken(String accessToken) {
this.accessToken = accessToken;
setAccessToken(() -> accessToken);
}

/**
* Sets the supplier of bearer tokens used for Authorization.
*
* @param tokenSupplier The supplier of bearer tokens to send in the Authorization header
*/
public void setAccessToken(Supplier<String> tokenSupplier) {
this.tokenSupplier = tokenSupplier;
}

@Override
public void applyToParams(MultiValueMap<String, String> queryParams, HttpHeaders headerParams, MultiValueMap<String, String> cookieParams) {
if (accessToken != null) {
headerParams.add(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken);
}
Optional.ofNullable(tokenSupplier).map(Supplier::get).ifPresent(accessToken ->
headerParams.add(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken)
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,25 +13,49 @@

package org.openapitools.client.auth;

import java.util.Optional;
import java.util.function.Supplier;
import org.springframework.http.HttpHeaders;
import org.springframework.util.MultiValueMap;

/**
* Provides support for RFC 6750 - Bearer Token usage for OAUTH 2.0 Authorization.
*/
@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.10.0-SNAPSHOT")
public class OAuth implements Authentication {
private String accessToken;
private Supplier<String> tokenSupplier;

/**
* Returns the bearer token used for Authorization.
*
* @return The bearer token
*/
public String getAccessToken() {
return accessToken;
return tokenSupplier.get();
}

/**
* Sets the bearer access token used for Authorization.
*
* @param accessToken The bearer token to send in the Authorization header
*/
public void setAccessToken(String accessToken) {
this.accessToken = accessToken;
setAccessToken(() -> accessToken);
}

/**
* Sets the supplier of bearer tokens used for Authorization.
*
* @param tokenSupplier The supplier of bearer tokens to send in the Authorization header
*/
public void setAccessToken(Supplier<String> tokenSupplier) {
this.tokenSupplier = tokenSupplier;
}

@Override
public void applyToParams(MultiValueMap<String, String> queryParams, HttpHeaders headerParams, MultiValueMap<String, String> cookieParams) {
if (accessToken != null) {
headerParams.add(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken);
}
Optional.ofNullable(tokenSupplier).map(Supplier::get).ifPresent(accessToken ->
headerParams.add(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken)
);
}
}

0 comments on commit c70b078

Please sign in to comment.