in core/src/main/java/com/microsoft/alm/auth/oauth/AzureAuthority.java [84:131]
static URI createAuthorizationEndpointUri(final String authorityHostUrl, final String resource, final String clientId,
final URI redirectUri, final UserIdentifier userId, final String state,
final PromptBehavior promptBehavior, final String queryParameters) {
final QueryString qs = new QueryString();
qs.put(OAuthParameter.RESOURCE, resource);
qs.put(OAuthParameter.CLIENT_ID, clientId);
qs.put(OAuthParameter.RESPONSE_TYPE, OAuthParameter.CODE);
qs.put(OAuthParameter.REDIRECT_URI, redirectUri.toString());
if (!userId.isAnyUser()
&& (userId.getType() == UserIdentifierType.OPTIONAL_DISPLAYABLE_ID
|| userId.getType() == UserIdentifierType.REQUIRED_DISPLAYABLE_ID)) {
qs.put(OAuthParameter.LOGIN_HINT, userId.getId());
}
if (state != null) {
qs.put(OAuthParameter.STATE, state);
}
String promptValue = null;
switch (promptBehavior) {
case ALWAYS:
promptValue = PromptValue.LOGIN;
break;
case NEVER:
promptValue = PromptValue.ATTEMPT_NONE;
break;
}
if (promptValue != null) {
qs.put(OAuthParameter.PROMPT, promptValue);
}
final StringBuilder sb = new StringBuilder(authorityHostUrl);
sb.append("/oauth2/authorize?");
sb.append(qs.toString());
if (!StringHelper.isNullOrWhiteSpace(queryParameters)) {
// TODO: 449282: ADAL.NET checks if queryParameters contains any duplicate parameters
int start = (queryParameters.charAt(0) == '&') ? 1 : 0;
sb.append('&').append(queryParameters, start, queryParameters.length());
}
final URI result;
try {
result = new URI(sb.toString());
} catch (final URISyntaxException e) {
throw new Error(e);
}
return result;
}