Code: Select all
package com.xxx.xxxxx.msaltest.client;
import static com.xxx.xxxxxx.msaltest.constants.Constants.AUTHORITY_COMMON_ENDPOINTS;
import static com.xxx.xxxxxx.msaltest.constants.Constants.CLIENT_ID;
import static com.xxx.xxxxxx.msaltest.constants.Constants.SCOPE;
import java.util.List;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.function.Consumer;
import org.apache.commons.lang.StringUtils;
//import com.microsoft.graph.requests.GraphServiceClient;
import com.microsoft.aad.msal4j.DeviceCode;
import com.microsoft.aad.msal4j.DeviceCodeFlowParameters;
import com.microsoft.aad.msal4j.IAccount;
import com.microsoft.aad.msal4j.IAuthenticationResult;
import com.microsoft.aad.msal4j.PublicClientApplication;
import com.microsoft.graph.authentication.IAuthenticationProvider;
import com.microsoft.graph.models.Attachment;
import com.microsoft.graph.models.Message;
import com.microsoft.graph.models.User;
import com.microsoft.graph.requests.AttachmentCollectionPage;
import com.microsoft.graph.requests.GraphServiceClient;
import com.microsoft.graph.requests.MessageCollectionPage;
import okhttp3.Request;
public class DeviceCodeClientMsal2 implements Runnable {
public static String COMMON_VARIABLE = StringUtils.EMPTY;
public DeviceCodeClientMsal2() {
}
@Override
public void run() {
IAuthenticationResult result;
try {
result = acquireTokenDeviceCode();
System.out.println("** Access token: " + result.accessToken());
System.out.println("** Id token: " + result.idToken());
System.out.println("** Account username: " + result.account().username());
IAuthenticationProvider provider = new
MyAuthenticationProvider(result.accessToken());
GraphServiceClient graphServiceClient = GraphServiceClient.builder()
.authenticationProvider(provider).buildClient();
User user = graphServiceClient.me().buildRequest().get();
final MessageCollectionPage messagePage =
graphServiceClient.me().messages().buildRequest().top(3).get();
List messageList = messagePage.getCurrentPage();
for (Message msg : messageList) {
System.out.println("Subject -> " + msg.subject);
System.out.println("Body -> " + msg.body.toString());
System.out.println("Is attachment exist ? " + msg.hasAttachments);
if (msg.hasAttachments) {
System.out.println("Message id -> " + msg.id);
AttachmentCollectionPage attachments =
graphServiceClient.me().messages(msg.id).attachments()
.buildRequest().get();
List listOfAttachment = attachments.getCurrentPage();
System.out.println("Size -> " + listOfAttachment.size());
Attachment attachment = listOfAttachment.get(0);
System.out.println("Attachment id -> " + attachment.id);
//How to download the attachment
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("run method exits");
}
private static IAuthenticationResult acquireTokenDeviceCode() throws Exception {
// Load token cache from file and initialize token cache aspect. The token cache
// will have
// dummy data, so the acquireTokenSilently call will fail.
System.out.println("Before Public Client Application");
PublicClientApplication pca = PublicClientApplication.builder(CLIENT_ID).authority(AUTHORITY_COMMON_ENDPOINTS)
.build();
// Take first account in the cache. In a production application, you would
// filter
// accountsInCache to get the right account for the user authenticating.
IAuthenticationResult result;
Consumer deviceCodeConsumer = (DeviceCode deviceCode) -> {
COMMON_VARIABLE = deviceCode.message();
System.out.println(deviceCode.message());
};
DeviceCodeFlowParameters parameters = DeviceCodeFlowParameters.builder(SCOPE, deviceCodeConsumer).build();
result = pca.acquireToken(parameters).join();
return result;
}