diff --git a/apps/backend/pom.xml b/apps/backend/pom.xml
index e9adfd815..5bf53d9c7 100644
--- a/apps/backend/pom.xml
+++ b/apps/backend/pom.xml
@@ -27,7 +27,7 @@
4.21.0
4.4
- 2.10.0
+ 3.0.0
1.9.1
@@ -36,6 +36,8 @@
30.1-jre
2.3
5.7.0
+ 15.0
+ 4.2.1
6.1.0
@@ -342,6 +344,21 @@
+
+ net.java.dev.jna
+ jna-platform
+ ${jna.version}
+
+
+ org.jetbrains
+ annotations
+ ${jetbrains.annotation.version}
+
+
+ org.codehaus.woodstox
+ stax2-api
+ ${stax2-api.version}
+
org.scala-lang
diff --git a/apps/backend/src/main/java/no/nav/data/common/security/azure/AzureAdService.java b/apps/backend/src/main/java/no/nav/data/common/security/azure/AzureAdService.java
index c3ef9fabe..dec41e2ba 100644
--- a/apps/backend/src/main/java/no/nav/data/common/security/azure/AzureAdService.java
+++ b/apps/backend/src/main/java/no/nav/data/common/security/azure/AzureAdService.java
@@ -2,14 +2,16 @@
import com.microsoft.graph.core.ClientException;
import com.microsoft.graph.http.GraphServiceException;
-import com.microsoft.graph.models.extensions.IGraphServiceClient;
+import com.microsoft.graph.models.UserSendMailParameterSet;
import com.microsoft.graph.options.QueryOption;
+import com.microsoft.graph.requests.GraphServiceClient;
import lombok.extern.slf4j.Slf4j;
import no.nav.data.common.exceptions.TechnicalException;
import no.nav.data.common.exceptions.TimeoutException;
import no.nav.data.common.security.azure.support.GraphLogger;
import no.nav.data.common.security.azure.support.MailLog;
import no.nav.data.common.storage.StorageService;
+import okhttp3.Request;
import org.springframework.stereotype.Service;
import org.springframework.util.StreamUtils;
@@ -39,7 +41,10 @@ public byte[] lookupProfilePictureByNavIdent(String navIdent) {
public void sendMail(String to, String subject, String messageBody) {
getMailGraphClient().me()
- .sendMail(compose(to, subject, messageBody), false)
+ .sendMail(UserSendMailParameterSet.newBuilder()
+ .withMessage(compose(to, subject, messageBody))
+ .withSaveToSentItems(false)
+ .build())
.buildRequest()
.post();
@@ -78,11 +83,11 @@ private byte[] lookupUserProfilePicture(String id) {
}
}
- private IGraphServiceClient getMailGraphClient() {
+ private GraphServiceClient getMailGraphClient() {
return azureTokenProvider.getGraphClient(azureTokenProvider.getMailAccessToken());
}
- private IGraphServiceClient getAppGraphClient() {
+ private GraphServiceClient getAppGraphClient() {
return azureTokenProvider.getGraphClient(azureTokenProvider.getApplicationTokenForResource(MICROSOFT_GRAPH_SCOPE_APP));
}
}
diff --git a/apps/backend/src/main/java/no/nav/data/common/security/azure/AzureTokenProvider.java b/apps/backend/src/main/java/no/nav/data/common/security/azure/AzureTokenProvider.java
index bad74c710..38603b33e 100644
--- a/apps/backend/src/main/java/no/nav/data/common/security/azure/AzureTokenProvider.java
+++ b/apps/backend/src/main/java/no/nav/data/common/security/azure/AzureTokenProvider.java
@@ -12,10 +12,7 @@
import com.microsoft.aad.msal4j.RefreshTokenParameters;
import com.microsoft.aad.msal4j.ResponseMode;
import com.microsoft.aad.msal4j.UserNamePasswordParameters;
-import com.microsoft.graph.concurrency.DefaultExecutors;
-import com.microsoft.graph.logger.DefaultLogger;
-import com.microsoft.graph.models.extensions.IGraphServiceClient;
-import com.microsoft.graph.requests.extensions.GraphServiceClient;
+import com.microsoft.graph.requests.GraphServiceClient;
import com.nimbusds.oauth2.sdk.pkce.CodeChallengeMethod;
import io.prometheus.client.Summary;
import lombok.extern.slf4j.Slf4j;
@@ -30,22 +27,21 @@
import no.nav.data.common.security.dto.OAuthState;
import no.nav.data.common.utils.Constants;
import no.nav.data.common.utils.MetricUtils;
+import okhttp3.Request;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.StringUtils;
-import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import org.springframework.util.ReflectionUtils;
-import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.URI;
import java.net.URL;
import java.time.Duration;
import java.util.Set;
-import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.CompletableFuture;
import static java.util.Objects.requireNonNull;
import static no.nav.data.common.security.SecurityConstants.SESS_ID_LEN;
@@ -61,7 +57,6 @@ public class AzureTokenProvider implements TokenProvider {
private final IConfidentialClientApplication msalClient;
private final PublicClientApplication msalPublicClient;
private final AuthService authService;
- private final MdcMsalExecutor msalExecutor;
private final ConfidentialClientApplication confidentialClientApplication;
private final AADAuthenticationProperties aadAuthProps;
@@ -71,13 +66,12 @@ public class AzureTokenProvider implements TokenProvider {
public AzureTokenProvider(AADAuthenticationProperties aadAuthProps,
IConfidentialClientApplication msalClient, PublicClientApplication msalPublicClient,
- AuthService authService, ThreadPoolExecutor msalThreadPool,
+ AuthService authService,
ConfidentialClientApplication confidentialClientApplication, Encryptor encryptor) {
this.aadAuthProps = aadAuthProps;
this.msalClient = msalClient;
this.msalPublicClient = msalPublicClient;
this.authService = authService;
- this.msalExecutor = new MdcMsalExecutor(msalThreadPool);
this.confidentialClientApplication = confidentialClientApplication;
this.encryptor = encryptor;
this.tokenMetrics = MetricUtils.summary()
@@ -96,10 +90,11 @@ public AzureTokenProvider(AADAuthenticationProperties aadAuthProps,
MetricUtils.register("accessTokenCache", accessTokenCache);
}
- IGraphServiceClient getGraphClient(String accessToken) {
+ // buildClient has omitted it's generic type...
+ @SuppressWarnings("unchecked")
+ GraphServiceClient getGraphClient(String accessToken) {
return GraphServiceClient.builder()
- .authenticationProvider(request -> request.addHeader(HttpHeaders.AUTHORIZATION, TOKEN_TYPE + accessToken))
- .executors(msalExecutor)
+ .authenticationProvider(url -> CompletableFuture.completedFuture(accessToken))
.logger(new GraphLogger())
.buildClient();
}
@@ -226,24 +221,4 @@ private IAuthenticationResult acquireTokenByCredential(String resource) {
}
}
- private static class MdcMsalExecutor extends DefaultExecutors {
-
- static Field backgroundExecutor;
-
- static {
- backgroundExecutor = ReflectionUtils.findField(DefaultExecutors.class, "backgroundExecutor", ThreadPoolExecutor.class);
- Assert.notNull(backgroundExecutor, "couldn't find executor field");
- backgroundExecutor.setAccessible(true);
- }
-
- public MdcMsalExecutor(ThreadPoolExecutor threadPoolExecutor) {
- super(new DefaultLogger());
- try {
- backgroundExecutor.set(this, threadPoolExecutor);
- } catch (Exception e) {
- throw new TechnicalException("reflection error", e);
- }
- }
- }
-
}
diff --git a/apps/backend/src/main/java/no/nav/data/common/security/azure/support/MailMessage.java b/apps/backend/src/main/java/no/nav/data/common/security/azure/support/MailMessage.java
index d1693057b..42b45c461 100644
--- a/apps/backend/src/main/java/no/nav/data/common/security/azure/support/MailMessage.java
+++ b/apps/backend/src/main/java/no/nav/data/common/security/azure/support/MailMessage.java
@@ -1,10 +1,10 @@
package no.nav.data.common.security.azure.support;
-import com.microsoft.graph.models.extensions.EmailAddress;
-import com.microsoft.graph.models.extensions.ItemBody;
-import com.microsoft.graph.models.extensions.Message;
-import com.microsoft.graph.models.extensions.Recipient;
-import com.microsoft.graph.models.generated.BodyType;
+import com.microsoft.graph.models.BodyType;
+import com.microsoft.graph.models.EmailAddress;
+import com.microsoft.graph.models.ItemBody;
+import com.microsoft.graph.models.Message;
+import com.microsoft.graph.models.Recipient;
import lombok.experimental.UtilityClass;
import java.util.List;