Skip to content

support for flight build parameter #2293

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

Draft
wants to merge 6 commits into
base: dev
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions common4j/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,9 @@ def sliceParameter = "" // will be blank unless specified by developer
def dcParameter = "" // will be blank unless specified by developer
def useMockApiForNativeAuthParameter = false // will be false unless specified by developer
def disableAcquireTokenSilentTimeoutParameter = false // will be false unless specified by developer
// Expecting this param to be JSON format, i.e. {testFlight:true,testFlight2:false}
// Can include multiple flights
def localFlightsParameter = "" // will be blank unless specified by user

if (project.hasProperty("slice")) {
sliceParameter = slice
Expand All @@ -178,13 +181,18 @@ if (project.hasProperty("disableAcquireTokenSilentTimeout")) {
disableAcquireTokenSilentTimeoutParameter = true
}

if (project.hasProperty("localFlights")) {
localFlightsParameter = localFlights
}

sourceSets {
main {
java.srcDirs = ['src/main', "$project.buildDir/generated/source/buildConfig/main"]
buildConfigField("String", "SLICE", "\"$sliceParameter\"")
buildConfigField("String", "DC", "\"$dcParameter\"")
buildConfigField("boolean", "USE_MOCK_API_FOR_NATIVE_AUTH_AUTHORITY", "${useMockApiForNativeAuthParameter}")
buildConfigField("boolean", "DISABLE_ACQUIRE_TOKEN_SILENT_TIMEOUT", "${disableAcquireTokenSilentTimeoutParameter}")
buildConfigField("String", "FLIGHTS", "\"$localFlightsParameter\"")
}
test {
java.srcDirs = ['src/test']
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,16 @@
import com.microsoft.identity.common.java.WarningType;
import com.microsoft.identity.common.java.exception.ClientException;
import com.microsoft.identity.common.java.logging.Logger;
import com.microsoft.identity.common.java.nativeauth.authorities.NativeAuthCIAMAuthority;
import com.microsoft.identity.common.java.providers.microsoft.azureactivedirectory.AzureActiveDirectory;
import com.microsoft.identity.common.java.providers.microsoft.azureactivedirectory.AzureActiveDirectorySlice;
import com.microsoft.identity.common.java.providers.oauth2.OAuth2Strategy;
import com.microsoft.identity.common.java.providers.oauth2.OAuth2StrategyParameters;
import com.microsoft.identity.common.java.util.CommonURIBuilder;
import com.microsoft.identity.common.java.util.JsonUtil;
import com.microsoft.identity.common.java.util.StringUtil;
import com.microsoft.identity.common.java.nativeauth.authorities.NativeAuthCIAMAuthority;

import org.json.JSONException;

import java.io.IOException;
import java.net.MalformedURLException;
Expand All @@ -43,6 +46,7 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Map;

import edu.umd.cs.findbugs.annotations.Nullable;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
Expand Down Expand Up @@ -111,10 +115,29 @@ public void setDefault(Boolean isDefault) {
justification="Somehow, spotbugs thinks that BuildConfig.SLICE and BuildConfig.DC are the same values.")
public Authority() {
// setting slice directly here in constructor if slice provided as command line param
if (!StringUtil.isNullOrEmpty(BuildConfig.SLICE) || !StringUtil.isNullOrEmpty(BuildConfig.DC)) {
if (!StringUtil.isNullOrEmpty(BuildConfig.SLICE) || !StringUtil.isNullOrEmpty(BuildConfig.DC)
|| !StringUtil.isNullOrEmpty(BuildConfig.FLIGHTS)) {
final AzureActiveDirectorySlice slice = new AzureActiveDirectorySlice();
slice.setSlice(BuildConfig.SLICE);
slice.setDataCenter(BuildConfig.DC);

if (!StringUtil.isNullOrEmpty(BuildConfig.SLICE) || !StringUtil.isNullOrEmpty(BuildConfig.DC)) {
slice.setSlice(BuildConfig.SLICE);
slice.setDataCenter(BuildConfig.DC);
}

final String localFlightsFromBuild = BuildConfig.FLIGHTS;
if (!StringUtil.isNullOrEmpty(localFlightsFromBuild)) {
try {
Map<String, String> localFlights = JsonUtil.extractJsonObjectIntoMap(localFlightsFromBuild);
for (Map.Entry<String, String> entry : localFlights.entrySet()) {
slice.getFlightParameters().put(entry.getKey(), entry.getValue());
}
} catch (JSONException e) {
Logger.error(
TAG,
"Unable to set flight parameters",
e);
}
}
mSlice = slice;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ private MicrosoftStsOAuth2Configuration createOAuth2Configuration() {
final AzureActiveDirectorySlice slice = new AzureActiveDirectorySlice();
slice.setSlice(mSlice.getSlice());
slice.setDataCenter(mSlice.getDataCenter());
slice.setFlightParameters(mSlice.getFlightParameters());
config.setSlice(slice);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@

import com.google.gson.annotations.SerializedName;

import java.util.HashMap;
import java.util.Map;

import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
Expand All @@ -41,10 +44,13 @@ public class AzureActiveDirectorySlice {

public final static String SLICE_PARAMETER = "slice";
public final static String DC_PARAMETER = "dc";
public final static String FLIGHT_PARAMETER = "flight";

@SerializedName(SLICE_PARAMETER)
private String mSlice;

@SerializedName(DC_PARAMETER)
private String mDataCenter;

private Map<String, String> mFlightParameters = new HashMap<>();
}
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,11 @@ public URI getAuthorizationRequestAsHttpRequest() throws ClientException {
if (!StringUtil.isNullOrEmpty(mSlice.getDataCenter())) {
builder.addParameterIfAbsent(AzureActiveDirectorySlice.DC_PARAMETER, mSlice.getDataCenter());
}
if (mSlice.getFlightParameters() != null && !mSlice.getFlightParameters().isEmpty()) {
for (Map.Entry<String, String> entry : mSlice.getFlightParameters().entrySet()) {
builder.addParameterIfAbsent(entry.getKey(), entry.getValue());
}
}
}

// If login_hint is provided, block the user from switching user during login.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@
import com.microsoft.identity.common.java.providers.microsoft.MicrosoftTokenErrorResponse;
import com.microsoft.identity.common.java.providers.microsoft.azureactivedirectory.AzureActiveDirectory;
import com.microsoft.identity.common.java.providers.microsoft.azureactivedirectory.AzureActiveDirectoryCloud;
import com.microsoft.identity.common.java.providers.microsoft.azureactivedirectory.AzureActiveDirectorySlice;
import com.microsoft.identity.common.java.providers.microsoft.azureactivedirectory.ClientInfo;
import com.microsoft.identity.common.java.providers.oauth2.AuthorizationResult;
import com.microsoft.identity.common.java.providers.oauth2.AuthorizationResultFactory;
Expand Down Expand Up @@ -139,8 +140,13 @@ public MicrosoftStsOAuth2Strategy(@NonNull final MicrosoftStsOAuth2Configuration
@NonNull final OAuth2StrategyParameters parameters) throws ClientException {
super(config, parameters);
setTokenEndpoint(config.getTokenEndpoint().toString());
if (parameters.isUsingOpenIdConfiguration()){
loadOpenIdProviderConfiguration();
if (parameters.isUsingOpenIdConfiguration()) {
if (config.getSlice() != null && config.getSlice().getDataCenter() != null) {
String extraParams = AzureActiveDirectorySlice.DC_PARAMETER + "=" + config.getSlice().getDataCenter();
loadOpenIdProviderConfiguration(extraParams);
} else {
loadOpenIdProviderConfiguration();
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,12 @@ protected final void setTokenEndpoint(final String tokenEndpoint) throws ClientE
if (!StringUtil.isNullOrEmpty(slice.getDataCenter())) {
commonUriBuilder.setParameter(AzureActiveDirectorySlice.DC_PARAMETER, slice.getDataCenter());
}
if (slice.getFlightParameters() != null && !slice.getFlightParameters().isEmpty()) {
for (Map.Entry<String, String> entry : slice.getFlightParameters().entrySet()) {
commonUriBuilder.setParameter(entry.getKey(), entry.getValue());
}
}

mTokenEndpoint = commonUriBuilder.build().toString();
} catch (final URISyntaxException e) {
throw new ClientException(ClientException.MALFORMED_URL, e.getMessage(), e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ private synchronized OpenIdProviderConfiguration loadOpenIdProviderConfiguration
try {
final String uriString;
if (extraParams != null) {
uriString = sanitize(tenantedAuthorityString) + WELL_KNOWN_CONFIG_PATH + extraParams;
uriString = sanitize(tenantedAuthorityString) + WELL_KNOWN_CONFIG_PATH + "?" + extraParams;
} else {
uriString = sanitize(tenantedAuthorityString) + WELL_KNOWN_CONFIG_PATH;
}
Expand Down