diff --git a/apps/backend/pom.xml b/apps/backend/pom.xml
index c98fdf26bd..a45dae1582 100644
--- a/apps/backend/pom.xml
+++ b/apps/backend/pom.xml
@@ -26,7 +26,7 @@
11.0.0
15.0.0
- 2.10.0
+ 3.0.0
1.9.1
@@ -35,6 +35,8 @@
30.1-jre
2.3
5.7.0
+ 15.0
+ 4.2.1
1.15.2
@@ -301,6 +303,21 @@
+
+ net.java.dev.jna
+ jna-platform
+ ${jna.version}
+
+
+ org.jetbrains
+ annotations
+ ${jetbrains.annotation.version}
+
+
+ org.codehaus.woodstox
+ stax2-api
+ ${stax2-api.version}
+
com.google.guava
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 252ac95987..2a35546e9d 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
@@ -1,10 +1,12 @@
package no.nav.data.common.security.azure;
-import com.microsoft.graph.models.extensions.IGraphServiceClient;
+import com.microsoft.graph.models.UserSendMailParameterSet;
+import com.microsoft.graph.requests.GraphServiceClient;
import lombok.extern.slf4j.Slf4j;
import no.nav.data.common.mail.EmailProvider;
import no.nav.data.common.mail.MailTask;
import no.nav.data.common.storage.StorageService;
+import okhttp3.Request;
import org.springframework.stereotype.Service;
import static no.nav.data.common.security.azure.support.MailMessage.compose;
@@ -25,14 +27,17 @@ public AzureAdService(AzureTokenProvider azureTokenProvider, StorageService stor
public void sendMail(MailTask mailTask) {
log.info("Sending mail {} to {}", mailTask.getSubject(), mailTask.getTo());
getMailGraphClient().me()
- .sendMail(compose(mailTask.getTo(), mailTask.getSubject(), mailTask.getBody()), false)
+ .sendMail(UserSendMailParameterSet.newBuilder()
+ .withMessage(compose(mailTask.getTo(), mailTask.getSubject(), mailTask.getBody()))
+ .withSaveToSentItems(false)
+ .build())
.buildRequest()
.post();
storage.save(mailTask.toMailLog());
}
- private IGraphServiceClient getMailGraphClient() {
+ private GraphServiceClient getMailGraphClient() {
return azureTokenProvider.getGraphClient(azureTokenProvider.getMailAccessToken());
}
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 75a39d8c50..fe1687fc4f 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
@@ -11,10 +11,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;
@@ -29,22 +26,21 @@
import no.nav.data.common.security.dto.Credential;
import no.nav.data.common.security.dto.OAuthState;
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;
@@ -60,7 +56,6 @@ public class AzureTokenProvider implements TokenProvider {
private final IConfidentialClientApplication msalClient;
private final PublicClientApplication msalPublicClient;
private final AuthService authService;
- private final MdcMsalExecutor msalExecutor;
private final AADAuthenticationProperties aadAuthProps;
private final Encryptor encryptor;
@@ -69,12 +64,11 @@ public class AzureTokenProvider implements TokenProvider {
public AzureTokenProvider(AADAuthenticationProperties aadAuthProps,
IConfidentialClientApplication msalClient, PublicClientApplication msalPublicClient,
- AuthService authService, ThreadPoolExecutor msalThreadPool, Encryptor encryptor) {
+ AuthService authService, Encryptor encryptor) {
this.aadAuthProps = aadAuthProps;
this.msalClient = msalClient;
this.msalPublicClient = msalPublicClient;
this.authService = authService;
- this.msalExecutor = new MdcMsalExecutor(msalThreadPool);
this.encryptor = encryptor;
this.tokenMetrics = MetricUtils.summary()
.labels("accessToken")
@@ -92,10 +86,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();
}
@@ -223,24 +218,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 d1693057bd..42b45c461d 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;