|
28 | 28 | import java.nio.file.Path; |
29 | 29 | import java.util.List; |
30 | 30 | import java.util.Locale; |
| 31 | +import java.util.Map; |
31 | 32 | import java.util.concurrent.CopyOnWriteArrayList; |
32 | 33 |
|
| 34 | +import com.google.common.base.Splitter; |
33 | 35 | import com.microsoft.applicationinsights.agent.bootstrap.diagnostics.DiagnosticsHelper; |
34 | 36 | import com.microsoft.applicationinsights.agent.internal.wasbootstrap.configuration.Configuration.JmxMetric; |
35 | 37 | import com.microsoft.applicationinsights.agent.internal.wasbootstrap.configuration.Configuration.SamplingOverride; |
36 | 38 | import com.microsoft.applicationinsights.customExceptions.FriendlyException; |
| 39 | +import com.microsoft.applicationinsights.internal.authentication.AuthenticationType; |
37 | 40 | import com.squareup.moshi.JsonAdapter; |
38 | 41 | import com.squareup.moshi.JsonDataException; |
39 | 42 | import com.squareup.moshi.JsonEncodingException; |
@@ -81,6 +84,8 @@ public class ConfigurationBuilder { |
81 | 84 |
|
82 | 85 | private static final String APPLICATIONINSIGHTS_PREVIEW_METRIC_INTERVAL_SECONDS = "APPLICATIONINSIGHTS_PREVIEW_METRIC_INTERVAL_SECONDS"; |
83 | 86 |
|
| 87 | + private static final String APPLICATIONINSIGHTS_AUTHENTICATION_STRING = "APPLICATIONINSIGHTS_AUTHENTICATION_STRING"; |
| 88 | + |
84 | 89 | // cannot use logger before loading configuration, so need to store warning messages locally until logger is initialized |
85 | 90 | private static final List<ConfigurationWarnMessage> configurationWarnMessages = new CopyOnWriteArrayList<>(); |
86 | 91 |
|
@@ -113,6 +118,31 @@ private static void overlayProfilerConfiguration(Configuration config) { |
113 | 118 | .parseBoolean(overlayWithEnvVar(APPLICATIONINSIGHTS_PROFILER_ENABLED, Boolean.toString(config.preview.profiler.enabled))); |
114 | 119 | } |
115 | 120 |
|
| 121 | + private static void overlayAadConfiguration(Configuration config) { |
| 122 | + String aadAuthString = getEnvVar(APPLICATIONINSIGHTS_AUTHENTICATION_STRING); |
| 123 | + if(aadAuthString != null) { |
| 124 | + Map<String, String> keyValueMap = Splitter.on(";") |
| 125 | + .trimResults() |
| 126 | + .omitEmptyStrings() |
| 127 | + .withKeyValueSeparator("=") |
| 128 | + .split(aadAuthString); |
| 129 | + String authorization = keyValueMap.get("Authorization"); |
| 130 | + if(authorization != null && authorization.equals("AAD")) { |
| 131 | + // Override any configuration from json |
| 132 | + config.preview.authentication = new Configuration.AadAuthentication(); |
| 133 | + config.preview.authentication.enabled = true; |
| 134 | + config.preview.authentication.type = AuthenticationType.SAMI; |
| 135 | + String clientId = keyValueMap.get("ClientId"); |
| 136 | + if(clientId != null && !clientId.isEmpty()) { |
| 137 | + // Override type to User Assigned Managed Identity |
| 138 | + config.preview.authentication.type = AuthenticationType.UAMI; |
| 139 | + config.preview.authentication.clientId = clientId; |
| 140 | + } |
| 141 | + } |
| 142 | + } |
| 143 | + |
| 144 | + } |
| 145 | + |
116 | 146 | private static void loadLogCaptureEnvVar(Configuration config) { |
117 | 147 | String loggingEnvVar = getEnvVar(APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_LEVEL); |
118 | 148 | if (loggingEnvVar != null) { |
@@ -270,7 +300,7 @@ static void overlayEnvVars(Configuration config) throws IOException { |
270 | 300 |
|
271 | 301 | addDefaultJmxMetricsIfNotPresent(config); |
272 | 302 | overlayProfilerConfiguration(config); |
273 | | - |
| 303 | + overlayAadConfiguration(config); |
274 | 304 | loadInstrumentationEnabledEnvVars(config); |
275 | 305 | } |
276 | 306 |
|
|
0 commit comments