diff --git a/src/main/java/com/twilio/http/bearertoken/ApiTokenManager.java b/src/main/java/com/twilio/http/bearertoken/ApiTokenManager.java index cb3eda1d0e..b378e0288b 100644 --- a/src/main/java/com/twilio/http/bearertoken/ApiTokenManager.java +++ b/src/main/java/com/twilio/http/bearertoken/ApiTokenManager.java @@ -20,7 +20,8 @@ public class ApiTokenManager implements TokenManager { @Override public String fetchAccessToken() { - TokenCreator tokenCreator = Token.creator().setGrantType(grantType).setClientId(clientId).setClientSecret(clientSecret); + TokenCreator tokenCreator = Token.creator(grantType).setClientId(clientId).setClientSecret(clientSecret); + if (this.code != null) tokenCreator.setCode(code); if (this.redirectUri != null) tokenCreator.setRedirectUri(redirectUri); if (this.audience != null) tokenCreator.setAudience(audience); diff --git a/src/main/java/com/twilio/http/bearertoken/OrgsTokenManager.java b/src/main/java/com/twilio/http/bearertoken/OrgsTokenManager.java index 8eb9476add..3125c15059 100644 --- a/src/main/java/com/twilio/http/bearertoken/OrgsTokenManager.java +++ b/src/main/java/com/twilio/http/bearertoken/OrgsTokenManager.java @@ -34,7 +34,7 @@ public OrgsTokenManager(String grantType, String clientId, String clientSecret, } public synchronized String fetchAccessToken(){ - TokenCreator tokenCreator = Token.creator().setGrantType(grantType).setClientId(clientId).setClientSecret(clientSecret); + TokenCreator tokenCreator = Token.creator(grantType).setClientId(clientId).setClientSecret(clientSecret); if (this.code != null) tokenCreator.setCode(code); if (this.redirectUri != null) tokenCreator.setRedirectUri(redirectUri); if (this.audience != null) tokenCreator.setAudience(audience); diff --git a/src/main/java/com/twilio/rest/oauth/v2/Authorize.java b/src/main/java/com/twilio/rest/oauth/v2/Authorize.java index 8d1e34ea76..7803859a8c 100644 --- a/src/main/java/com/twilio/rest/oauth/v2/Authorize.java +++ b/src/main/java/com/twilio/rest/oauth/v2/Authorize.java @@ -17,6 +17,7 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonValue; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.core.JsonProcessingException; @@ -24,6 +25,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.twilio.base.Resource; import com.twilio.base.Resource; +import com.twilio.converter.Promoter; import com.twilio.exception.ApiConnectionException; import com.twilio.exception.ApiException; import com.twilio.type.*; @@ -43,6 +45,26 @@ public static AuthorizeFetcher fetcher() { return new AuthorizeFetcher(); } + public enum CodeChallengeMethod { + S256("S256"); + + private final String value; + + private CodeChallengeMethod(final String value) { + this.value = value; + } + + @JsonValue + public String toString() { + return value; + } + + @JsonCreator + public static CodeChallengeMethod forValue(final String value) { + return Promoter.enumFromString(value, CodeChallengeMethod.values()); + } + } + /** * Converts a JSON String into a Authorize object using the provided ObjectMapper. * diff --git a/src/main/java/com/twilio/rest/oauth/v2/AuthorizeFetcher.java b/src/main/java/com/twilio/rest/oauth/v2/AuthorizeFetcher.java index 81b4bb81e5..c2a3703664 100644 --- a/src/main/java/com/twilio/rest/oauth/v2/AuthorizeFetcher.java +++ b/src/main/java/com/twilio/rest/oauth/v2/AuthorizeFetcher.java @@ -37,6 +37,8 @@ public class AuthorizeFetcher extends Fetcher { private String redirectUri; private String scope; private String state; + private String codeChallenge; + private Authorize.CodeChallengeMethod codeChallengeMethod; public AuthorizeFetcher() {} @@ -65,6 +67,18 @@ public AuthorizeFetcher setState(final String state) { return this; } + public AuthorizeFetcher setCodeChallenge(final String codeChallenge) { + this.codeChallenge = codeChallenge; + return this; + } + + public AuthorizeFetcher setCodeChallengeMethod( + final Authorize.CodeChallengeMethod codeChallengeMethod + ) { + this.codeChallengeMethod = codeChallengeMethod; + return this; + } + private Response makeRequest(final TwilioRestClient client) { String path = "/v2/authorize"; @@ -159,5 +173,23 @@ private void addQueryParams(final Request request) { if (state != null) { Serializer.toString(request, "state", state, ParameterType.QUERY); } + + if (codeChallenge != null) { + Serializer.toString( + request, + "code_challenge", + codeChallenge, + ParameterType.QUERY + ); + } + + if (codeChallengeMethod != null) { + Serializer.toString( + request, + "code_challenge_method", + codeChallengeMethod, + ParameterType.QUERY + ); + } } } diff --git a/src/main/java/com/twilio/rest/oauth/v2/Token.java b/src/main/java/com/twilio/rest/oauth/v2/Token.java index cabcfd643b..e3e8530a44 100644 --- a/src/main/java/com/twilio/rest/oauth/v2/Token.java +++ b/src/main/java/com/twilio/rest/oauth/v2/Token.java @@ -38,8 +38,8 @@ @ToString public class Token extends Resource { - public static TokenCreator creator() { - return new TokenCreator(); + public static TokenCreator creator(final String grantType) { + return new TokenCreator(grantType); } /** diff --git a/src/main/java/com/twilio/rest/oauth/v2/TokenCreator.java b/src/main/java/com/twilio/rest/oauth/v2/TokenCreator.java index 371816e356..50d241dfb8 100644 --- a/src/main/java/com/twilio/rest/oauth/v2/TokenCreator.java +++ b/src/main/java/com/twilio/rest/oauth/v2/TokenCreator.java @@ -42,8 +42,11 @@ public class TokenCreator extends Creator { private String audience; private String refreshToken; private String scope; + private String codeVerifier; - public TokenCreator() {} + public TokenCreator(final String grantType) { + this.grantType = grantType; + } public TokenCreator setGrantType(final String grantType) { this.grantType = grantType; @@ -85,6 +88,11 @@ public TokenCreator setScope(final String scope) { return this; } + public TokenCreator setCodeVerifier(final String codeVerifier) { + this.codeVerifier = codeVerifier; + return this; + } + public TokenCreator setAccountSid(final String accountSid) { this.accountSid = accountSid; return this; @@ -231,5 +239,14 @@ private void addPostParams(final Request request) { ParameterType.URLENCODED ); } + + if (codeVerifier != null) { + Serializer.toString( + request, + "code_verifier", + codeVerifier, + ParameterType.URLENCODED + ); + } } }