diff --git a/.gitignore b/.gitignore index 4bab3939d8..8cf371fe94 100644 --- a/.gitignore +++ b/.gitignore @@ -266,3 +266,4 @@ lib/msal-core/lib-es6 *.tgz *.zip samples/**/test/screenshots +samples/**/data/cache.json diff --git a/samples/msal-node-samples/msal-node-auth-code/index.js b/samples/msal-node-samples/auth-code/index.js similarity index 100% rename from samples/msal-node-samples/msal-node-auth-code/index.js rename to samples/msal-node-samples/auth-code/index.js diff --git a/samples/msal-node-samples/msal-node-auth-code/package-lock.json b/samples/msal-node-samples/auth-code/package-lock.json similarity index 100% rename from samples/msal-node-samples/msal-node-auth-code/package-lock.json rename to samples/msal-node-samples/auth-code/package-lock.json diff --git a/samples/msal-node-samples/msal-node-auth-code/package.json b/samples/msal-node-samples/auth-code/package.json similarity index 100% rename from samples/msal-node-samples/msal-node-auth-code/package.json rename to samples/msal-node-samples/auth-code/package.json diff --git a/samples/msal-node-samples/msal-node-device-code/NodeCache.txt b/samples/msal-node-samples/device-code/NodeCache.txt similarity index 100% rename from samples/msal-node-samples/msal-node-device-code/NodeCache.txt rename to samples/msal-node-samples/device-code/NodeCache.txt diff --git a/samples/msal-node-samples/msal-node-device-code/index.js b/samples/msal-node-samples/device-code/index.js similarity index 100% rename from samples/msal-node-samples/msal-node-device-code/index.js rename to samples/msal-node-samples/device-code/index.js diff --git a/samples/msal-node-samples/msal-node-device-code/package-lock.json b/samples/msal-node-samples/device-code/package-lock.json similarity index 100% rename from samples/msal-node-samples/msal-node-device-code/package-lock.json rename to samples/msal-node-samples/device-code/package-lock.json diff --git a/samples/msal-node-samples/msal-node-device-code/package.json b/samples/msal-node-samples/device-code/package.json similarity index 100% rename from samples/msal-node-samples/msal-node-device-code/package.json rename to samples/msal-node-samples/device-code/package.json diff --git a/samples/msal-node-samples/msal-node-silent-flow/data/cache.json b/samples/msal-node-samples/msal-node-silent-flow/data/cache.json deleted file mode 100644 index c660c20fa1..0000000000 --- a/samples/msal-node-samples/msal-node-silent-flow/data/cache.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "Account": { - "uid.utid-login.microsoftonline.com-microsoft": { - "username": "John Doe", - "local_account_id": "object1234", - "realm": "microsoft", - "environment": "login.microsoftonline.com", - "home_account_id": "uid.utid", - "authority_type": "MSSTS", - "client_info": "base64encodedjson" - } - }, - "AccessToken": { - "uid.utid-login.microsoftonline.com-accesstoken-mock_client_id-microsoft-scope1 scope2 scope3": { - "environment": "login.microsoftonline.com", - "credential_type": "AccessToken", - "secret": "an access token", - "realm": "microsoft", - "target": "scope1 scope2 scope3", - "client_id": "mock_client_id", - "cached_at": "1000", - "home_account_id": "uid.utid", - "extended_expires_on": "4600", - "expires_on": "4600" - }, - "uid.utid-login.microsoftonline.com-accesstoken-mock_client_id-microsoft-scope4 scope5": { - "environment": "login.microsoftonline.com", - "credential_type": "AccessToken", - "secret": "an access token", - "realm": "microsoft", - "target": "scope4 scope5", - "client_id": "mock_client_id", - "cached_at": "1000", - "home_account_id": "uid.utid", - "extended_expires_on": "4600", - "expires_on": "4600" - } - }, - "RefreshToken": { - "uid.utid-login.microsoftonline.com-refreshtoken-mock_client_id--": { - "environment": "login.microsoftonline.com", - "credential_type": "RefreshToken", - "secret": "a refresh token", - "client_id": "mock_client_id", - "home_account_id": "uid.utid" - }, - "uid.utid-login.microsoftonline.com-refreshtoken-1--": { - "environment": "login.microsoftonline.com", - "credential_type": "RefreshToken", - "secret": "a refresh token", - "client_id": "mock_client_id", - "home_account_id": "uid.utid", - "familyId": "1" - } - }, - "IdToken": { - "uid.utid-login.microsoftonline.com-idtoken-mock_client_id-microsoft-": { - "realm": "microsoft", - "environment": "login.microsoftonline.com", - "credential_type": "IdToken", - "secret": "header.eyJvaWQiOiAib2JqZWN0MTIzNCIsICJwcmVmZXJyZWRfdXNlcm5hbWUiOiAiSm9obiBEb2UiLCAic3ViIjogInN1YiJ9.signature", - "client_id": "mock_client_id", - "home_account_id": "uid.utid" - } - }, - "AppMetadata": { - "appmetadata-login.microsoftonline.com-mock_client_id": { - "environment": "login.microsoftonline.com", - "family_id": "1", - "client_id": "mock_client_id" - } - } -} diff --git a/samples/msal-node-samples/msal-node-silent-flow/index.js b/samples/msal-node-samples/msal-node-silent-flow/index.js deleted file mode 100644 index bc0a7ef846..0000000000 --- a/samples/msal-node-samples/msal-node-silent-flow/index.js +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ -const express = require("express"); -const msal = require('@azure/msal-node'); -const { promises: fs } = require("fs"); - -const SERVER_PORT = process.env.PORT || 3000; - -const readFromStorage = () => { - return fs.readFile("./data/cache.json", "utf-8"); -}; - -const writeToStorage = (getMergedState) => { - return readFromStorage().then(oldFile =>{ - const mergedState = getMergedState(oldFile); - return fs.writeFile("./data/cacheAfterWrite.json", mergedState); - }) -}; - -const cachePlugin = { - readFromStorage, - writeToStorage -}; - -const publicClientConfig = { - auth: { - clientId: "99cab759-2aab-420b-91d8-5e3d8d4f063b", - authority: "https://login.microsoftonline.com/90b8faa8-cc95-460e-a618-ee770bee1759", - redirectUri: "http://localhost:3000/redirect", - }, - cache: { - cachePlugin - }, -}; -const pca = new msal.PublicClientApplication(publicClientConfig); -const msalCacheManager = pca.getCacheManager(); -let accounts; - -// Create Express App and Routes -const app = express(); - -app.get('/', (req, res) => { - - // get Accounts - accounts = msalCacheManager.getAllAccounts(); - console.log("Accounts: ", accounts); - - // Build silent request - const silentRequest = { - account: accounts[1], - redirectUri: "http://localhost:3000/redirect", - }; - - // get url to sign user in and consent to scopes needed for application - pca.acquireTokenSilent(silentRequest) - .then((response) => { - console.log("\nResponse: \n:", response); - res.send(200); - return msalCacheManager.writeToPersistence(); - }) - .catch((error) => { - console.log(error); - res.status(500).send(error); - }); -}); - -msalCacheManager.readFromPersistence().then(() => { - app.listen(SERVER_PORT, () => console.log(`Msal Node Auth Code Sample app listening on port ${SERVER_PORT}!`)); -}); - diff --git a/samples/msal-node-samples/msal-node-refresh-token/NodeCache.txt b/samples/msal-node-samples/refresh-token/NodeCache.txt similarity index 100% rename from samples/msal-node-samples/msal-node-refresh-token/NodeCache.txt rename to samples/msal-node-samples/refresh-token/NodeCache.txt diff --git a/samples/msal-node-samples/msal-node-refresh-token/index.js b/samples/msal-node-samples/refresh-token/index.js similarity index 100% rename from samples/msal-node-samples/msal-node-refresh-token/index.js rename to samples/msal-node-samples/refresh-token/index.js diff --git a/samples/msal-node-samples/msal-node-refresh-token/package-lock.json b/samples/msal-node-samples/refresh-token/package-lock.json similarity index 100% rename from samples/msal-node-samples/msal-node-refresh-token/package-lock.json rename to samples/msal-node-samples/refresh-token/package-lock.json diff --git a/samples/msal-node-samples/msal-node-refresh-token/package.json b/samples/msal-node-samples/refresh-token/package.json similarity index 100% rename from samples/msal-node-samples/msal-node-refresh-token/package.json rename to samples/msal-node-samples/refresh-token/package.json diff --git a/samples/msal-node-samples/msal-node-auth-code/data/cache.json b/samples/msal-node-samples/silent-flow/data/example.cache.json similarity index 99% rename from samples/msal-node-samples/msal-node-auth-code/data/cache.json rename to samples/msal-node-samples/silent-flow/data/example.cache.json index d3fdd20f5b..41aea2382a 100644 --- a/samples/msal-node-samples/msal-node-auth-code/data/cache.json +++ b/samples/msal-node-samples/silent-flow/data/example.cache.json @@ -10,23 +10,6 @@ "client_info": "base64encodedjson" } }, - "RefreshToken": { - "uid.utid-login.microsoftonline.com-refreshtoken-mock_client_id--": { - "environment": "login.microsoftonline.com", - "credential_type": "RefreshToken", - "secret": "a refresh token", - "client_id": "mock_client_id", - "home_account_id": "uid.utid" - }, - "uid.utid-login.microsoftonline.com-refreshtoken-1--": { - "environment": "login.microsoftonline.com", - "credential_type": "RefreshToken", - "secret": "a refresh token", - "client_id": "mock_client_id", - "home_account_id": "uid.utid", - "familyId": "1" - } - }, "AccessToken": { "uid.utid-login.microsoftonline.com-accesstoken-mock_client_id-microsoft-scope1 scope2 scope3": { "environment": "login.microsoftonline.com", @@ -53,6 +36,23 @@ "expires_on": "4600" } }, + "RefreshToken": { + "uid.utid-login.microsoftonline.com-refreshtoken-mock_client_id--": { + "environment": "login.microsoftonline.com", + "credential_type": "RefreshToken", + "secret": "a refresh token", + "client_id": "mock_client_id", + "home_account_id": "uid.utid" + }, + "uid.utid-login.microsoftonline.com-refreshtoken-1--": { + "environment": "login.microsoftonline.com", + "credential_type": "RefreshToken", + "secret": "a refresh token", + "client_id": "mock_client_id", + "home_account_id": "uid.utid", + "familyId": "1" + } + }, "IdToken": { "uid.utid-login.microsoftonline.com-idtoken-mock_client_id-microsoft-": { "realm": "microsoft", @@ -70,4 +70,4 @@ "client_id": "mock_client_id" } } -} +} \ No newline at end of file diff --git a/samples/msal-node-samples/silent-flow/graph.js b/samples/msal-node-samples/silent-flow/graph.js new file mode 100644 index 0000000000..ebf7d1309b --- /dev/null +++ b/samples/msal-node-samples/silent-flow/graph.js @@ -0,0 +1,17 @@ +const axios = require('axios'); + +module.exports = { + callMSGraph: function(endpoint, accessToken, callback) { + const options = { + headers: { + Authorization: `Bearer ${accessToken}` + } + }; + + console.log('request made to Graph API at: ' + new Date().toString()); + + axios.default.get(endpoint, options) + .then(response => callback(response.data, endpoint)) + .catch(error => console.log(error)); + } +}; \ No newline at end of file diff --git a/samples/msal-node-samples/silent-flow/index.js b/samples/msal-node-samples/silent-flow/index.js new file mode 100644 index 0000000000..dcfa3016f8 --- /dev/null +++ b/samples/msal-node-samples/silent-flow/index.js @@ -0,0 +1,152 @@ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + */ +const express = require("express"); +const exphbs = require('express-handlebars'); +const msal = require('@azure/msal-node'); +const { promises: fs } = require("fs"); + +const graph = require('./graph'); + +const SERVER_PORT = process.env.PORT || 3000; + +/** + * Cache Plugin configuration + */ +const cachePath = "./data/example.cache.json"; // Replace this string with the path to your valid cache file. + +const readFromStorage = () => { + return fs.readFile(cachePath, "utf-8"); +}; + +const writeToStorage = (getMergedState) => { + return readFromStorage().then(oldFile =>{ + const mergedState = getMergedState(oldFile); + return fs.writeFile(cachePath, mergedState); + }) +}; + +const cachePlugin = { + readFromStorage, + writeToStorage +}; + + +const graphConfig = { + graphMeEndpoint: 'https://graph.microsoft.com/v1.0/me' +}; + +/** + * Public Client Application Configuration + */ +const publicClientConfig = { + auth: { + clientId: "99cab759-2aab-420b-91d8-5e3d8d4f063b", + authority: "https://login.microsoftonline.com/90b8faa8-cc95-460e-a618-ee770bee1759", + redirectUri: "http://localhost:3000/redirect", + }, + cache: { + cachePlugin + }, +}; + +/** Request Configuration */ + +const scopes = ["user.read"]; + +const authCodeUrlParameters = { + scopes: scopes, + redirectUri: "http://localhost:3000/redirect", +}; + +const pca = new msal.PublicClientApplication(publicClientConfig); +const msalCacheManager = pca.getCacheManager(); +let accounts; + +/** + * Express App + */ +const app = express(); + +// Set handlebars view engine +app.engine('.hbs', exphbs({extname: '.hbs'})); +app.set('view engine', '.hbs'); + +/** + * App Routes + */ +app.get('/', (req, res) => { + res.render("login", { showSignInButton: true}); +}); + +// Initiates Auth Code Grant +app.get('/login', (req, res) => { + pca.getAuthCodeUrl(authCodeUrlParameters) + .then((response) => { + console.log(response); + res.redirect(response); + }) + .catch((error) => console.log(JSON.stringify(error))); +}); + +// Second leg of Auth Code grant +app.get('/redirect', (req, res) => { + const tokenRequest = { + code: req.query.code, + redirectUri: "http://localhost:3000/redirect", + scopes: scopes, + }; + + pca.acquireTokenByCode(tokenRequest).then((response) => { + console.log("\nResponse: \n:", response); + const templateParams = { showLoginButton: false, username: response.account.username, profile: false}; + res.render("graph", templateParams); + return msalCacheManager.writeToPersistence(); + }).catch((error) => { + console.log(error); + res.status(500).send(error); + }); +}); + +// Initiates Acquire Token Silent flow +app.get('/graphCall', (req, res) => { + // get Accounts + accounts = msalCacheManager.getAllAccounts(); + console.log("Accounts: ", accounts); + + // Build silent request + const silentRequest = { + account: accounts[1], // Index must match the account that is trying to acquire token silently + scopes: scopes, + }; + + let templateParams = { showLoginButton: false }; + // Acquire Token Silently to be used in MS Graph call + pca.acquireTokenSilent(silentRequest) + .then((response) => { + console.log("\nSuccessful silent token acquisition:\nResponse: \n:", response); + const username = response.account.username; + // Call graph after successfully acquiring token + graph.callMSGraph(graphConfig.graphMeEndpoint, response.accessToken, (response, endpoint) => { + // Successful silent request + templateParams = { + ...templateParams, + username, + profile: JSON.stringify(response, null, 4) + }; + res.render("graph", templateParams) + return msalCacheManager.writeToPersistence(); + }); + }) + .catch((error) => { + console.log(error); + templateParams.couldNotAcquireToken = true; + res.render("graph", templateParams) + }); +}); + +msalCacheManager.readFromPersistence().then(() => { + app.listen(SERVER_PORT, () => console.log(`Msal Node Auth Code Sample app listening on port ${SERVER_PORT}!`)); +}); + diff --git a/samples/msal-node-samples/msal-node-silent-flow/package-lock.json b/samples/msal-node-samples/silent-flow/package-lock.json similarity index 64% rename from samples/msal-node-samples/msal-node-silent-flow/package-lock.json rename to samples/msal-node-samples/silent-flow/package-lock.json index 2948649bf0..6aa6d456dc 100644 --- a/samples/msal-node-samples/msal-node-silent-flow/package-lock.json +++ b/samples/msal-node-samples/silent-flow/package-lock.json @@ -18,6 +18,24 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "axios": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", + "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", + "requires": { + "follow-redirects": "1.5.10" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, "body-parser": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", @@ -35,11 +53,25 @@ "type-is": "~1.6.17" } }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "bytes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, "content-disposition": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", @@ -71,6 +103,14 @@ "ms": "2.0.0" } }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -138,6 +178,18 @@ "vary": "~1.1.2" } }, + "express-handlebars": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/express-handlebars/-/express-handlebars-4.0.4.tgz", + "integrity": "sha512-WxbQorVc7V9ORzp9YpG3fLAzrfIrKcScSezuFxTZRFJSx/P2f7QJ9ZyADV8cyPuomyzUxAJnw6t8dnriLfBNvg==", + "requires": { + "glob": "^7.1.6", + "graceful-fs": "^4.2.4", + "handlebars": "^4.7.6", + "object.assign": "^4.1.0", + "promise": "^8.1.0" + } + }, "finalhandler": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", @@ -152,6 +204,24 @@ "unpipe": "~1.0.0" } }, + "follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "requires": { + "debug": "=3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, "forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", @@ -162,6 +232,51 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + }, + "handlebars": { + "version": "4.7.6", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz", + "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==", + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, "http-errors": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", @@ -182,6 +297,15 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", @@ -225,6 +349,19 @@ "mime-db": "1.44.0" } }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -235,6 +372,27 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -243,16 +401,37 @@ "ee-first": "1.1.1" } }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, + "promise": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", + "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", + "requires": { + "asap": "~2.0.6" + } + }, "proxy-addr": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", @@ -336,6 +515,11 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -355,6 +539,12 @@ "mime-types": "~2.1.24" } }, + "uglify-js": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.10.0.tgz", + "integrity": "sha512-Esj5HG5WAyrLIdYU74Z3JdG2PxdIusvj6IWHMtlyESxc7kcDz7zYlYjpnSokn1UbpV0d/QX9fan7gkCNd/9BQA==", + "optional": true + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -369,6 +559,16 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" } } } diff --git a/samples/msal-node-samples/msal-node-silent-flow/package.json b/samples/msal-node-samples/silent-flow/package.json similarity index 83% rename from samples/msal-node-samples/msal-node-silent-flow/package.json rename to samples/msal-node-samples/silent-flow/package.json index eafb1c7419..ec1e31d78f 100644 --- a/samples/msal-node-samples/msal-node-silent-flow/package.json +++ b/samples/msal-node-samples/silent-flow/package.json @@ -12,6 +12,8 @@ "license": "MIT", "dependencies": { "@azure/msal-node": "^0.1.0", - "express": "^4.17.1" + "axios": "^0.19.2", + "express": "^4.17.1", + "express-handlebars": "^4.0.4" } } diff --git a/samples/msal-node-samples/silent-flow/views/graph.hbs b/samples/msal-node-samples/silent-flow/views/graph.hbs new file mode 100644 index 0000000000..1ed3e6a9ed --- /dev/null +++ b/samples/msal-node-samples/silent-flow/views/graph.hbs @@ -0,0 +1,23 @@ +
+
+
+
Welcome, {{username}}, you have signed in successfully!
+
+
+ See Profile +
+
+
+
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/samples/msal-node-samples/silent-flow/views/layouts/main.hbs b/samples/msal-node-samples/silent-flow/views/layouts/main.hbs new file mode 100644 index 0000000000..08c7bf8b7d --- /dev/null +++ b/samples/msal-node-samples/silent-flow/views/layouts/main.hbs @@ -0,0 +1,32 @@ + + + + + + Quickstart | MSAL Node.js Sample + + + + + + + +
+
MSAL Node.js demonstrating Silent Flow
+
+
+ {{{body}}} +
+
+
+ + \ No newline at end of file diff --git a/samples/msal-node-samples/silent-flow/views/login.hbs b/samples/msal-node-samples/silent-flow/views/login.hbs new file mode 100644 index 0000000000..349f1037c5 --- /dev/null +++ b/samples/msal-node-samples/silent-flow/views/login.hbs @@ -0,0 +1,7 @@ +
+
+
+
Please sign-in to acquire a token silently
+
+
+:
\ No newline at end of file