From 68f97a11115eb97380dad946e9bf4097bf282f61 Mon Sep 17 00:00:00 2001 From: Jason Johnston Date: Mon, 11 Apr 2022 14:43:16 -0400 Subject: [PATCH 1/8] Delete old project --- demo/graphtutorial/.classpath | 32 --- demo/graphtutorial/.gitattributes | 6 - demo/graphtutorial/.gitignore | 6 - demo/graphtutorial/.project | 23 -- .../org.eclipse.buildship.core.prefs | 13 - .../.settings/org.eclipse.jdt.core.prefs | 4 - demo/graphtutorial/build.gradle | 44 ---- .../gradle/wrapper/gradle-wrapper.jar | Bin 58694 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 - demo/graphtutorial/gradlew | 183 -------------- demo/graphtutorial/gradlew.bat | 103 -------- demo/graphtutorial/settings.gradle | 10 - .../src/main/java/graphtutorial/App.java | 232 ------------------ .../src/main/java/graphtutorial/Graph.java | 195 --------------- .../main/java/graphtutorial/GraphToIana.java | 171 ------------- .../graphtutorial/oAuth.properties.example | 2 - .../src/test/java/graphtutorial/AppTest.java | 11 - 17 files changed, 1040 deletions(-) delete mode 100644 demo/graphtutorial/.classpath delete mode 100644 demo/graphtutorial/.gitattributes delete mode 100644 demo/graphtutorial/.gitignore delete mode 100644 demo/graphtutorial/.project delete mode 100644 demo/graphtutorial/.settings/org.eclipse.buildship.core.prefs delete mode 100644 demo/graphtutorial/.settings/org.eclipse.jdt.core.prefs delete mode 100644 demo/graphtutorial/build.gradle delete mode 100644 demo/graphtutorial/gradle/wrapper/gradle-wrapper.jar delete mode 100644 demo/graphtutorial/gradle/wrapper/gradle-wrapper.properties delete mode 100644 demo/graphtutorial/gradlew delete mode 100644 demo/graphtutorial/gradlew.bat delete mode 100644 demo/graphtutorial/settings.gradle delete mode 100644 demo/graphtutorial/src/main/java/graphtutorial/App.java delete mode 100644 demo/graphtutorial/src/main/java/graphtutorial/Graph.java delete mode 100644 demo/graphtutorial/src/main/java/graphtutorial/GraphToIana.java delete mode 100644 demo/graphtutorial/src/main/resources/graphtutorial/oAuth.properties.example delete mode 100644 demo/graphtutorial/src/test/java/graphtutorial/AppTest.java diff --git a/demo/graphtutorial/.classpath b/demo/graphtutorial/.classpath deleted file mode 100644 index be377dd..0000000 --- a/demo/graphtutorial/.classpath +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/demo/graphtutorial/.gitattributes b/demo/graphtutorial/.gitattributes deleted file mode 100644 index 00a51af..0000000 --- a/demo/graphtutorial/.gitattributes +++ /dev/null @@ -1,6 +0,0 @@ -# -# https://help.github.com/articles/dealing-with-line-endings/ -# -# These are explicitly windows files and should use crlf -*.bat text eol=crlf - diff --git a/demo/graphtutorial/.gitignore b/demo/graphtutorial/.gitignore deleted file mode 100644 index d84a900..0000000 --- a/demo/graphtutorial/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -# Ignore Gradle project-specific cache directory -.gradle - -# Ignore Gradle build output directory -build -bin/ diff --git a/demo/graphtutorial/.project b/demo/graphtutorial/.project deleted file mode 100644 index 10bbc4b..0000000 --- a/demo/graphtutorial/.project +++ /dev/null @@ -1,23 +0,0 @@ - - - graphtutorial_ - Project graphtutorial_ created by Buildship. - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.buildship.core.gradleprojectbuilder - - - - - - org.eclipse.jdt.core.javanature - org.eclipse.buildship.core.gradleprojectnature - - diff --git a/demo/graphtutorial/.settings/org.eclipse.buildship.core.prefs b/demo/graphtutorial/.settings/org.eclipse.buildship.core.prefs deleted file mode 100644 index 016f0a1..0000000 --- a/demo/graphtutorial/.settings/org.eclipse.buildship.core.prefs +++ /dev/null @@ -1,13 +0,0 @@ -arguments= -auto.sync=false -build.scans.enabled=false -connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) -connection.project.dir= -eclipse.preferences.version=1 -gradle.user.home= -java.home=C\:/Program Files/Eclipse Foundation/jdk-17.0.0.35-hotspot -jvm.arguments= -offline.mode=false -override.workspace.settings=true -show.console.view=true -show.executions.view=true diff --git a/demo/graphtutorial/.settings/org.eclipse.jdt.core.prefs b/demo/graphtutorial/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 626e0e1..0000000 --- a/demo/graphtutorial/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 -org.eclipse.jdt.core.compiler.compliance=17 -org.eclipse.jdt.core.compiler.source=17 diff --git a/demo/graphtutorial/build.gradle b/demo/graphtutorial/build.gradle deleted file mode 100644 index 13db67a..0000000 --- a/demo/graphtutorial/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -/* - * This file was generated by the Gradle 'init' task. - * - * This generated file contains a sample Java project to get you started. - * For more details take a look at the Java Quickstart chapter in the Gradle - * User Manual available at https://docs.gradle.org/6.3/userguide/tutorial_java_projects.html - */ - -plugins { - // Apply the java plugin to add support for Java - id 'java' - - // Apply the application plugin to add support for building a CLI application. - id 'application' -} - -repositories { - // Use jcenter for resolving dependencies. - // You can declare any Maven/Ivy/file repository here. - jcenter() -} - -// -dependencies { - // This dependency is used by the application. - implementation 'com.google.guava:guava:28.2-jre' - - // Use JUnit test framework - testImplementation 'junit:junit:4.12' - implementation 'com.azure:azure-identity:1.2.5' - implementation 'com.microsoft.graph:microsoft-graph:3.2.0' -} -// - -application { - // Define the main class for the application. - mainClassName = 'graphtutorial.App' -} - -// -run { - standardInput = System.in -} -// diff --git a/demo/graphtutorial/gradle/wrapper/gradle-wrapper.jar b/demo/graphtutorial/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 490fda8577df6c95960ba7077c43220e5bb2c0d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58694 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 diff --git a/demo/graphtutorial/gradle/wrapper/gradle-wrapper.properties b/demo/graphtutorial/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index ffed3a2..0000000 --- a/demo/graphtutorial/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/demo/graphtutorial/gradlew b/demo/graphtutorial/gradlew deleted file mode 100644 index 2fe81a7..0000000 --- a/demo/graphtutorial/gradlew +++ /dev/null @@ -1,183 +0,0 @@ -#!/usr/bin/env sh - -# -# Copyright 2015 the original author or authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn () { - echo "$*" -} - -die () { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=`expr $i + 1` - done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -exec "$JAVACMD" "$@" diff --git a/demo/graphtutorial/gradlew.bat b/demo/graphtutorial/gradlew.bat deleted file mode 100644 index 62bd9b9..0000000 --- a/demo/graphtutorial/gradlew.bat +++ /dev/null @@ -1,103 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/demo/graphtutorial/settings.gradle b/demo/graphtutorial/settings.gradle deleted file mode 100644 index 2518738..0000000 --- a/demo/graphtutorial/settings.gradle +++ /dev/null @@ -1,10 +0,0 @@ -/* - * This file was generated by the Gradle 'init' task. - * - * The settings file is used to specify which projects to include in your build. - * - * Detailed information about configuring a multi-project build in Gradle can be found - * in the user manual at https://docs.gradle.org/6.3/userguide/multi_project_builds.html - */ - -rootProject.name = 'graphtutorial' diff --git a/demo/graphtutorial/src/main/java/graphtutorial/App.java b/demo/graphtutorial/src/main/java/graphtutorial/App.java deleted file mode 100644 index dc80206..0000000 --- a/demo/graphtutorial/src/main/java/graphtutorial/App.java +++ /dev/null @@ -1,232 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package graphtutorial; - -import java.io.IOException; -import java.time.DayOfWeek; -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.time.format.DateTimeFormatter; -import java.time.format.DateTimeParseException; -import java.time.format.FormatStyle; -import java.time.temporal.ChronoUnit; -import java.time.temporal.TemporalAdjusters; -import java.util.Arrays; -import java.util.HashSet; -import java.util.InputMismatchException; -import java.util.List; -import java.util.Properties; -import java.util.Scanner; - -import com.microsoft.graph.models.DateTimeTimeZone; -import com.microsoft.graph.models.Event; -import com.microsoft.graph.models.User; - -/** - * Graph Tutorial - * - */ -public class App { - public static void main(String[] args) { - System.out.println("Java Graph Tutorial"); - System.out.println(); - - // - // Load OAuth settings - final Properties oAuthProperties = new Properties(); - try { - oAuthProperties.load(App.class.getResourceAsStream("oAuth.properties")); - } catch (IOException e) { - System.out.println("Unable to read OAuth configuration. Make sure you have a properly formatted oAuth.properties file. See README for details."); - return; - } - - final String appId = oAuthProperties.getProperty("app.id"); - final List appScopes = Arrays - .asList(oAuthProperties.getProperty("app.scopes").split(",")); - // - - // Initialize Graph with auth settings - Graph.initializeGraphAuth(appId, appScopes); - final String accessToken = Graph.getUserAccessToken(); - - // Greet the user - User user = Graph.getUser(); - System.out.println("Welcome " + user.displayName); - System.out.println("Time zone: " + user.mailboxSettings.timeZone); - System.out.println(); - - Scanner input = new Scanner(System.in); - - int choice = -1; - - while (choice != 0) { - System.out.println("Please choose one of the following options:"); - System.out.println("0. Exit"); - System.out.println("1. Display access token"); - System.out.println("2. View this week's calendar"); - System.out.println("3. Add an event"); - - try { - choice = input.nextInt(); - } catch (InputMismatchException ex) { - // Skip over non-integer input - } - - input.nextLine(); - - // Process user choice - switch(choice) { - case 0: - // Exit the program - System.out.println("Goodbye..."); - break; - case 1: - // Display access token - System.out.println("Access token: " + accessToken); - break; - case 2: - // List the calendar - listCalendarEvents(user.mailboxSettings.timeZone); - break; - case 3: - // Create a new event - createEvent(user.mailboxSettings.timeZone, input); - break; - default: - System.out.println("Invalid choice"); - } - } - - input.close(); - } - - // - private static String formatDateTimeTimeZone(DateTimeTimeZone date) { - LocalDateTime dateTime = LocalDateTime.parse(date.dateTime); - - return dateTime.format( - DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT)) + - " (" + date.timeZone + ")"; - } - // - - // - private static void listCalendarEvents(String timeZone) { - ZoneId tzId = GraphToIana.getZoneIdFromWindows("Pacific Standard Time"); - - // Get midnight of the first day of the week (assumed Sunday) - // in the user's timezone, then convert to UTC - ZonedDateTime startOfWeek = ZonedDateTime.now(tzId) - .with(TemporalAdjusters.previousOrSame(DayOfWeek.SUNDAY)) - .truncatedTo(ChronoUnit.DAYS) - .withZoneSameInstant(ZoneId.of("UTC")); - - // Add 7 days to get the end of the week - ZonedDateTime endOfWeek = startOfWeek.plusDays(7); - - // Get the user's events - List events = Graph.getCalendarView( - startOfWeek, endOfWeek, timeZone); - - System.out.println("Events:"); - - for (Event event : events) { - System.out.println("Subject: " + event.subject); - System.out.println(" Organizer: " + event.organizer.emailAddress.name); - System.out.println(" Start: " + formatDateTimeTimeZone(event.start)); - System.out.println(" End: " + formatDateTimeTimeZone(event.end)); - } - - System.out.println(); - } - // - - // - private static void createEvent(String timeZone, Scanner input) { - DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("M/d/yyyy h:mm a"); - - // Prompt for subject - String subject = ""; - while (subject.isBlank()) { - System.out.print("Subject (required): "); - subject = input.nextLine(); - } - - // Prompt for start date/time - LocalDateTime start = null; - while (start == null) { - System.out.print("Start (mm/dd/yyyy hh:mm AM/PM): "); - String date = input.nextLine(); - - try { - start = LocalDateTime.parse(date, inputFormat); - } catch (DateTimeParseException dtp) { - System.out.println("Invalid input, try again."); - } - } - - // Prompt for end date/time - LocalDateTime end = null; - while (end == null) { - System.out.print("End (mm/dd/yyyy hh:mm AM/PM): "); - String date = input.nextLine(); - - try { - end = LocalDateTime.parse(date, inputFormat); - } catch (DateTimeParseException dtp) { - System.out.println("Invalid input, try again."); - } - - if (end.isBefore(start)) { - System.out.println("End time must be after start time."); - end = null; - } - } - - // Prompt for attendees - HashSet attendees = new HashSet(); - System.out.print("Would you like to add attendees? (y/n): "); - if (input.nextLine().trim().toLowerCase().startsWith("y")) { - String attendee = ""; - do { - System.out.print("Enter an email address (leave blank to finalize the list): "); - attendee = input.nextLine(); - - if (!attendee.isBlank()) { - attendees.add(attendee); - } - } while (!attendee.isBlank()); - } - - // Prompt for body - String body = null; - System.out.print("Would you like to add a body? (y/n): "); - if (input.nextLine().trim().toLowerCase().startsWith("y")) { - System.out.print("Enter a body: "); - body = input.nextLine(); - } - - // Confirm input - System.out.println(); - System.out.println("New event:"); - System.out.println("Subject: " + subject); - System.out.println("Start: " + start.format(inputFormat)); - System.out.println("End: " + end.format(inputFormat)); - System.out.println("Attendees: " + (attendees.size() > 0 ? attendees.toString() : "NONE")); - System.out.println("Body: " + (body == null ? "NONE" : body)); - - System.out.print("Is this correct? (y/n): "); - if (input.nextLine().trim().toLowerCase().startsWith("y")) { - Graph.createEvent(timeZone, subject, start, end, attendees, body); - System.out.println("Event created."); - } else { - System.out.println("Canceling."); - } - - System.out.println(); - } - // -} \ No newline at end of file diff --git a/demo/graphtutorial/src/main/java/graphtutorial/Graph.java b/demo/graphtutorial/src/main/java/graphtutorial/Graph.java deleted file mode 100644 index 470a052..0000000 --- a/demo/graphtutorial/src/main/java/graphtutorial/Graph.java +++ /dev/null @@ -1,195 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -package graphtutorial; - -import java.net.URL; -import java.time.LocalDateTime; -import java.time.ZonedDateTime; -import java.time.format.DateTimeFormatter; -import java.util.LinkedList; -import java.util.List; -import java.util.Set; - -import okhttp3.Request; - -import com.azure.identity.DeviceCodeCredential; -import com.azure.identity.DeviceCodeCredentialBuilder; - -import com.microsoft.graph.authentication.TokenCredentialAuthProvider; -import com.microsoft.graph.logger.DefaultLogger; -import com.microsoft.graph.logger.LoggerLevel; -import com.microsoft.graph.models.Attendee; -import com.microsoft.graph.models.DateTimeTimeZone; -import com.microsoft.graph.models.EmailAddress; -import com.microsoft.graph.models.Event; -import com.microsoft.graph.models.ItemBody; -import com.microsoft.graph.models.User; -import com.microsoft.graph.models.AttendeeType; -import com.microsoft.graph.models.BodyType; -import com.microsoft.graph.options.HeaderOption; -import com.microsoft.graph.options.Option; -import com.microsoft.graph.options.QueryOption; -import com.microsoft.graph.requests.GraphServiceClient; -import com.microsoft.graph.requests.EventCollectionPage; -import com.microsoft.graph.requests.EventCollectionRequestBuilder; - -/** - * Graph - */ -public class Graph { - - private static GraphServiceClient graphClient = null; - private static TokenCredentialAuthProvider authProvider = null; - - public static void initializeGraphAuth(String applicationId, List scopes) { - // Create the auth provider - final DeviceCodeCredential credential = new DeviceCodeCredentialBuilder() - .clientId(applicationId) - .tenantId("common") - .challengeConsumer(challenge -> System.out.println(challenge.getMessage())) - .build(); - - authProvider = new TokenCredentialAuthProvider(scopes, credential); - - // Create default logger to only log errors - DefaultLogger logger = new DefaultLogger(); - logger.setLoggingLevel(LoggerLevel.ERROR); - - // Build a Graph client - graphClient = GraphServiceClient.builder() - .authenticationProvider(authProvider) - .logger(logger) - .buildClient(); - } - - public static String getUserAccessToken() - { - try { - URL meUrl = new URL("https://graph.microsoft.com/v1.0/me"); - return authProvider.getAuthorizationTokenAsync(meUrl).get(); - } catch(Exception ex) { - return null; - } - } - - // - public static User getUser() { - if (graphClient == null) throw new NullPointerException( - "Graph client has not been initialized. Call initializeGraphAuth before calling this method"); - - // GET /me to get authenticated user - User me = graphClient - .me() - .buildRequest() - .select("displayName,mailboxSettings") - .get(); - - return me; - } - // - - // - public static List getCalendarView( - ZonedDateTime viewStart, ZonedDateTime viewEnd, String timeZone) { - if (graphClient == null) throw new NullPointerException( - "Graph client has not been initialized. Call initializeGraphAuth before calling this method"); - - List - - // - public static void createEvent( - String timeZone, - String subject, - LocalDateTime start, - LocalDateTime end, - Set attendees, - String body) - { - if (graphClient == null) throw new NullPointerException( - "Graph client has not been initialized. Call initializeGraphAuth before calling this method"); - - Event newEvent = new Event(); - - newEvent.subject = subject; - - newEvent.start = new DateTimeTimeZone(); - newEvent.start.dateTime = start.toString(); - newEvent.start.timeZone = timeZone; - - newEvent.end = new DateTimeTimeZone(); - newEvent.end.dateTime = end.toString(); - newEvent.end.timeZone = timeZone; - - if (attendees != null && !attendees.isEmpty()) { - newEvent.attendees = new LinkedList(); - - attendees.forEach((email) -> { - Attendee attendee = new Attendee(); - // Set each attendee as required - attendee.type = AttendeeType.REQUIRED; - attendee.emailAddress = new EmailAddress(); - attendee.emailAddress.address = email; - newEvent.attendees.add(attendee); - }); - } - - if (body != null) { - newEvent.body = new ItemBody(); - newEvent.body.content = body; - // Treat body as plain text - newEvent.body.contentType = BodyType.TEXT; - } - - // POST /me/events - graphClient - .me() - .events() - .buildRequest() - .post(newEvent); - } - // -} \ No newline at end of file diff --git a/demo/graphtutorial/src/main/java/graphtutorial/GraphToIana.java b/demo/graphtutorial/src/main/java/graphtutorial/GraphToIana.java deleted file mode 100644 index 98b19b0..0000000 --- a/demo/graphtutorial/src/main/java/graphtutorial/GraphToIana.java +++ /dev/null @@ -1,171 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -/* spell-checker: disable */ - -// -package graphtutorial; - -import java.time.ZoneId; -import java.util.Map; - -// Basic lookup for mapping Windows time zone identifiers to -// IANA identifiers -// Mappings taken from -// https://github.com/unicode-org/cldr/blob/master/common/supplemental/windowsZones.xml -public class GraphToIana { - private static final Map timeZoneIdMap = - Map.ofEntries( - Map.entry("Dateline Standard Time", "Etc/GMT+12"), - Map.entry("UTC-11", "Etc/GMT+11"), - Map.entry("Aleutian Standard Time", "America/Adak"), - Map.entry("Hawaiian Standard Time", "Pacific/Honolulu"), - Map.entry("Marquesas Standard Time", "Pacific/Marquesas"), - Map.entry("Alaskan Standard Time", "America/Anchorage"), - Map.entry("UTC-09", "Etc/GMT+9"), - Map.entry("Pacific Standard Time (Mexico)", "America/Tijuana"), - Map.entry("UTC-08", "Etc/GMT+8"), - Map.entry("Pacific Standard Time", "America/Los_Angeles"), - Map.entry("US Mountain Standard Time", "America/Phoenix"), - Map.entry("Mountain Standard Time (Mexico)", "America/Chihuahua"), - Map.entry("Mountain Standard Time", "America/Denver"), - Map.entry("Central America Standard Time", "America/Guatemala"), - Map.entry("Central Standard Time", "America/Chicago"), - Map.entry("Easter Island Standard Time", "Pacific/Easter"), - Map.entry("Central Standard Time (Mexico)", "America/Mexico_City"), - Map.entry("Canada Central Standard Time", "America/Regina"), - Map.entry("SA Pacific Standard Time", "America/Bogota"), - Map.entry("Eastern Standard Time (Mexico)", "America/Cancun"), - Map.entry("Eastern Standard Time", "America/New_York"), - Map.entry("Haiti Standard Time", "America/Port-au-Prince"), - Map.entry("Cuba Standard Time", "America/Havana"), - Map.entry("US Eastern Standard Time", "America/Indianapolis"), - Map.entry("Turks And Caicos Standard Time", "America/Grand_Turk"), - Map.entry("Paraguay Standard Time", "America/Asuncion"), - Map.entry("Atlantic Standard Time", "America/Halifax"), - Map.entry("Venezuela Standard Time", "America/Caracas"), - Map.entry("Central Brazilian Standard Time", "America/Cuiaba"), - Map.entry("SA Western Standard Time", "America/La_Paz"), - Map.entry("Pacific SA Standard Time", "America/Santiago"), - Map.entry("Newfoundland Standard Time", "America/St_Johns"), - Map.entry("Tocantins Standard Time", "America/Araguaina"), - Map.entry("E. South America Standard Time", "America/Sao_Paulo"), - Map.entry("SA Eastern Standard Time", "America/Cayenne"), - Map.entry("Argentina Standard Time", "America/Buenos_Aires"), - Map.entry("Greenland Standard Time", "America/Godthab"), - Map.entry("Montevideo Standard Time", "America/Montevideo"), - Map.entry("Magallanes Standard Time", "America/Punta_Arenas"), - Map.entry("Saint Pierre Standard Time", "America/Miquelon"), - Map.entry("Bahia Standard Time", "America/Bahia"), - Map.entry("UTC-02", "Etc/GMT+2"), - Map.entry("Azores Standard Time", "Atlantic/Azores"), - Map.entry("Cape Verde Standard Time", "Atlantic/Cape_Verde"), - Map.entry("UTC", "Etc/GMT"), - Map.entry("GMT Standard Time", "Europe/London"), - Map.entry("Greenwich Standard Time", "Atlantic/Reykjavik"), - Map.entry("Sao Tome Standard Time", "Africa/Sao_Tome"), - Map.entry("Morocco Standard Time", "Africa/Casablanca"), - Map.entry("W. Europe Standard Time", "Europe/Berlin"), - Map.entry("Central Europe Standard Time", "Europe/Budapest"), - Map.entry("Romance Standard Time", "Europe/Paris"), - Map.entry("Central European Standard Time", "Europe/Warsaw"), - Map.entry("W. Central Africa Standard Time", "Africa/Lagos"), - Map.entry("Jordan Standard Time", "Asia/Amman"), - Map.entry("GTB Standard Time", "Europe/Bucharest"), - Map.entry("Middle East Standard Time", "Asia/Beirut"), - Map.entry("Egypt Standard Time", "Africa/Cairo"), - Map.entry("E. Europe Standard Time", "Europe/Chisinau"), - Map.entry("Syria Standard Time", "Asia/Damascus"), - Map.entry("West Bank Standard Time", "Asia/Hebron"), - Map.entry("South Africa Standard Time", "Africa/Johannesburg"), - Map.entry("FLE Standard Time", "Europe/Kiev"), - Map.entry("Israel Standard Time", "Asia/Jerusalem"), - Map.entry("Kaliningrad Standard Time", "Europe/Kaliningrad"), - Map.entry("Sudan Standard Time", "Africa/Khartoum"), - Map.entry("Libya Standard Time", "Africa/Tripoli"), - Map.entry("Namibia Standard Time", "Africa/Windhoek"), - Map.entry("Arabic Standard Time", "Asia/Baghdad"), - Map.entry("Turkey Standard Time", "Europe/Istanbul"), - Map.entry("Arab Standard Time", "Asia/Riyadh"), - Map.entry("Belarus Standard Time", "Europe/Minsk"), - Map.entry("Russian Standard Time", "Europe/Moscow"), - Map.entry("E. Africa Standard Time", "Africa/Nairobi"), - Map.entry("Iran Standard Time", "Asia/Tehran"), - Map.entry("Arabian Standard Time", "Asia/Dubai"), - Map.entry("Astrakhan Standard Time", "Europe/Astrakhan"), - Map.entry("Azerbaijan Standard Time", "Asia/Baku"), - Map.entry("Russia Time Zone 3", "Europe/Samara"), - Map.entry("Mauritius Standard Time", "Indian/Mauritius"), - Map.entry("Saratov Standard Time", "Europe/Saratov"), - Map.entry("Georgian Standard Time", "Asia/Tbilisi"), - Map.entry("Volgograd Standard Time", "Europe/Volgograd"), - Map.entry("Caucasus Standard Time", "Asia/Yerevan"), - Map.entry("Afghanistan Standard Time", "Asia/Kabul"), - Map.entry("West Asia Standard Time", "Asia/Tashkent"), - Map.entry("Ekaterinburg Standard Time", "Asia/Yekaterinburg"), - Map.entry("Pakistan Standard Time", "Asia/Karachi"), - Map.entry("Qyzylorda Standard Time", "Asia/Qyzylorda"), - Map.entry("India Standard Time", "Asia/Calcutta"), - Map.entry("Sri Lanka Standard Time", "Asia/Colombo"), - Map.entry("Nepal Standard Time", "Asia/Katmandu"), - Map.entry("Central Asia Standard Time", "Asia/Almaty"), - Map.entry("Bangladesh Standard Time", "Asia/Dhaka"), - Map.entry("Omsk Standard Time", "Asia/Omsk"), - Map.entry("Myanmar Standard Time", "Asia/Rangoon"), - Map.entry("SE Asia Standard Time", "Asia/Bangkok"), - Map.entry("Altai Standard Time", "Asia/Barnaul"), - Map.entry("W. Mongolia Standard Time", "Asia/Hovd"), - Map.entry("North Asia Standard Time", "Asia/Krasnoyarsk"), - Map.entry("N. Central Asia Standard Time", "Asia/Novosibirsk"), - Map.entry("Tomsk Standard Time", "Asia/Tomsk"), - Map.entry("China Standard Time", "Asia/Shanghai"), - Map.entry("North Asia East Standard Time", "Asia/Irkutsk"), - Map.entry("Singapore Standard Time", "Asia/Singapore"), - Map.entry("W. Australia Standard Time", "Australia/Perth"), - Map.entry("Taipei Standard Time", "Asia/Taipei"), - Map.entry("Ulaanbaatar Standard Time", "Asia/Ulaanbaatar"), - Map.entry("Aus Central W. Standard Time", "Australia/Eucla"), - Map.entry("Transbaikal Standard Time", "Asia/Chita"), - Map.entry("Tokyo Standard Time", "Asia/Tokyo"), - Map.entry("North Korea Standard Time", "Asia/Pyongyang"), - Map.entry("Korea Standard Time", "Asia/Seoul"), - Map.entry("Yakutsk Standard Time", "Asia/Yakutsk"), - Map.entry("Cen. Australia Standard Time", "Australia/Adelaide"), - Map.entry("AUS Central Standard Time", "Australia/Darwin"), - Map.entry("E. Australia Standard Time", "Australia/Brisbane"), - Map.entry("AUS Eastern Standard Time", "Australia/Sydney"), - Map.entry("West Pacific Standard Time", "Pacific/Port_Moresby"), - Map.entry("Tasmania Standard Time", "Australia/Hobart"), - Map.entry("Vladivostok Standard Time", "Asia/Vladivostok"), - Map.entry("Lord Howe Standard Time", "Australia/Lord_Howe"), - Map.entry("Bougainville Standard Time", "Pacific/Bougainville"), - Map.entry("Russia Time Zone 10", "Asia/Srednekolymsk"), - Map.entry("Magadan Standard Time", "Asia/Magadan"), - Map.entry("Norfolk Standard Time", "Pacific/Norfolk"), - Map.entry("Sakhalin Standard Time", "Asia/Sakhalin"), - Map.entry("Central Pacific Standard Time", "Pacific/Guadalcanal"), - Map.entry("Russia Time Zone 11", "Asia/Kamchatka"), - Map.entry("New Zealand Standard Time", "Pacific/Auckland"), - Map.entry("UTC+12", "Etc/GMT-12"), - Map.entry("Fiji Standard Time", "Pacific/Fiji"), - Map.entry("Chatham Islands Standard Time", "Pacific/Chatham"), - Map.entry("UTC+13", "Etc/GMT-13"), - Map.entry("Tonga Standard Time", "Pacific/Tongatapu"), - Map.entry("Samoa Standard Time", "Pacific/Apia"), - Map.entry("Line Islands Standard Time", "Pacific/Kiritimati") - ); - - public static String getIanaFromWindows(String windowsTimeZone) { - String iana = timeZoneIdMap.get(windowsTimeZone); - - // If a mapping was not found, assume the value passed - // was already an IANA identifier - return (iana == null) ? windowsTimeZone : iana; - } - - public static ZoneId getZoneIdFromWindows(String windowsTimeZone) { - String timeZoneId = getIanaFromWindows(windowsTimeZone); - - return ZoneId.of(timeZoneId); - } -} -// diff --git a/demo/graphtutorial/src/main/resources/graphtutorial/oAuth.properties.example b/demo/graphtutorial/src/main/resources/graphtutorial/oAuth.properties.example deleted file mode 100644 index 7cef603..0000000 --- a/demo/graphtutorial/src/main/resources/graphtutorial/oAuth.properties.example +++ /dev/null @@ -1,2 +0,0 @@ -app.id=YOUR_APP_ID_HERE -app.scopes=User.Read,MailboxSettings.Read,Calendars.ReadWrite diff --git a/demo/graphtutorial/src/test/java/graphtutorial/AppTest.java b/demo/graphtutorial/src/test/java/graphtutorial/AppTest.java deleted file mode 100644 index 81b4e21..0000000 --- a/demo/graphtutorial/src/test/java/graphtutorial/AppTest.java +++ /dev/null @@ -1,11 +0,0 @@ -/* - * This Java source file was generated by the Gradle 'init' task. - */ -package graphtutorial; - -//import org.junit.Test; -//import static org.junit.Assert.*; - -public class AppTest { - -} From d3973b3ebed7fcfc36d0755abcfe86cc1547b1e8 Mon Sep 17 00:00:00 2001 From: Jason Johnston Date: Tue, 12 Apr 2022 13:25:05 -0400 Subject: [PATCH 2/8] Created new app --- .gitignore | 1 + demo/graphtutorial/.gitattributes | 6 + demo/graphtutorial/.gitignore | 5 + demo/graphtutorial/app/build.gradle | 40 +++ .../app/src/main/java/graphtutorial/App.java | 209 ++++++++++++++++ .../src/main/java/graphtutorial/Graph.java | 201 +++++++++++++++ .../graphtutorial/oAuth.properties.example | 5 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59821 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + demo/graphtutorial/gradlew | 234 ++++++++++++++++++ demo/graphtutorial/gradlew.bat | 89 +++++++ demo/graphtutorial/settings.gradle | 11 + 12 files changed, 806 insertions(+) create mode 100644 demo/graphtutorial/.gitattributes create mode 100644 demo/graphtutorial/.gitignore create mode 100644 demo/graphtutorial/app/build.gradle create mode 100644 demo/graphtutorial/app/src/main/java/graphtutorial/App.java create mode 100644 demo/graphtutorial/app/src/main/java/graphtutorial/Graph.java create mode 100644 demo/graphtutorial/app/src/main/resources/graphtutorial/oAuth.properties.example create mode 100644 demo/graphtutorial/gradle/wrapper/gradle-wrapper.jar create mode 100644 demo/graphtutorial/gradle/wrapper/gradle-wrapper.properties create mode 100644 demo/graphtutorial/gradlew create mode 100644 demo/graphtutorial/gradlew.bat create mode 100644 demo/graphtutorial/settings.gradle diff --git a/.gitignore b/.gitignore index 52cf8a5..92ba6ea 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ release.properties dependency-reduced-pom.xml buildNumber.properties .mvn/timing.properties +bin/ # Avoid ignoring Maven wrapper jar file (.jar files are usually ignored) !/.mvn/wrapper/maven-wrapper.jar diff --git a/demo/graphtutorial/.gitattributes b/demo/graphtutorial/.gitattributes new file mode 100644 index 0000000..00a51af --- /dev/null +++ b/demo/graphtutorial/.gitattributes @@ -0,0 +1,6 @@ +# +# https://help.github.com/articles/dealing-with-line-endings/ +# +# These are explicitly windows files and should use crlf +*.bat text eol=crlf + diff --git a/demo/graphtutorial/.gitignore b/demo/graphtutorial/.gitignore new file mode 100644 index 0000000..1b6985c --- /dev/null +++ b/demo/graphtutorial/.gitignore @@ -0,0 +1,5 @@ +# Ignore Gradle project-specific cache directory +.gradle + +# Ignore Gradle build output directory +build diff --git a/demo/graphtutorial/app/build.gradle b/demo/graphtutorial/app/build.gradle new file mode 100644 index 0000000..763eae4 --- /dev/null +++ b/demo/graphtutorial/app/build.gradle @@ -0,0 +1,40 @@ +/* + * This file was generated by the Gradle 'init' task. + * + * This generated file contains a sample Java application project to get you started. + * For more details take a look at the 'Building Java & JVM projects' chapter in the Gradle + * User Manual available at https://docs.gradle.org/7.4.2/userguide/building_java_projects.html + */ + +plugins { + // Apply the application plugin to add support for building a CLI application in Java. + id 'application' +} + +repositories { + // Use Maven Central for resolving dependencies. + mavenCentral() +} + +// +dependencies { + // Use JUnit test framework. + testImplementation 'junit:junit:4.13.2' + + // This dependency is used by the application. + implementation 'com.google.guava:guava:30.1.1-jre' + implementation 'com.azure:azure-identity:1.5.0' + implementation 'com.microsoft.graph:microsoft-graph:5.19.0' +} +// + +application { + // Define the main class for the application. + mainClass = 'graphtutorial.App' +} + +// +run { + standardInput = System.in +} +// diff --git a/demo/graphtutorial/app/src/main/java/graphtutorial/App.java b/demo/graphtutorial/app/src/main/java/graphtutorial/App.java new file mode 100644 index 0000000..634074f --- /dev/null +++ b/demo/graphtutorial/app/src/main/java/graphtutorial/App.java @@ -0,0 +1,209 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +// +package graphtutorial; + +import java.io.IOException; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.time.format.FormatStyle; +import java.util.InputMismatchException; +import java.util.Properties; +import java.util.Scanner; + +import com.microsoft.graph.models.Message; +import com.microsoft.graph.models.User; +// +import com.microsoft.graph.requests.MessageCollectionPage; +import com.microsoft.graph.requests.UserCollectionPage; + +public class App { + // + public static void main(String[] args) { + System.out.println("Java Graph Tutorial"); + System.out.println(); + + final Properties oAuthProperties = new Properties(); + try { + oAuthProperties.load(App.class.getResourceAsStream("oAuth.properties")); + } catch (IOException e) { + System.out.println("Unable to read OAuth configuration. Make sure you have a properly formatted oAuth.properties file. See README for details."); + return; + } + + initializeGraph(oAuthProperties); + + greetUser(); + + Scanner input = new Scanner(System.in); + + int choice = -1; + + while (choice != 0) { + System.out.println("Please choose one of the following options:"); + System.out.println("0. Exit"); + System.out.println("1. Display access token"); + System.out.println("2. List my inbox"); + System.out.println("3. Send mail"); + System.out.println("4. List users (required app-only)"); + System.out.println("5. Make a Graph call"); + + try { + choice = input.nextInt(); + } catch (InputMismatchException ex) { + // Skip over non-integer input + } + + input.nextLine(); + + // Process user choice + switch(choice) { + case 0: + // Exit the program + System.out.println("Goodbye..."); + break; + case 1: + // Display access token + displayAccessToken(); + break; + case 2: + // List emails from user's inbox + listInbox(); + break; + case 3: + // Send an email message + sendMail(); + break; + case 4: + // List users + listUsers(); + break; + case 5: + // Run any Graph code + makeGraphCall(); + break; + default: + System.out.println("Invalid choice"); + } + } + + input.close(); + } + // + + // + private static void initializeGraph(Properties properties) { + try { + Graph.initializeGraphForUserAuth(properties, + challenge -> System.out.println(challenge.getMessage())); + } catch (Exception e) + { + System.out.println("Error initializing Graph for user auth"); + System.out.println(e.getMessage()); + } + } + // + + // + private static void greetUser() { + try { + final User user = Graph.getUser(); + // For Work/school accounts, email is in mail property + // Personal accounts, email is in userPrincipalName + final String email = user.mail == null ? user.userPrincipalName : user.mail; + System.out.println("Hello, " + user.displayName + "!"); + System.out.println("Email: " + email); + } catch (Exception e) { + System.out.println("Error getting user"); + System.out.println(e.getMessage()); + } + } + // + + // + private static void displayAccessToken() { + try { + final String accessToken = Graph.getUserToken(); + System.out.println("Access token: " + accessToken); + } catch (Exception e) { + System.out.println("Error getting access token"); + System.out.println(e.getMessage()); + } + } + // + + // + private static void listInbox() { + try { + final MessageCollectionPage messages = Graph.getInbox(); + + // Output each message's details + for (Message message: messages.getCurrentPage()) { + System.out.println("Message: " + message.subject); + System.out.println(" From: " + message.from.emailAddress.name); + System.out.println(" Status: " + (message.isRead ? "Read" : "Unread")); + System.out.println(" Received: " + message.receivedDateTime + // Values are returned in UTC, convert to local time zone + .atZoneSameInstant(ZoneId.systemDefault()).toLocalDateTime() + .format(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT))); + } + + final Boolean moreMessagesAvailable = messages.getNextPage() != null; + System.out.println("\nMore messages available? " + moreMessagesAvailable); + } catch (Exception e) { + System.out.println("Error getting inbox"); + System.out.println(e.getMessage()); + } + } + // + + // + private static void sendMail() { + try { + // Send mail to the signed-in user + // Get the user for their email address + final User user = Graph.getUser(); + final String email = user.mail == null ? user.userPrincipalName : user.mail; + + Graph.sendMail("Testing Microsoft Graph", "Hello world!", email); + System.out.println("\nMail sent."); + } catch (Exception e) { + System.out.println("Error sending mail"); + System.out.println(e.getMessage()); + } + } + // + + // + private static void listUsers() { + try { + final UserCollectionPage users = Graph.getUsers(); + + // Output each user's details + for (User user: users.getCurrentPage()) { + System.out.println("User: " + user.displayName); + System.out.println(" ID: " + user.id); + System.out.println(" Email: " + user.mail); + } + + final Boolean moreUsersAvailable = users.getNextPage() != null; + System.out.println("\nMore users available? " + moreUsersAvailable); + } catch (Exception e) { + System.out.println("Error getting users"); + System.out.println(e.getMessage()); + } + } + // + + // + private static void makeGraphCall() { + try { + Graph.makeGraphCall(); + } catch (Exception e) { + System.out.println("Error making Graph call"); + System.out.println(e.getMessage()); + } + } + // +} diff --git a/demo/graphtutorial/app/src/main/java/graphtutorial/Graph.java b/demo/graphtutorial/app/src/main/java/graphtutorial/Graph.java new file mode 100644 index 0000000..59e0907 --- /dev/null +++ b/demo/graphtutorial/app/src/main/java/graphtutorial/Graph.java @@ -0,0 +1,201 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +// +package graphtutorial; + +import java.util.Arrays; +import java.util.List; +import java.util.Properties; +import java.util.function.Consumer; + +import com.azure.core.credential.AccessToken; +import com.azure.core.credential.TokenRequestContext; +import com.azure.identity.ClientSecretCredential; +import com.azure.identity.ClientSecretCredentialBuilder; +import com.azure.identity.DeviceCodeCredential; +import com.azure.identity.DeviceCodeCredentialBuilder; +import com.azure.identity.DeviceCodeInfo; +import com.microsoft.graph.authentication.TokenCredentialAuthProvider; +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 com.microsoft.graph.models.User; +import com.microsoft.graph.models.UserSendMailParameterSet; +import com.microsoft.graph.requests.GraphServiceClient; +import com.microsoft.graph.requests.MessageCollectionPage; +import com.microsoft.graph.requests.UserCollectionPage; + +import okhttp3.Request; +// + +public class Graph { + // + private static Properties _properties; + private static DeviceCodeCredential _deviceCodeCredential; + private static GraphServiceClient _userClient; + + public static void initializeGraphForUserAuth(Properties properties, Consumer challenge) throws Exception { + // Ensure properties isn't null + if (properties == null) { + throw new Exception("Properties cannot be null"); + } + + _properties = properties; + + final String clientId = properties.getProperty("app.clientId"); + final String authTenantId = properties.getProperty("app.authTenant"); + final List graphUserScopes = Arrays + .asList(properties.getProperty("app.graphUserScopes").split(",")); + + _deviceCodeCredential = new DeviceCodeCredentialBuilder() + .clientId(clientId) + .tenantId(authTenantId) + .challengeConsumer(challenge) + .build(); + + final TokenCredentialAuthProvider authProvider = + new TokenCredentialAuthProvider(graphUserScopes, _deviceCodeCredential); + + _userClient = GraphServiceClient.builder() + .authenticationProvider(authProvider) + .buildClient(); + } + // + + // + public static String getUserToken() throws Exception { + // Ensure credential isn't null + if (_deviceCodeCredential == null) { + throw new Exception("Graph has not been initialized for user auth"); + } + + final String[] graphUserScopes = _properties.getProperty("app.graphUserScopes").split(","); + + final TokenRequestContext context = new TokenRequestContext(); + context.addScopes(graphUserScopes); + + final AccessToken token = _deviceCodeCredential.getToken(context).block(); + return token.getToken(); + } + // + + // + public static User getUser() throws Exception { + // Ensure client isn't null + if (_userClient == null) { + throw new Exception("Graph has not been initialized for user auth"); + } + + return _userClient.me() + .buildRequest() + .select("displayName,mail,userPrincipalName") + .get(); + } + // + + // + public static MessageCollectionPage getInbox() throws Exception { + // Ensure client isn't null + if (_userClient == null) { + throw new Exception("Graph has not been initialized for user auth"); + } + + return _userClient.me() + .mailFolders("inbox") + .messages() + .buildRequest() + .select("from,isRead,receivedDateTime,subject") + .top(25) + .orderBy("receivedDateTime DESC") + .get(); + } + // + + // + public static void sendMail(String subject, String body, String recipient) throws Exception { + // Ensure client isn't null + if (_userClient == null) { + throw new Exception("Graph has not been initialized for user auth"); + } + + // Create a new message + final Message message = new Message(); + message.subject = subject; + message.body = new ItemBody(); + message.body.content = body; + message.body.contentType = BodyType.TEXT; + + final Recipient toRecipient = new Recipient(); + toRecipient.emailAddress = new EmailAddress(); + toRecipient.emailAddress.address = recipient; + message.toRecipients = List.of(toRecipient); + + // Send the message + _userClient.me() + .sendMail(UserSendMailParameterSet.newBuilder() + .withMessage(message) + .build()) + .buildRequest() + .post(); + } + // + + // + private static ClientSecretCredential _clientSecretCredential; + private static GraphServiceClient _appClient; + + private static void ensureGraphForAppOnlyAuth() throws Exception { + // Ensure _properties isn't null + if (_properties == null) { + throw new Exception("Properties cannot be null"); + } + + if (_clientSecretCredential == null) { + final String clientId = _properties.getProperty("app.clientId"); + final String tenantId = _properties.getProperty("app.tenantId"); + final String clientSecret = _properties.getProperty("app.clientSecret"); + + _clientSecretCredential = new ClientSecretCredentialBuilder() + .clientId(clientId) + .tenantId(tenantId) + .clientSecret(clientSecret) + .build(); + } + + if (_appClient == null) { + final TokenCredentialAuthProvider authProvider = + new TokenCredentialAuthProvider( + List.of("https://graph.microsoft.com/.default"), _clientSecretCredential); + + _appClient = GraphServiceClient.builder() + .authenticationProvider(authProvider) + .buildClient(); + } + } + // + + // + public static UserCollectionPage getUsers() throws Exception { + ensureGraphForAppOnlyAuth(); + + return _appClient.users() + .buildRequest() + .select("displayName,id,mail") + .top(25) + .orderBy("displayName") + .get(); + } + // + + // + public static void makeGraphCall() { + // INSERT YOUR CODE HERE + // Note: if using _appClient, be sure to call ensureGraphForAppOnlyAuth + // before using it. + // ensureGraphForAppOnlyAuth(); + } + // +} diff --git a/demo/graphtutorial/app/src/main/resources/graphtutorial/oAuth.properties.example b/demo/graphtutorial/app/src/main/resources/graphtutorial/oAuth.properties.example new file mode 100644 index 0000000..4b54e97 --- /dev/null +++ b/demo/graphtutorial/app/src/main/resources/graphtutorial/oAuth.properties.example @@ -0,0 +1,5 @@ +app.clientId=YOUR_CLIENT_ID_HERE +app.clientSecret=YOUR_CLIENT_SECRET_HERE_IF_USING_APP_ONLY +app.tenantId=YOUR_TENANT_ID_HERE_IF_USING_APP_ONLY +app.authTenant=common +app.graphUserScopes=user.read,mail.read,mail.send diff --git a/demo/graphtutorial/gradle/wrapper/gradle-wrapper.jar b/demo/graphtutorial/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..41d9927a4d4fb3f96a785543079b8df6723c946b GIT binary patch literal 59821 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 literal 0 HcmV?d00001 diff --git a/demo/graphtutorial/gradle/wrapper/gradle-wrapper.properties b/demo/graphtutorial/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..aa991fc --- /dev/null +++ b/demo/graphtutorial/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/demo/graphtutorial/gradlew b/demo/graphtutorial/gradlew new file mode 100644 index 0000000..1b6c787 --- /dev/null +++ b/demo/graphtutorial/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/demo/graphtutorial/gradlew.bat b/demo/graphtutorial/gradlew.bat new file mode 100644 index 0000000..107acd3 --- /dev/null +++ b/demo/graphtutorial/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/demo/graphtutorial/settings.gradle b/demo/graphtutorial/settings.gradle new file mode 100644 index 0000000..9e59259 --- /dev/null +++ b/demo/graphtutorial/settings.gradle @@ -0,0 +1,11 @@ +/* + * This file was generated by the Gradle 'init' task. + * + * The settings file is used to specify which projects to include in your build. + * + * Detailed information about configuring a multi-project build in Gradle can be found + * in the user manual at https://docs.gradle.org/7.4.2/userguide/multi_project_builds.html + */ + +rootProject.name = 'graphtutorial' +include('app') From 62da75c3845be274323df827835fcb4ec8448f81 Mon Sep 17 00:00:00 2001 From: Jason Johnston Date: Tue, 12 Apr 2022 13:25:41 -0400 Subject: [PATCH 3/8] Remove tutorial source files Moved to the training repo --- tutorial/01-intro.md | 22 --- tutorial/02-create-app.md | 99 ------------ tutorial/03-register-app.md | 25 ---- tutorial/04-add-aad-auth.md | 131 ---------------- tutorial/05-add-ms-graph.md | 141 ------------------ tutorial/06-create-event.md | 21 --- tutorial/07-completed.md | 7 - tutorial/images/aad-application-id.png | Bin 23455 -> 0 bytes tutorial/images/aad-default-client-type.png | Bin 12047 -> 0 bytes .../images/aad-portal-app-registrations.png | Bin 68909 -> 0 bytes tutorial/images/aad-redirect-uris.png | Bin 30717 -> 0 bytes tutorial/images/aad-register-an-app.png | Bin 16133 -> 0 bytes 12 files changed, 446 deletions(-) delete mode 100644 tutorial/01-intro.md delete mode 100644 tutorial/02-create-app.md delete mode 100644 tutorial/03-register-app.md delete mode 100644 tutorial/04-add-aad-auth.md delete mode 100644 tutorial/05-add-ms-graph.md delete mode 100644 tutorial/06-create-event.md delete mode 100644 tutorial/07-completed.md delete mode 100644 tutorial/images/aad-application-id.png delete mode 100644 tutorial/images/aad-default-client-type.png delete mode 100644 tutorial/images/aad-portal-app-registrations.png delete mode 100644 tutorial/images/aad-redirect-uris.png delete mode 100644 tutorial/images/aad-register-an-app.png diff --git a/tutorial/01-intro.md b/tutorial/01-intro.md deleted file mode 100644 index bbb2e05..0000000 --- a/tutorial/01-intro.md +++ /dev/null @@ -1,22 +0,0 @@ - - -This tutorial teaches you how to build a Java console app that uses the Microsoft Graph API to retrieve calendar information for a user. - -> [!TIP] -> If you prefer to just download the completed tutorial, you can download or clone the [GitHub repository](https://github.com/microsoftgraph/msgraph-training-java). - -## Prerequisites - -Before you start this tutorial, you should have the [Java SE Development Kit (JDK)](https://java.com/en/download/faq/develop.xml) and [Gradle](https://gradle.org/) installed on your development machine. If you do not have the JDK or Gradle, visit the previous links for download options. - -You should also have either a personal Microsoft account with a mailbox on Outlook.com, or a Microsoft work or school account. If you don't have a Microsoft account, there are a couple of options to get a free account: - -- You can [sign up for a new personal Microsoft account](https://signup.live.com/signup?wa=wsignin1.0&rpsnv=12&ct=1454618383&rver=6.4.6456.0&wp=MBI_SSL_SHARED&wreply=https://mail.live.com/default.aspx&id=64855&cbcxt=mai&bk=1454618383&uiflavor=web&uaid=b213a65b4fdc484382b6622b3ecaa547&mkt=E-US&lc=1033&lic=1). -- You can [sign up for the Microsoft 365 Developer Program](https://developer.microsoft.com/microsoft-365/dev-program) to get a free Microsoft 365 subscription. - -> [!NOTE] -> This tutorial was written with OpenJDK version 14.0.0.36 and Gradle 6.7.1. The steps in this guide may work with other versions, but that has not been tested. - -## Feedback - -Please provide any feedback on this tutorial in the [GitHub repository](https://github.com/microsoftgraph/msgraph-training-java). diff --git a/tutorial/02-create-app.md b/tutorial/02-create-app.md deleted file mode 100644 index 8169da5..0000000 --- a/tutorial/02-create-app.md +++ /dev/null @@ -1,99 +0,0 @@ - - -In this section you'll create a basic Java console app. - -1. Open your command-line interface (CLI) in a directory where you want to create the project. Run the following command to create a new Gradle project. - - ```Shell - gradle init --dsl groovy --test-framework junit --type java-application --project-name graphtutorial --package graphtutorial - ``` - -1. Once the project is created, verify that it works by running the following command to run the app in your CLI. - - ```Shell - ./gradlew --console plain run - ``` - - If it works, the app should output `Hello World.`. - -## Install dependencies - -Before moving on, add some additional dependencies that you will use later. - -- [Azure Identity client library for Java](https://github.com/Azure/azure-sdk-for-java/tree/master/sdk/identity/azure-identity) to authenticate the user and acquire access tokens. -- [Microsoft Graph SDK for Java](https://github.com/microsoftgraph/msgraph-sdk-java) to make calls to the Microsoft Graph. - -1. Open **./build.gradle**. Update the `dependencies` section to add those dependencies. - - :::code language="gradle" source="../demo/graphtutorial/build.gradle" id="DependenciesSnippet" highlight="7-8"::: - -1. Add the following to the end of **./build.gradle**. - - :::code language="gradle" source="../demo/graphtutorial/build.gradle" id="StandardInputSnippet"::: - -The next time you build the project, Gradle will download those dependencies. - -## Design the app - -1. Open the **./src/main/java/graphtutorial/App.java** file and replace its contents with the following. - - ```java - package graphtutorial; - - import java.util.InputMismatchException; - import java.util.Scanner; - - /** - * Graph Tutorial - * - */ - public class App { - public static void main(String[] args) { - System.out.println("Java Graph Tutorial"); - System.out.println(); - - Scanner input = new Scanner(System.in); - - int choice = -1; - - while (choice != 0) { - System.out.println("Please choose one of the following options:"); - System.out.println("0. Exit"); - System.out.println("1. Display access token"); - System.out.println("2. View this week's calendar"); - System.out.println("3. Add an event"); - - try { - choice = input.nextInt(); - } catch (InputMismatchException ex) { - // Skip over non-integer input - } - - input.nextLine(); - - // Process user choice - switch(choice) { - case 0: - // Exit the program - System.out.println("Goodbye..."); - break; - case 1: - // Display access token - break; - case 2: - // List the calendar - break; - case 3: - // Create a new event - break; - default: - System.out.println("Invalid choice"); - } - } - - input.close(); - } - } - ``` - - This implements a basic menu and reads the user's choice from the command line. diff --git a/tutorial/03-register-app.md b/tutorial/03-register-app.md deleted file mode 100644 index 3b3c087..0000000 --- a/tutorial/03-register-app.md +++ /dev/null @@ -1,25 +0,0 @@ - - -In this exercise you will create a new Azure AD application using the Azure Active Directory admin center. - -1. Open a browser and navigate to the [Azure Active Directory admin center](https://aad.portal.azure.com) and login using a **personal account** (aka: Microsoft Account) or **Work or School Account**. - -1. Select **Azure Active Directory** in the left-hand navigation, then select **App registrations** under **Manage**. - - ![A screenshot of the App registrations ](./images/aad-portal-app-registrations.png) - -1. Select **New registration**. On the **Register an application** page, set the values as follows. - - - Set **Name** to `Java Graph Tutorial`. - - Set **Supported account types** to **Accounts in any organizational directory and personal Microsoft accounts**. - - Under **Redirect URI**, change the dropdown to **Public client (mobile & desktop)**, and set the value to `https://login.microsoftonline.com/common/oauth2/nativeclient`. - - ![A screenshot of the Register an application page](./images/aad-register-an-app.png) - -1. Choose **Register**. On the **Java Graph Tutorial** page, copy the value of the **Application (client) ID** and save it, you will need it in the next step. - - ![A screenshot of the application ID of the new app registration](./images/aad-application-id.png) - -1. Select **Authentication** under **Manage**. Locate the **Advanced settings** section and change the **Treat application as a public client** toggle to **Yes**, then choose **Save**. - - ![A screenshot of the Default client type section](./images/aad-default-client-type.png) diff --git a/tutorial/04-add-aad-auth.md b/tutorial/04-add-aad-auth.md deleted file mode 100644 index 7c49453..0000000 --- a/tutorial/04-add-aad-auth.md +++ /dev/null @@ -1,131 +0,0 @@ - - -In this exercise you will extend the application from the previous exercise to support authentication with Azure AD. This is required to obtain the necessary OAuth access token to call the Microsoft Graph. In this step you will integrate the [Microsoft Authentication Library (MSAL) for Java](https://github.com/AzureAD/microsoft-authentication-library-for-java) into the application. - -1. Create a new directory named **graphtutorial** in the **./src/main/resources** directory. - -1. Create a new file in the **./src/main/resources/graphtutorial** directory named **oAuth.properties**, and add the following text in that file. Replace `YOUR_APP_ID_HERE` with the application ID you created in the Azure portal. - - :::code language="ini" source="../demo/graphtutorial/src/main/resources/graphtutorial/oAuth.properties.example"::: - - The value of `app.scopes` contains the permission scopes the application requires. - - - **User.Read** allows the app to access the user's profile. - - **MailboxSettings.Read** allows the app to access settings from the user's mailbox, including the user's configured time zone. - - **Calendars.ReadWrite** allows the app to list the user's calendar and add new events to the calendar. - - > [!IMPORTANT] - > If you're using source control such as git, now would be a good time to exclude the **oAuth.properties** file from source control to avoid inadvertently leaking your app ID. - -1. Open **App.java** and add the following `import` statements. - - ```java - import java.io.IOException; - import java.util.Properties; - ``` - -1. Add the following code just before the `Scanner input = new Scanner(System.in);` line to load the **oAuth.properties** file. - - :::code language="java" source="../demo/graphtutorial/src/main/java/graphtutorial/App.java" id="LoadSettingsSnippet"::: - -## Implement sign-in - -1. Create a new file in the **./graphtutorial/src/main/java/graphtutorial** directory named **Graph.java** and add the following code. - - ```java - package graphtutorial; - - import java.net.URL; - import java.time.LocalDateTime; - import java.time.ZonedDateTime; - import java.time.format.DateTimeFormatter; - import java.util.LinkedList; - import java.util.List; - import java.util.Set; - - import okhttp3.Request; - - import com.azure.identity.DeviceCodeCredential; - import com.azure.identity.DeviceCodeCredentialBuilder; - - import com.microsoft.graph.authentication.TokenCredentialAuthProvider; - import com.microsoft.graph.logger.DefaultLogger; - import com.microsoft.graph.logger.LoggerLevel; - import com.microsoft.graph.models.Attendee; - import com.microsoft.graph.models.DateTimeTimeZone; - import com.microsoft.graph.models.EmailAddress; - import com.microsoft.graph.models.Event; - import com.microsoft.graph.models.ItemBody; - import com.microsoft.graph.models.User; - import com.microsoft.graph.models.AttendeeType; - import com.microsoft.graph.models.BodyType; - import com.microsoft.graph.options.HeaderOption; - import com.microsoft.graph.options.Option; - import com.microsoft.graph.options.QueryOption; - import com.microsoft.graph.requests.GraphServiceClient; - import com.microsoft.graph.requests.EventCollectionPage; - import com.microsoft.graph.requests.EventCollectionRequestBuilder; - - public class Graph { - - private static GraphServiceClient graphClient = null; - private static TokenCredentialAuthProvider authProvider = null; - - public static void initializeGraphAuth(String applicationId, List scopes) { - // Create the auth provider - final DeviceCodeCredential credential = new DeviceCodeCredentialBuilder() - .clientId(applicationId) - .challengeConsumer(challenge -> System.out.println(challenge.getMessage())) - .build(); - - authProvider = new TokenCredentialAuthProvider(scopes, credential); - - // Create default logger to only log errors - DefaultLogger logger = new DefaultLogger(); - logger.setLoggingLevel(LoggerLevel.ERROR); - - // Build a Graph client - graphClient = GraphServiceClient.builder() - .authenticationProvider(authProvider) - .logger(logger) - .buildClient(); - } - - public static String getUserAccessToken() - { - try { - URL meUrl = new URL("https://graph.microsoft.com/v1.0/me"); - return authProvider.getAuthorizationTokenAsync(meUrl).get(); - } catch(Exception ex) { - return null; - } - } - } - ``` - -1. In **App.java**, add the following code just before the `Scanner input = new Scanner(System.in);` line to get an access token. - - ```java - // Initialize Graph with auth settings - Graph.initializeGraphAuth(appId, appScopes); - final String accessToken = Graph.getUserAccessToken(); - ``` - -1. Add the following line after the `// Display access token` comment. - - ```java - System.out.println("Access token: " + accessToken); - ``` - -1. Run the app. The application displays a URL and device code. - - ```Shell - Java Graph Tutorial - - To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code F7CG945YZ to authenticate. - ``` - -1. Open a browser and browse to the URL displayed. Enter the provided code and sign in. Once completed, return to the application and choose the **1. Display access token** option to display the access token. - -> [!TIP] -> Access tokens for Microsoft work or school accounts can be parsed for troubleshooting purposes at [https://jwt.ms](https://jwt.ms). Access tokens for personal Microsoft accounts use a proprietary format and cannot be parsed. diff --git a/tutorial/05-add-ms-graph.md b/tutorial/05-add-ms-graph.md deleted file mode 100644 index bb73260..0000000 --- a/tutorial/05-add-ms-graph.md +++ /dev/null @@ -1,141 +0,0 @@ - - -In this exercise you will incorporate the Microsoft Graph into the application. For this application, you will use the [Microsoft Graph SDK for Java](https://github.com/microsoftgraph/msgraph-sdk-java) to make calls to Microsoft Graph. - -## Get user details - -1. Create a new file in the **./graphtutorial/src/main/java/graphtutorial** directory named **Graph.java** and add the following code. - - :::code language="java" source="../demo/graphtutorial/src/main/java/graphtutorial/Graph.java" id="GetUserSnippet"::: - -1. Add the following `import` statement at the top of **App.java**. - - ```java - import com.microsoft.graph.models.User; - ``` - -1. Add the following code in **App.java** just before the `Scanner input = new Scanner(System.in);` line to get the user and output the user's display name. - - ```java - // Greet the user - User user = Graph.getUser(); - System.out.println("Welcome " + user.displayName); - System.out.println("Time zone: " + user.mailboxSettings.timeZone); - System.out.println(); - ``` - -1. Run the app. After you log in the app welcomes you by name. - -## Get calendar events from Outlook - -1. Add the following function to the `Graph` class in **Graph.java** to get events from the user's calendar. - - :::code language="java" source="../demo/graphtutorial/src/main/java/graphtutorial/Graph.java" id="GetEventsSnippet"::: - -Consider what this code is doing. - -- The URL that will be called is `/me/calendarview`. - - `QueryOption` objects are used to add the `startDateTime` and `endDateTime` parameters, setting the start and end of the calendar view. - - A `QueryOption` object is used to add the `$orderby` parameter, sorting the results by start time. - - A `HeaderOption` object is used to add the `Prefer: outlook.timezone` header, causing the start and end times to be adjusted to the user's time zone. - - The `select` function limits the fields returned for each event to just those the app will actually use. - - The `top` function limits the number of events in the response to a maximum of 25. -- The `getNextPage` function is used to request additional pages of results if there are more than 25 events in the current week. - -1. Create a new file in the **./graphtutorial/src/main/java/graphtutorial** directory named **GraphToIana.java** and add the following code. - - :::code language="java" source="../demo/graphtutorial/src/main/java/graphtutorial/GraphToIana.java" id="zoneMappingsSnippet"::: - - This class implements a simple lookup to convert Windows time zone names to IANA identifiers, and to generate a **ZoneId** based on a Windows time zone name. - -## Display the results - -1. Add the following `import` statements in **App.java**. - - ```java - import java.time.DayOfWeek; - import java.time.LocalDateTime; - import java.time.ZoneId; - import java.time.ZonedDateTime; - import java.time.format.DateTimeFormatter; - import java.time.format.DateTimeParseException; - import java.time.format.FormatStyle; - import java.time.temporal.ChronoUnit; - import java.time.temporal.TemporalAdjusters; - import java.util.HashSet; - import java.util.List; - import com.microsoft.graph.models.DateTimeTimeZone; - import com.microsoft.graph.models.Event; - ``` - -1. Add the following function to the `App` class to format the [dateTimeTimeZone](/graph/api/resources/datetimetimezone?view=graph-rest-1.0) properties from Microsoft Graph into a user-friendly format. - - :::code language="java" source="../demo/graphtutorial/src/main/java/graphtutorial/App.java" id="FormatDateSnippet"::: - -1. Add the following function to the `App` class to get the user's events and output them to the console. - - :::code language="java" source="../demo/graphtutorial/src/main/java/graphtutorial/App.java" id="ListEventsSnippet"::: - -1. Add the following just after the `// List the calendar` comment in the `main` function. - - ```java - listCalendarEvents(user.mailboxSettings.timeZone); - ``` - -1. Save all of your changes, build the app, then run it. Choose the **List calendar events** option to see a list of the user's events. - - ```Shell - Welcome Adele Vance - - Please choose one of the following options: - 0. Exit - 1. Display access token - 2. View this week's calendar - 3. Add an event - 2 - Events: - Subject: Weekly meeting - Organizer: Lynne Robbins - Start: 12/7/20, 2:00 PM (Pacific Standard Time) - End: 12/7/20, 3:00 PM (Pacific Standard Time) - Subject: Carpool - Organizer: Lynne Robbins - Start: 12/7/20, 4:00 PM (Pacific Standard Time) - End: 12/7/20, 5:30 PM (Pacific Standard Time) - Subject: Tailspin Toys Proposal Review + Lunch - Organizer: Lidia Holloway - Start: 12/8/20, 12:00 PM (Pacific Standard Time) - End: 12/8/20, 1:00 PM (Pacific Standard Time) - Subject: Project Tailspin - Organizer: Lidia Holloway - Start: 12/8/20, 3:00 PM (Pacific Standard Time) - End: 12/8/20, 4:30 PM (Pacific Standard Time) - Subject: Company Meeting - Organizer: Christie Cline - Start: 12/9/20, 8:30 AM (Pacific Standard Time) - End: 12/9/20, 11:00 AM (Pacific Standard Time) - Subject: Carpool - Organizer: Lynne Robbins - Start: 12/9/20, 4:00 PM (Pacific Standard Time) - End: 12/9/20, 5:30 PM (Pacific Standard Time) - Subject: Project Team Meeting - Organizer: Lidia Holloway - Start: 12/10/20, 8:00 AM (Pacific Standard Time) - End: 12/10/20, 9:30 AM (Pacific Standard Time) - Subject: Weekly Marketing Lunch - Organizer: Adele Vance - Start: 12/10/20, 12:00 PM (Pacific Standard Time) - End: 12/10/20, 1:00 PM (Pacific Standard Time) - Subject: Project Tailspin - Organizer: Lidia Holloway - Start: 12/10/20, 3:00 PM (Pacific Standard Time) - End: 12/10/20, 4:30 PM (Pacific Standard Time) - Subject: Lunch? - Organizer: Lynne Robbins - Start: 12/11/20, 12:00 PM (Pacific Standard Time) - End: 12/11/20, 1:00 PM (Pacific Standard Time) - Subject: Friday Unwinder - Organizer: Megan Bowen - Start: 12/11/20, 4:00 PM (Pacific Standard Time) - End: 12/11/20, 5:00 PM (Pacific Standard Time) - ``` diff --git a/tutorial/06-create-event.md b/tutorial/06-create-event.md deleted file mode 100644 index d728376..0000000 --- a/tutorial/06-create-event.md +++ /dev/null @@ -1,21 +0,0 @@ - - -In this section you will add the ability to create events on the user's calendar. - -1. Open **./graphtutorial/src/main/java/graphtutorial/Graph.java** and add the following function to the **Graph** class. - - :::code language="java" source="../demo/graphtutorial/src/main/java/graphtutorial/Graph.java" id="CreateEventSnippet"::: - -1. Open **./graphtutorial/src/main/java/graphtutorial/App.java** and add the following function to the **App** class. - - :::code language="java" source="../demo/graphtutorial/src/main/java/graphtutorial/App.java" id="CreateEventSnippet"::: - - This function prompts the user for subject, attendees, start, end, and body, then uses those values to call `Graph.createEvent`. - -1. Add the following just after the `// Create a new event` comment in the `Main` function. - - ```java - createEvent(user.mailboxSettings.timeZone, input); - ``` - -1. Save all of your changes and run the app. Choose the **Add an event** option. Respond to the prompts to create a new event on the user's calendar. diff --git a/tutorial/07-completed.md b/tutorial/07-completed.md deleted file mode 100644 index 6043ec4..0000000 --- a/tutorial/07-completed.md +++ /dev/null @@ -1,7 +0,0 @@ - - -You've completed the Java Microsoft Graph tutorial. Now that you have a working app that calls Microsoft Graph, you can experiment and add new features. Visit the [Overview of Microsoft Graph](/graph/overview) to see all of the data you can access with Microsoft Graph. - -## Feedback - -Please provide any feedback on this tutorial in the [GitHub repository](https://github.com/microsoftgraph/msgraph-training-java). diff --git a/tutorial/images/aad-application-id.png b/tutorial/images/aad-application-id.png deleted file mode 100644 index 8e8e0b9c8f8582bc69d3991ff321fd742308b630..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23455 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 diff --git a/tutorial/images/aad-redirect-uris.png b/tutorial/images/aad-redirect-uris.png deleted file mode 100644 index eb107777c5c045af6540b035bdb8c26c99594b0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30717 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 diff --git a/tutorial/images/aad-register-an-app.png b/tutorial/images/aad-register-an-app.png deleted file mode 100644 index 45e26e9ec7f3b68c03bdd4683e32d8d9ddcfc14e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16133 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 Date: Tue, 12 Apr 2022 13:36:59 -0400 Subject: [PATCH 4/8] Add app registration scripts --- demo/RegisterAppForUserAuth.ps1 | 89 +++++++++++++++++++++++++++++ demo/UpdateAppForAppOnlyAuth.ps1 | 98 ++++++++++++++++++++++++++++++++ 2 files changed, 187 insertions(+) create mode 100644 demo/RegisterAppForUserAuth.ps1 create mode 100644 demo/UpdateAppForAppOnlyAuth.ps1 diff --git a/demo/RegisterAppForUserAuth.ps1 b/demo/RegisterAppForUserAuth.ps1 new file mode 100644 index 0000000..45fcb35 --- /dev/null +++ b/demo/RegisterAppForUserAuth.ps1 @@ -0,0 +1,89 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT license. + +# +param( + [Parameter(Mandatory=$true, + HelpMessage="The friendly name of the app registration")] + [String] + $AppName, + + [Parameter(Mandatory=$false, + HelpMessage="The sign in audience for the app")] + [ValidateSet("AzureADMyOrg", "AzureADMultipleOrgs", ` + "AzureADandPersonalMicrosoftAccount", "PersonalMicrosoftAccount")] + [String] + $SignInAudience = "AzureADandPersonalMicrosoftAccount", + + [Parameter(Mandatory=$false)] + [Switch] + $StayConnected = $false +) + +# Tenant to use in authentication. +# See https://docs.microsoft.com/azure/active-directory/develop/v2-oauth2-device-code#device-authorization-request +$authTenant = switch ($SignInAudience) +{ + "AzureADMyOrg" { "tenantId" } + "AzureADMultipleOrgs" { "organizations" } + "AzureADandPersonalMicrosoftAccount" { "common" } + "PersonalMicrosoftAccount" { "consumers" } + default { "invalid" } +} + +if ($authTenant -eq "invalid") +{ + Write-Host -ForegroundColor Red "Invalid sign in audience:" $SignInAudience + Exit +} + +# Requires an admin +Connect-MgGraph -Scopes "Application.ReadWrite.All User.Read" -UseDeviceAuthentication -ErrorAction Stop + +# Get context for access to tenant ID +$context = Get-MgContext -ErrorAction Stop + +if ($authTenant -eq "tenantId") +{ + $authTenant = $context.TenantId +} + +# Create app registration +$appRegistration = New-MgApplication -DisplayName $AppName -SignInAudience $SignInAudience ` + -IsFallbackPublicClient -ErrorAction Stop +Write-Host -ForegroundColor Cyan "App registration created with app ID" $appRegistration.AppId + +# Create corresponding service principal +if ($SignInAudience -ne "PersonalMicrosoftAccount") +{ + New-MgServicePrincipal -AppId $appRegistration.AppId -ErrorAction SilentlyContinue ` + -ErrorVariable SPError | Out-Null + if ($SPError) + { + Write-Host -ForegroundColor Red "A service principal for the app could not be created." + Write-Host -ForegroundColor Red $SPError + Exit + } + + Write-Host -ForegroundColor Cyan "Service principal created" +} + +Write-Host +Write-Host -ForegroundColor Green "SUCCESS" +Write-Host -ForegroundColor Cyan -NoNewline "Client ID: " +Write-Host -ForegroundColor Yellow $appRegistration.AppId +Write-Host -ForegroundColor Cyan -NoNewline "Auth tenant: " +Write-Host -ForegroundColor Yellow $authTenant + +if ($StayConnected -eq $false) +{ + Disconnect-MgGraph + Write-Host "Disconnected from Microsoft Graph" +} +else +{ + Write-Host + Write-Host -ForegroundColor Yellow ` + "The connection to Microsoft Graph is still active. To disconnect, use Disconnect-MgGraph" +} +# diff --git a/demo/UpdateAppForAppOnlyAuth.ps1 b/demo/UpdateAppForAppOnlyAuth.ps1 new file mode 100644 index 0000000..d6833c6 --- /dev/null +++ b/demo/UpdateAppForAppOnlyAuth.ps1 @@ -0,0 +1,98 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT license. + +# +param( + [Parameter(Mandatory=$true, + HelpMessage="The app ID of the app registration")] + [String] + $AppId, + + [Parameter(Mandatory=$true, + HelpMessage="The application permission scopes to configure on the app registration")] + [String[]] + $GraphScopes, + + [Parameter(Mandatory=$false)] + [Switch] + $StayConnected = $false +) + +$graphAppId = "00000003-0000-0000-c000-000000000000" + +# Requires an admin +Connect-MgGraph -Scopes "Application.ReadWrite.All AppRoleAssignment.ReadWrite.All User.Read" ` + -UseDeviceAuthentication -ErrorAction Stop + +# Get context for access to tenant ID +$context = Get-MgContext -ErrorAction Stop + +# Get the application and service principal +$appRegistration = Get-MgApplication -Filter ("appId eq '" + $AppId +"'") -ErrorAction Stop +$appServicePrincipal = Get-MgServicePrincipal -Filter ("appId eq '" + $AppId + "'") -ErrorAction Stop + +# Lookup available Graph application permissions +$graphServicePrincipal = Get-MgServicePrincipal -Filter ("appId eq '" + $graphAppId + "'") -ErrorAction Stop +$graphAppPermissions = $graphServicePrincipal.AppRoles + +$resourceAccess = @() + +foreach($scope in $GraphScopes) +{ + $permission = $graphAppPermissions | Where-Object { $_.Value -eq $scope } + if ($permission) + { + $resourceAccess += @{ Id = $permission.Id; Type = "Role"} + } + else + { + Write-Host -ForegroundColor Red "Invalid scope:" $scope + Exit + } +} + +# Add the permissions to required resource access +Update-MgApplication -ApplicationId $appRegistration.Id -RequiredResourceAccess ` + @{ ResourceAppId = $graphAppId; ResourceAccess = $resourceAccess } -ErrorAction Stop +Write-Host -ForegroundColor Cyan "Added application permissions to app registration" + +# Add admin consent +foreach ($appRole in $resourceAccess) +{ + New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $appServicePrincipal.Id ` + -PrincipalId $appServicePrincipal.Id -ResourceId $graphServicePrincipal.Id ` + -AppRoleId $appRole.Id -ErrorAction SilentlyContinue -ErrorVariable SPError | Out-Null + if ($SPError) + { + Write-Host -ForegroundColor Red "Admin consent for one of the requested scopes could not be added." + Write-Host -ForegroundColor Red $SPError + Exit + } +} +Write-Host -ForegroundColor Cyan "Added admin consent" + +# Add a client secret +$clientSecret = Add-MgApplicationPassword -ApplicationId $appRegistration.Id -PasswordCredential ` + @{ DisplayName = "Added by PowerShell" } -ErrorAction Stop + +Write-Host +Write-Host -ForegroundColor Green "SUCCESS" +Write-Host -ForegroundColor Cyan -NoNewline "Tenant ID: " +Write-Host -ForegroundColor Yellow $context.TenantId +Write-Host -ForegroundColor Cyan -NoNewline "Client secret: " +Write-Host -ForegroundColor Yellow $clientSecret.SecretText +Write-Host -ForegroundColor Cyan -NoNewline "Secret expires: " +Write-Host -ForegroundColor Yellow $clientSecret.EndDateTime + +if ($StayConnected -eq $false) +{ + Disconnect-MgGraph + Write-Host "Disconnected from Microsoft Graph" +} +else +{ + Write-Host + Write-Host -ForegroundColor Yellow ` + "The connection to Microsoft Graph is still active. To disconnect, use Disconnect-MgGraph" +} +# From 8d556454a1ffcbe4143e9c6885d22831de4e7214 Mon Sep 17 00:00:00 2001 From: Jason Johnston Date: Tue, 12 Apr 2022 13:55:29 -0400 Subject: [PATCH 5/8] Update App.java --- demo/graphtutorial/app/src/main/java/graphtutorial/App.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demo/graphtutorial/app/src/main/java/graphtutorial/App.java b/demo/graphtutorial/app/src/main/java/graphtutorial/App.java index 634074f..f5cc1a7 100644 --- a/demo/graphtutorial/app/src/main/java/graphtutorial/App.java +++ b/demo/graphtutorial/app/src/main/java/graphtutorial/App.java @@ -14,9 +14,9 @@ import com.microsoft.graph.models.Message; import com.microsoft.graph.models.User; -// import com.microsoft.graph.requests.MessageCollectionPage; import com.microsoft.graph.requests.UserCollectionPage; +// public class App { // From bab79a2906350c4053072ae23945f37deb33bfe1 Mon Sep 17 00:00:00 2001 From: Jason Johnston Date: Thu, 5 May 2022 12:49:24 -0400 Subject: [PATCH 6/8] Added quickstart config --- .gitignore | 1 + demo/README.md | 111 ++++++++++++++++++++++++++++++++++++++++--------- demo/version | 1 + qs.json | 7 ++++ 4 files changed, 101 insertions(+), 19 deletions(-) create mode 100644 demo/version create mode 100644 qs.json diff --git a/.gitignore b/.gitignore index 92ba6ea..02bfead 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ bin/ .vscode/ oauth.properties +*.zip diff --git a/demo/README.md b/demo/README.md index b3a2130..bd9d8a9 100644 --- a/demo/README.md +++ b/demo/README.md @@ -4,48 +4,121 @@ To run the completed project in this folder, you need the following: -- [Java SE Development Kit (JDK)](https://java.com/en/download/faq/develop.xml) and [Gradle](https://gradle.org/) installed on your development machine. If you do not have the JDK or Gradle, visit the previous links for download options. (**Note:** This tutorial was written with OpenJDK version 14.0.0.36 and Gradle 6.7.1. The steps in this guide may work with other versions, but that has not been tested.) +- [Java SE Development Kit (JDK)](https://java.com/en/download/faq/develop.xml) and [Gradle](https://gradle.org/) installed on your development machine. (**Note:** This tutorial was written with OpenJDK version 17.0.2 and Gradle 7.4.2. The steps in this guide may work with other versions, but that has not been tested.) - A Microsoft work or school account. If you don't have a Microsoft account, you can [sign up for the Microsoft 365 Developer Program](https://developer.microsoft.com/microsoft-365/dev-program) to get a free Microsoft 365 subscription. -## Register a web application with the Azure Active Directory admin center +## Register an application -1. Open a browser and navigate to the [Azure Active Directory admin center](https://aad.portal.azure.com). Login using a **personal account** (aka: Microsoft Account) or **Work or School Account**. +You can register an application using the Azure Active Directory admin center, or by using the [Microsoft Graph PowerShell SDK](https://docs.microsoft.com/graph/powershell/get-started). + +**NOTE:** If you downloaded this code from [https://developer.microsoft.com/graph/quick-start](https://developer.microsoft.com/graph/quick-start), an app registration has already been created for you. However, if you want to use the app-only portion of this sample, you will need to modify the app registration as specified in [Configure app-only auth (AAD admin center)](#configure-app-only-auth-aad-admin-center) or [Configure app-only auth (PowerShell)](#configure-app-only-auth-powershell). + +### Azure Active Directory admin center + +1. Open a browser and navigate to the [Azure Active Directory admin center](https://aad.portal.azure.com) and login using a **personal account** (aka: Microsoft Account) or **Work or School Account**. 1. Select **Azure Active Directory** in the left-hand navigation, then select **App registrations** under **Manage**. - ![A screenshot of the App registrations ](/tutorial/images/aad-portal-app-registrations.png) +1. Select **New registration**. Enter a name for your application, for example, `Java Graph Tutorial`. + +1. Set **Supported account types** as desired. The options are: + + | Option | Who can sign in? | + |--------|------------------| + | **Accounts in this organizational directory only** | Only users in your Microsoft 365 organization | + | **Accounts in any organizational directory** | Users in any Microsoft 365 organization (work or school accounts) | + | **Accounts in any organizational directory ... and personal Microsoft accounts** | Users in any Microsoft 365 organization (work or school accounts) and personal Microsoft accounts | + +1. Leave **Redirect URI** empty. + +1. Select **Register**. On the application's **Overview** page, copy the value of the **Application (client) ID** and save it, you will need it in the next step. If you chose **Accounts in this organizational directory only** for **Supported account types**, also copy the **Directory (tenant) ID** and save it. + +1. Select **Authentication** under **Manage**. Locate the **Advanced settings** section and change the **Allow public client flows** toggle to **Yes**, then choose **Save**. + +#### Configure app-only auth (AAD admin center) + +> **Note:** This section requires a work/school account with the Global administrator role. You only need to complete these steps if you plan on using the app-only portions of this sample. + +1. Select **API permissions** under **Manage**. + +1. Remove the default **User.Read** permission under **Configured permissions** by selecting the ellipses (**...**) in its row and selecting **Remove permission**. + +1. Select **Add a permission**, then **Microsoft Graph**. -1. Select **New registration**. On the **Register an application** page, set the values as follows. +1. Select **Application permissions**. - - Set **Name** to `Java Graph Tutorial`. - - Set **Supported account types** to **Accounts in any organizational directory**. - - Leave **Redirect URI** empty. +1. Select **User.Read.All**, then select **Add permissions**. - ![A screenshot of the Register an application page](/tutorial/images/aad-register-an-app.png) +1. Select **Grant admin consent for...**, then select **Yes** to provide admin consent for the selected permission. -1. Choose **Register**. On the **Java Graph Tutorial** page, copy the value of the **Application (client) ID** and save it, you will need it in the next step. +1. Select **Certificates and secrets** under **Manage**, then select **New client secret**. - ![A screenshot of the application ID of the new app registration](/tutorial/images/aad-application-id.png) +1. Enter a description, choose a duration, and select **Add**. -1. Select the **Add a Redirect URI** link. On the **Redirect URIs** page, locate the **Suggested Redirect URIs for public clients (mobile, desktop)** section. Select the `https://login.microsoftonline.com/common/oauth2/nativeclient` URI. +1. Copy the secret from the **Value** column, you will need it in the next steps. - ![A screenshot of the Redirect URIs page](/tutorial/images/aad-redirect-uris.png) +### PowerShell -1. Locate the **Default client type** section and change the **Treat application as a public client** toggle to **Yes**, then choose **Save**. +To use PowerShell, you'll need the Microsoft Graph PowerShell SDK. If you do not have it, see [Install the Microsoft Graph PowerShell SDK](https://docs.microsoft.com/graph/powershell/installation) for installation instructions. - ![A screenshot of the Default client type section](/tutorial/images/aad-default-client-type.png) +1. Open PowerShell and run the [RegisterAppForUserAuth.ps1](RegisterAppForUserAuth.ps1) file with the following command, replacing *<audience-value>* with the desired value (see table below). + + > **Note:** The RegisterAppForUserAuth.ps1 script requires a work/school account with the Application administrator, Cloud application administrator, or Global administrator role. + + ```powershell + .\RegisterAppForUserAuth.ps1 -AppName "Java Graph Tutorial" -SignInAudience + ``` + + | SignInAudience value | Who can sign in? | + |----------------------|------------------| + | `AzureADMyOrg` | Only users in your Microsoft 365 organization | + | `AzureADMultipleOrgs` | Users in any Microsoft 365 organization (work or school accounts) | + | `AzureADandPersonalMicrosoftAccount` | Users in any Microsoft 365 organization (work or school accounts) and personal Microsoft accounts | + | `PersonalMicrosoftAccount` | Only personal Microsoft accounts | + +1. Copy the **Client ID** and **Auth tenant** values from the script output. You will need these values in the next step. + + ```powershell + SUCCESS + Client ID: 2fb1652f-a9a0-4db9-b220-b224b8d9d38b + Auth tenant: common + ``` + +#### Configure app-only auth (PowerShell) + +> **Note:** This section requires a work/school account with the Global administrator role. You only need to complete these steps if you plan on using the app-only portions of this sample. + +1. Run the [UpdateAppForAppOnlyAuth.ps1](UpdateAppForAppOnlyAuth.ps1) file with the following command, replacing *<your-client-id>* with your client ID. + + ```powershell + .\UpdateAppForAppOnlyAuth.ps1 -AppId -GraphScopes "User.Read.All" + ``` + +1. Copy the **Tenant ID** and **Client secret** values from the script output. You will need these values in the next step. + + ```powershell + SUCCESS + Tenant ID: a795ad0f-7d82-4a3b-a2c0-0713ec72ade7 + Client secret: 2jv7Q~8eiOd_QafJ..... + Secret expires: 2/16/2024 9:32:09 PM + ``` ## Configure the sample -1. Rename the `oAuth.properties.example` file to `oAuth.properties`. -1. Edit the `oAuth.properties` file and make the following changes. - 1. Replace `YOUR_APP_ID_HERE` with the **Application Id** you got from the App Registration Portal. +1. Rename [oAuth.properties.example](./graphtutorial/app/src/main/resources/oAuth.properties.example) to `oauthProperties` and update the values according to the following table. + + | Setting | Value | + |---------|-------| + | `app.clientId` | The client ID of your app registration | + | `app.clientSecret` | The client secret (only needed if doing app-only) | + | `app.tenantId` | The tenant ID of your organization (only needed if doing app-only) | + | `app.authTenant` | If you chose the option to only allow users in your organization to sign in, change this value to your tenant ID. Otherwise leave as `common`. | ## Build and run the sample -In your command-line interface (CLI), navigate to the project directory and run the following commands. +In your command-line interface (CLI), navigate to the project directory and run the following command. ```Shell ./gradlew --console plain run diff --git a/demo/version b/demo/version new file mode 100644 index 0000000..d3827e7 --- /dev/null +++ b/demo/version @@ -0,0 +1 @@ +1.0 diff --git a/qs.json b/qs.json new file mode 100644 index 0000000..a4d6ecd --- /dev/null +++ b/qs.json @@ -0,0 +1,7 @@ +{ + "sourceDirectory": "./demo", + "exampleConfigFile": "./graphtutorial/app/src/main/resources/oAuth.properties.example", + "configFile": "oAuth.properties", + "archiveFile": "JavaQuickStart.zip", + "zipReadMe": "./README.md" +} From 715eca1379afb198001025f5634da602e74087d2 Mon Sep 17 00:00:00 2001 From: Jason Johnston Date: Thu, 5 May 2022 12:52:17 -0400 Subject: [PATCH 7/8] Update build.gradle --- demo/graphtutorial/app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demo/graphtutorial/app/build.gradle b/demo/graphtutorial/app/build.gradle index 763eae4..0a46746 100644 --- a/demo/graphtutorial/app/build.gradle +++ b/demo/graphtutorial/app/build.gradle @@ -24,7 +24,7 @@ dependencies { // This dependency is used by the application. implementation 'com.google.guava:guava:30.1.1-jre' implementation 'com.azure:azure-identity:1.5.0' - implementation 'com.microsoft.graph:microsoft-graph:5.19.0' + implementation 'com.microsoft.graph:microsoft-graph:5.22.0' } // From 2e75f6e8c9d799914bbfc2aecd64944e43036a2e Mon Sep 17 00:00:00 2001 From: Jason Johnston Date: Thu, 5 May 2022 12:53:20 -0400 Subject: [PATCH 8/8] Update qs.json --- qs.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qs.json b/qs.json index a4d6ecd..d8d7366 100644 --- a/qs.json +++ b/qs.json @@ -1,6 +1,6 @@ { "sourceDirectory": "./demo", - "exampleConfigFile": "./graphtutorial/app/src/main/resources/oAuth.properties.example", + "exampleConfigFile": "./graphtutorial/app/src/main/resources/graphtutorial/oAuth.properties.example", "configFile": "oAuth.properties", "archiveFile": "JavaQuickStart.zip", "zipReadMe": "./README.md"