Commit 081ec987 authored by Jake Oandasan's avatar Jake Oandasan

Office 365 API demo code

parent 71628e16
APP_NAME=Laravel
APP_ENV=local
APP_KEY=
APP_KEY=base64:32jrq6sfe9SYW3XQOu5WvM9/Tk5sQs4Zy3sx66X+uhc=
APP_DEBUG=true
APP_URL=http://localhost
......@@ -16,7 +16,7 @@ DB_PASSWORD=
BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=cookie
SESSION_DRIVER=file
SESSION_LIFETIME=120
REDIS_HOST=127.0.0.1
......@@ -42,3 +42,11 @@ PUSHER_APP_CLUSTER=mt1
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
OAUTH_APP_ID=6befc560-24c8-49da-a234-3a01606590e9
OAUTH_APP_PASSWORD=MZM.w?27eui=NaWWRye6i?Bt4C:NftPV
OAUTH_REDIRECT_URI=http://localhost:8000/callback
OAUTH_SCOPES='openid profile offline_access user.read calendars.read'
OAUTH_AUTHORITY=https://login.microsoftonline.com/common
OAUTH_AUTHORIZE_ENDPOINT=/oauth2/v2.0/authorize
OAUTH_TOKEN_ENDPOINT=/oauth2/v2.0/token
\ No newline at end of file
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Microsoft\Graph\Graph;
use Microsoft\Graph\Model;
use App\TokenStore\TokenCache;
class CalendarController extends Controller
{
public function calendar()
{
$viewData = $this->loadViewData();
// Get the access token from the cache
$tokenCache = new TokenCache();
$accessToken = $tokenCache->getAccessToken();
// Create a Graph client
$graph = new Graph();
$graph->setAccessToken($accessToken);
$queryParams = array(
'$select' => 'subject,organizer,start,end',
'$orderby' => 'createdDateTime DESC'
);
// Append query parameters to the '/me/events' url
$getEventsUrl = '/me/events?'.http_build_query($queryParams);
$events = $graph->createRequest('GET', $getEventsUrl)
->setReturnType(Model\Event::class)
->execute();
$viewData['events'] = $events;
return view('calendar', $viewData);
}
}
\ No newline at end of file
......@@ -2,12 +2,32 @@
namespace App\Http\Controllers;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
public function loadViewData()
{
$viewData = [];
// Check for flash errors
if (session('error')) {
$viewData['error'] = session('error');
$viewData['errorDetail'] = session('errorDetail');
}
// Check for logged on user
if (session('userName'))
{
$viewData['userName'] = session('userName');
$viewData['userEmail'] = session('userEmail');
}
return $viewData;
}
}
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class HomeController extends Controller
{
public function welcome()
{
$viewData = $this->loadViewData();
return view('home', $viewData);
}
}
\ No newline at end of file
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Microsoft\Graph\Graph;
use Microsoft\Graph\Model;
use App\TokenStore\TokenCache;
class MicrosoftGraphController extends Controller
{
public function signin()
{
// Initialize the OAuth client
$oauthClient = new \League\OAuth2\Client\Provider\GenericProvider([
'clientId' => env('OAUTH_APP_ID'),
'clientSecret' => env('OAUTH_APP_PASSWORD'),
'redirectUri' => env('OAUTH_REDIRECT_URI'),
'urlAuthorize' => env('OAUTH_AUTHORITY').env('OAUTH_AUTHORIZE_ENDPOINT'),
'urlAccessToken' => env('OAUTH_AUTHORITY').env('OAUTH_TOKEN_ENDPOINT'),
'urlResourceOwnerDetails' => '',
'scopes' => env('OAUTH_SCOPES')
]);
$authUrl = $oauthClient->getAuthorizationUrl();
// Save client state so we can validate in callback
session(['oauthState' => $oauthClient->getState()]);
// Redirect to AAD signin page
return redirect()->away($authUrl);
}
public function callback(Request $request)
{
// Validate state
$expectedState = session('oauthState');
$request->session()->forget('oauthState');
$providedState = $request->query('state');
if (!isset($expectedState)) {
// If there is no expected state in the session,
// do nothing and redirect to the home page.
return redirect('/');
}
if (!isset($providedState) || $expectedState != $providedState) {
return redirect('/')
->with('error', 'Invalid auth state')
->with('errorDetail', 'The provided auth state did not match the expected value');
}
// Authorization code should be in the "code" query param
$authCode = $request->query('code');
if (isset($authCode)) {
// Initialize the OAuth client
$oauthClient = new \League\OAuth2\Client\Provider\GenericProvider([
'clientId' => env('OAUTH_APP_ID'),
'clientSecret' => env('OAUTH_APP_PASSWORD'),
'redirectUri' => env('OAUTH_REDIRECT_URI'),
'urlAuthorize' => env('OAUTH_AUTHORITY').env('OAUTH_AUTHORIZE_ENDPOINT'),
'urlAccessToken' => env('OAUTH_AUTHORITY').env('OAUTH_TOKEN_ENDPOINT'),
'urlResourceOwnerDetails' => '',
'scopes' => env('OAUTH_SCOPES')
]);
try {
// Make the token request
$accessToken = $oauthClient->getAccessToken('authorization_code', [
'code' => $authCode
]);
$graph = new Graph();
$graph->setAccessToken($accessToken->getToken());
$user = $graph->createRequest('GET', '/me')
->setReturnType(Model\User::class)
->execute();
$tokenCache = new TokenCache();
$tokenCache->storeTokens($accessToken, $user);
return redirect('/');
}
catch (League\OAuth2\Client\Provider\Exception\IdentityProviderException $e) {
return redirect('/')
->with('error', 'Error requesting access token')
->with('errorDetail', $e->getMessage());
}
}
return redirect('/')
->with('error', $request->query('error'))
->with('errorDetail', $request->query('error_description'));
}
public function signout()
{
$tokenCache = new TokenCache();
$tokenCache->clearTokens();
return redirect('/');
}
public function requestQuery($uri)
{
// Get the access token from the cache
$tokenCache = new TokenCache();
$accessToken = $tokenCache->getAccessToken();
// Check if there's an access token
if ($accessToken == null)
{
return redirect('/')
->with('error', 'No access token available.')
->with('errorDetail', 'If you are not signed in, please sign in.');
}
// Create a Graph client
$graph = new Graph();
$graph->setAccessToken($accessToken);
$getEventsUrl = $uri;
return $graph->createRequest('GET', $getEventsUrl)
->setReturnType(Model\Event::class)
->execute();
}
public function getMyInfo()
{
return $this->requestQuery('/me');
}
public function getAllUsers()
{
return $this->requestQuery('/users');
}
public function getMyTeams()
{
return $this->requestQuery('/me/joinedTeams');
}
public function getAllGroups()
{
return $this->requestQuery('/groups');
}
public function getTeamMembers($groupId)
{
return $this->requestQuery('/groups/' . $groupId . '/members');
}
public function getTeamInfo($groupId)
{
return $this->requestQuery('/teams/' . $groupId);
}
public function getMyLicense()
{
return $this->requestQuery('/me/licenseDetails');
}
public function getUserLicense($userId)
{
return $this->requestQuery('/users/' . $userId . '/licenseDetails');
}
}
<?php
namespace App\TokenStore;
class TokenCache {
public function storeTokens($accessToken, $user) {
session([
'accessToken' => $accessToken->getToken(),
'refreshToken' => $accessToken->getRefreshToken(),
'tokenExpires' => $accessToken->getExpires(),
'userName' => $user->getDisplayName(),
'userEmail' => null !== $user->getMail() ? $user->getMail() : $user->getUserPrincipalName()
]);
}
public function updateTokens($accessToken) {
session([
'accessToken' => $accessToken->getToken(),
'refreshToken' => $accessToken->getRefreshToken(),
'tokenExpires' => $accessToken->getExpires()
]);
}
public function clearTokens() {
session()->forget('accessToken');
session()->forget('refreshToken');
session()->forget('tokenExpires');
session()->forget('userName');
session()->forget('userEmail');
}
public function getAccessToken() {
// Check if tokens exist
if (empty(session('accessToken')) ||
empty(session('refreshToken')) ||
empty(session('tokenExpires'))) {
return '';
}
// Check if token is expired
//Get current time + 5 minutes (to allow for time differences)
$now = time() + 300;
if (session('tokenExpires') <= $now) {
// Token is expired (or very close to it)
// so let's refresh
// Initialize the OAuth client
$oauthClient = new \League\OAuth2\Client\Provider\GenericProvider([
'clientId' => env('OAUTH_APP_ID'),
'clientSecret' => env('OAUTH_APP_PASSWORD'),
'redirectUri' => env('OAUTH_REDIRECT_URI'),
'urlAuthorize' => env('OAUTH_AUTHORITY').env('OAUTH_AUTHORIZE_ENDPOINT'),
'urlAccessToken' => env('OAUTH_AUTHORITY').env('OAUTH_TOKEN_ENDPOINT'),
'urlResourceOwnerDetails' => '',
'scopes' => env('OAUTH_SCOPES')
]);
try {
$newToken = $oauthClient->getAccessToken('refresh_token', [
'refresh_token' => session('refreshToken')
]);
// Store the new values
$this->updateTokens($newToken);
return $newToken->getToken();
}
catch (League\OAuth2\Client\Provider\Exception\IdentityProviderException $e) {
return '';
}
}
// Token is still valid, just return it
return session('accessToken');
}
}
\ No newline at end of file
......@@ -10,8 +10,10 @@
"require": {
"php": "^7.2",
"fideloper/proxy": "^4.0",
"laravel/framework": "^6.2",
"laravel/tinker": "^2.0"
"laravel/framework": "^6.0",
"laravel/tinker": "^1.0",
"league/oauth2-client": "dev-master",
"microsoft/microsoft-graph": "^1.10"
},
"require-dev": {
"facade/ignition": "^1.4",
......
......@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "3bb4dacacf43532a01bf1d3d6dd3bbe1",
"content-hash": "3f4502f243404e0e70751134572e6283",
"packages": [
{
"name": "dnoegel/php-xdg-base-dir",
......@@ -224,26 +224,27 @@
},
{
"name": "egulias/email-validator",
"version": "2.1.14",
"version": "2.1.11",
"source": {
"type": "git",
"url": "https://github.com/egulias/EmailValidator.git",
"reference": "c4b8d12921999d8a561004371701dbc2e05b5ece"
"reference": "92dd169c32f6f55ba570c309d83f5209cefb5e23"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/egulias/EmailValidator/zipball/c4b8d12921999d8a561004371701dbc2e05b5ece",
"reference": "c4b8d12921999d8a561004371701dbc2e05b5ece",
"url": "https://api.github.com/repos/egulias/EmailValidator/zipball/92dd169c32f6f55ba570c309d83f5209cefb5e23",
"reference": "92dd169c32f6f55ba570c309d83f5209cefb5e23",
"shasum": ""
},
"require": {
"doctrine/lexer": "^1.0.1",
"php": ">=5.5"
"php": ">= 5.5"
},
"require-dev": {
"dominicsayers/isemail": "^3.0.7",
"phpunit/phpunit": "^4.8.36|^7.5.15",
"satooshi/php-coveralls": "^1.0.1"
"dominicsayers/isemail": "dev-master",
"phpunit/phpunit": "^4.8.35||^5.7||^6.0",
"satooshi/php-coveralls": "^1.0.1",
"symfony/phpunit-bridge": "^4.4@dev"
},
"suggest": {
"ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation"
......@@ -277,20 +278,66 @@
"validation",
"validator"
],
"time": "2020-01-05T14:11:20+00:00"
"time": "2019-08-13T17:33:27+00:00"
},
{
"name": "erusev/parsedown",
"version": "1.7.3",
"source": {
"type": "git",
"url": "https://github.com/erusev/parsedown.git",
"reference": "6d893938171a817f4e9bc9e86f2da1e370b7bcd7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/erusev/parsedown/zipball/6d893938171a817f4e9bc9e86f2da1e370b7bcd7",
"reference": "6d893938171a817f4e9bc9e86f2da1e370b7bcd7",
"shasum": ""
},
"require": {
"ext-mbstring": "*",
"php": ">=5.3.0"
},
"require-dev": {
"phpunit/phpunit": "^4.8.35"
},
"type": "library",
"autoload": {
"psr-0": {
"Parsedown": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Emanuil Rusev",
"email": "hello@erusev.com",
"homepage": "http://erusev.com"
}
],
"description": "Parser for Markdown.",
"homepage": "http://parsedown.org",
"keywords": [
"markdown",
"parser"
],
"time": "2019-03-17T18:48:37+00:00"
},
{
"name": "fideloper/proxy",
"version": "4.2.2",
"version": "4.2.1",
"source": {
"type": "git",
"url": "https://github.com/fideloper/TrustedProxy.git",
"reference": "790194d5d3da89a713478875d2e2d05855a90a81"
"reference": "03085e58ec7bee24773fa5a8850751a6e61a7e8a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/fideloper/TrustedProxy/zipball/790194d5d3da89a713478875d2e2d05855a90a81",
"reference": "790194d5d3da89a713478875d2e2d05855a90a81",
"url": "https://api.github.com/repos/fideloper/TrustedProxy/zipball/03085e58ec7bee24773fa5a8850751a6e61a7e8a",
"reference": "03085e58ec7bee24773fa5a8850751a6e61a7e8a",
"shasum": ""
},
"require": {
......@@ -331,7 +378,196 @@
"proxy",
"trusted proxy"
],
"time": "2019-12-20T13:11:11+00:00"
"time": "2019-09-03T16:45:42+00:00"
},
{
"name": "guzzlehttp/guzzle",
"version": "6.5.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
"reference": "dbc2bc3a293ed6b1ae08a3651e2bfd213d19b6a5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/dbc2bc3a293ed6b1ae08a3651e2bfd213d19b6a5",
"reference": "dbc2bc3a293ed6b1ae08a3651e2bfd213d19b6a5",
"shasum": ""
},
"require": {
"ext-json": "*",
"guzzlehttp/promises": "^1.0",
"guzzlehttp/psr7": "^1.6.1",
"php": ">=5.5"
},
"require-dev": {
"ext-curl": "*",
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
"psr/log": "^1.1"
},
"suggest": {
"ext-intl": "Required for Internationalized Domain Name (IDN) support",
"psr/log": "Required for using the Log middleware"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "6.5-dev"
}
},
"autoload": {
"psr-4": {
"GuzzleHttp\\": "src/"
},
"files": [
"src/functions_include.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
}
],
"description": "Guzzle is a PHP HTTP client library",
"homepage": "http://guzzlephp.org/",
"keywords": [
"client",
"curl",
"framework",
"http",
"http client",
"rest",
"web service"
],
"time": "2019-12-07T18:20:45+00:00"
},
{
"name": "guzzlehttp/promises",
"version": "v1.3.1",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
"reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646",
"reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646",
"shasum": ""
},
"require": {
"php": ">=5.5.0"
},
"require-dev": {
"phpunit/phpunit": "^4.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.4-dev"
}
},
"autoload": {
"psr-4": {
"GuzzleHttp\\Promise\\": "src/"
},
"files": [
"src/functions_include.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
}
],
"description": "Guzzle promises library",
"keywords": [
"promise"
],
"time": "2016-12-20T10:07:11+00:00"
},
{
"name": "guzzlehttp/psr7",
"version": "1.6.1",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
"reference": "239400de7a173fe9901b9ac7c06497751f00727a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a",
"reference": "239400de7a173fe9901b9ac7c06497751f00727a",
"shasum": ""
},
"require": {
"php": ">=5.4.0",
"psr/http-message": "~1.0",
"ralouphie/getallheaders": "^2.0.5 || ^3.0.0"
},
"provide": {
"psr/http-message-implementation": "1.0"
},
"require-dev": {
"ext-zlib": "*",
"phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8"
},
"suggest": {
"zendframework/zend-httphandlerrunner": "Emit PSR-7 responses"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.6-dev"
}
},
"autoload": {
"psr-4": {
"GuzzleHttp\\Psr7\\": "src/"
},
"files": [
"src/functions_include.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
},
{
"name": "Tobias Schultze",
"homepage": "https://github.com/Tobion"
}
],
"description": "PSR-7 message implementation that also provides common utility methods",
"keywords": [
"http",
"message",
"psr-7",
"request",
"response",
"stream",
"uri",
"url"
],
"time": "2019-07-01T23:21:34+00:00"
},
{
"name": "jakub-onderka/php-console-color",
......@@ -423,27 +659,26 @@
},
{
"name": "laravel/framework",
"version": "v6.11.0",
"version": "v6.6.2",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
"reference": "17af23842c259edcfd8c5b9e6a7c86596e040034"
"reference": "27efba7e13aaf91a87ae9a63db158e943eb71410"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/framework/zipball/17af23842c259edcfd8c5b9e6a7c86596e040034",
"reference": "17af23842c259edcfd8c5b9e6a7c86596e040034",
"url": "https://api.github.com/repos/laravel/framework/zipball/27efba7e13aaf91a87ae9a63db158e943eb71410",
"reference": "27efba7e13aaf91a87ae9a63db158e943eb71410",
"shasum": ""
},
"require": {
"doctrine/inflector": "^1.1",
"dragonmantank/cron-expression": "^2.0",
"egulias/email-validator": "^2.1.10",
"erusev/parsedown": "^1.7",
"ext-json": "*",
"ext-mbstring": "*",
"ext-openssl": "*",
"league/commonmark": "^1.1",
"league/commonmark-ext-table": "^2.1",
"league/flysystem": "^1.0.8",
"monolog/monolog": "^1.12|^2.0",
"nesbot/carbon": "^2.0",
......@@ -503,13 +738,14 @@
"filp/whoops": "^2.4",
"guzzlehttp/guzzle": "^6.3",
"league/flysystem-cached-adapter": "^1.0",
"mockery/mockery": "^1.3.1",
"mockery/mockery": "^1.2.3",
"moontoast/math": "^1.1",
"orchestra/testbench-core": "^4.0",
"pda/pheanstalk": "^4.0",
"phpunit/phpunit": "^8.4|^9.0",
"phpunit/phpunit": "^8.3",
"predis/predis": "^1.1.1",
"symfony/cache": "^4.3.4"
"symfony/cache": "^4.3",
"true/punycode": "^2.1"
},
"suggest": {
"aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.0).",
......@@ -527,7 +763,6 @@
"league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).",
"league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).",
"moontoast/math": "Required to use ordered UUIDs (^1.1).",
"nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).",
"pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).",
"psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).",
"pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0).",
......@@ -566,40 +801,40 @@
"framework",
"laravel"
],
"time": "2020-01-14T15:12:09+00:00"
"time": "2019-12-05T13:49:53+00:00"
},
{
"name": "laravel/tinker",
"version": "v2.1.0",
"version": "v1.0.10",
"source": {
"type": "git",
"url": "https://github.com/laravel/tinker.git",
"reference": "d8ce361f2fd979c03e5f66c79d4a95a1c1e68640"
"reference": "ad571aacbac1539c30d480908f9d0c9614eaf1a7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/tinker/zipball/d8ce361f2fd979c03e5f66c79d4a95a1c1e68640",
"reference": "d8ce361f2fd979c03e5f66c79d4a95a1c1e68640",
"url": "https://api.github.com/repos/laravel/tinker/zipball/ad571aacbac1539c30d480908f9d0c9614eaf1a7",
"reference": "ad571aacbac1539c30d480908f9d0c9614eaf1a7",
"shasum": ""
},
"require": {
"illuminate/console": "^6.0|^7.0",
"illuminate/contracts": "^6.0|^7.0",
"illuminate/support": "^6.0|^7.0",
"php": "^7.2",
"psy/psysh": "^0.9",
"symfony/var-dumper": "^4.0|^5.0"
"illuminate/console": "~5.1|^6.0",
"illuminate/contracts": "~5.1|^6.0",
"illuminate/support": "~5.1|^6.0",
"php": ">=5.5.9",
"psy/psysh": "0.7.*|0.8.*|0.9.*",
"symfony/var-dumper": "~3.0|~4.0"
},
"require-dev": {
"phpunit/phpunit": "^8.0"
"phpunit/phpunit": "~4.0|~5.0"
},
"suggest": {
"illuminate/database": "The Illuminate Database package (^6.0|^7.0)."
"illuminate/database": "The Illuminate Database package (~5.1)."
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.x-dev"
"dev-master": "1.0-dev"
},
"laravel": {
"providers": [
......@@ -629,113 +864,127 @@
"laravel",
"psysh"
],
"time": "2020-01-14T16:58:39+00:00"
"time": "2019-08-07T15:10:45+00:00"
},
{
"name": "league/commonmark",
"version": "1.2.1",
"name": "league/flysystem",
"version": "1.0.61",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/commonmark.git",
"reference": "74e08793c41c72c8ed7a22df803f2ffcaf77efb7"
"url": "https://github.com/thephpleague/flysystem.git",
"reference": "4fb13c01784a6c9f165a351e996871488ca2d8c9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/thephpleague/commonmark/zipball/74e08793c41c72c8ed7a22df803f2ffcaf77efb7",
"reference": "74e08793c41c72c8ed7a22df803f2ffcaf77efb7",
"url": "https://api.github.com/repos/thephpleague/flysystem/zipball/4fb13c01784a6c9f165a351e996871488ca2d8c9",
"reference": "4fb13c01784a6c9f165a351e996871488ca2d8c9",
"shasum": ""
},
"require": {
"ext-mbstring": "*",
"php": "^7.1"
"ext-fileinfo": "*",
"php": ">=5.5.9"
},
"replace": {
"colinodell/commonmark-php": "*"
"conflict": {
"league/flysystem-sftp": "<1.0.6"
},
"require-dev": {
"cebe/markdown": "~1.0",
"commonmark/commonmark.js": "0.29.1",
"erusev/parsedown": "~1.0",
"ext-json": "*",
"michelf/php-markdown": "~1.4",
"mikehaertl/php-shellcommand": "^1.4",
"phpstan/phpstan-shim": "^0.11.5",
"phpunit/phpunit": "^7.5",
"scrutinizer/ocular": "^1.5",
"symfony/finder": "^4.2"
"phpspec/phpspec": "^3.4",
"phpunit/phpunit": "^5.7.10"
},
"suggest": {
"league/commonmark-extras": "Library of useful extensions including smart punctuation"
"ext-fileinfo": "Required for MimeType",
"ext-ftp": "Allows you to use FTP server storage",
"ext-openssl": "Allows you to use FTPS server storage",
"league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2",
"league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3",
"league/flysystem-azure": "Allows you to use Windows Azure Blob storage",
"league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching",
"league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem",
"league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files",
"league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib",
"league/flysystem-webdav": "Allows you to use WebDAV storage",
"league/flysystem-ziparchive": "Allows you to use ZipArchive adapter",
"spatie/flysystem-dropbox": "Allows you to use Dropbox storage",
"srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications"
},
"bin": [
"bin/commonmark"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.3-dev"
"dev-master": "1.1-dev"
}
},
"autoload": {
"psr-4": {
"League\\CommonMark\\": "src"
"League\\Flysystem\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
"MIT"
],
"authors": [
{
"name": "Colin O'Dell",
"email": "colinodell@gmail.com",
"homepage": "https://www.colinodell.com",
"role": "Lead Developer"
"name": "Frank de Jonge",
"email": "info@frenky.net"
}
],
"description": "PHP Markdown parser based on the CommonMark spec",
"homepage": "https://commonmark.thephpleague.com",
"description": "Filesystem abstraction: Many filesystems, one API.",
"keywords": [
"commonmark",
"markdown",
"parser"
"Cloud Files",
"WebDAV",
"abstraction",
"aws",
"cloud",
"copy.com",
"dropbox",
"file systems",
"files",
"filesystem",
"filesystems",
"ftp",
"rackspace",
"remote",
"s3",
"sftp",
"storage"
],
"time": "2020-01-15T03:32:39+00:00"
"time": "2019-12-08T21:46:50+00:00"
},
{
"name": "league/commonmark-ext-table",
"version": "v2.1.0",
"name": "league/oauth2-client",
"version": "dev-master",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/commonmark-ext-table.git",
"reference": "3228888ea69636e855efcf6636ff8e6316933fe7"
"url": "https://github.com/thephpleague/oauth2-client.git",
"reference": "8c318529c0a951ec46b59b675711815a9231a87e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/thephpleague/commonmark-ext-table/zipball/3228888ea69636e855efcf6636ff8e6316933fe7",
"reference": "3228888ea69636e855efcf6636ff8e6316933fe7",
"url": "https://api.github.com/repos/thephpleague/oauth2-client/zipball/8c318529c0a951ec46b59b675711815a9231a87e",
"reference": "8c318529c0a951ec46b59b675711815a9231a87e",
"shasum": ""
},
"require": {
"league/commonmark": "~0.19.3|^1.0",
"php": "^7.1"
"guzzlehttp/guzzle": "^6.0",
"paragonie/random_compat": "^1|^2|^9.99",
"php": "^5.6|^7.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^2.14",
"phpstan/phpstan": "~0.11",
"phpunit/phpunit": "^7.0|^8.0",
"symfony/var-dumper": "^4.0",
"vimeo/psalm": "^3.0"
"eloquent/liberator": "^2.0",
"eloquent/phony-phpunit": "^1.0|^3.0",
"jakub-onderka/php-parallel-lint": "^0.9.2",
"phpunit/phpunit": "^5.7|^6.0",
"squizlabs/php_codesniffer": "^2.3|^3.0"
},
"type": "commonmark-extension",
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.2-dev"
"dev-2.x": "2.0.x-dev"
}
},
"autoload": {
"psr-4": {
"League\\CommonMark\\Ext\\Table\\": "src"
"League\\OAuth2\\Client\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
......@@ -744,79 +993,58 @@
],
"authors": [
{
"name": "Martin Hasoň",
"email": "martin.hason@gmail.com"
},
{
"name": "Webuni s.r.o.",
"homepage": "https://www.webuni.cz"
"name": "Alex Bilbie",
"email": "hello@alexbilbie.com",
"homepage": "http://www.alexbilbie.com",
"role": "Developer"
},
{
"name": "Colin O'Dell",
"email": "colinodell@gmail.com",
"homepage": "https://www.colinodell.com"
"name": "Woody Gilk",
"homepage": "https://github.com/shadowhand",
"role": "Contributor"
}
],
"description": "Table extension for league/commonmark",
"homepage": "https://github.com/thephpleague/commonmark-ext-table",
"description": "OAuth 2.0 Client Library",
"keywords": [
"commonmark",
"extension",
"markdown",
"table"
"Authentication",
"SSO",
"authorization",
"identity",
"idp",
"oauth",
"oauth2",
"single sign on"
],
"time": "2019-09-26T13:28:33+00:00"
"time": "2019-09-18T15:36:52+00:00"
},
{
"name": "league/flysystem",
"version": "1.0.46",
"name": "microsoft/microsoft-graph",
"version": "1.12.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/flysystem.git",
"reference": "f3e0d925c18b92cf3ce84ea5cc58d62a1762a2b2"
"url": "https://github.com/microsoftgraph/msgraph-sdk-php.git",
"reference": "8bcd1c3ebcb6dbd65713a180d85432eedb3faeed"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/thephpleague/flysystem/zipball/f3e0d925c18b92cf3ce84ea5cc58d62a1762a2b2",
"reference": "f3e0d925c18b92cf3ce84ea5cc58d62a1762a2b2",
"url": "https://api.github.com/repos/microsoftgraph/msgraph-sdk-php/zipball/8bcd1c3ebcb6dbd65713a180d85432eedb3faeed",
"reference": "8bcd1c3ebcb6dbd65713a180d85432eedb3faeed",
"shasum": ""
},
"require": {
"php": ">=5.5.9"
},
"conflict": {
"league/flysystem-sftp": "<1.0.6"
"guzzlehttp/guzzle": "^6.2",
"php": "^5.6 || ^7.0"
},
"require-dev": {
"ext-fileinfo": "*",
"phpspec/phpspec": "^3.4",
"phpunit/phpunit": "^5.7.10"
},
"suggest": {
"ext-fileinfo": "Required for MimeType",
"ext-ftp": "Allows you to use FTP server storage",
"ext-openssl": "Allows you to use FTPS server storage",
"league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2",
"league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3",
"league/flysystem-azure": "Allows you to use Windows Azure Blob storage",
"league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching",
"league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem",
"league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files",
"league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib",
"league/flysystem-webdav": "Allows you to use WebDAV storage",
"league/flysystem-ziparchive": "Allows you to use ZipArchive adapter",
"spatie/flysystem-dropbox": "Allows you to use Dropbox storage",
"srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications"
"mikey179/vfsstream": "^1.2",
"phpdocumentor/phpdocumentor": "^2.9",
"phpunit/phpunit": "^5.5"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.1-dev"
}
},
"autoload": {
"psr-4": {
"League\\Flysystem\\": "src/"
"Microsoft\\Graph\\": "src/",
"Microsoft\\Graph\\Test\\": "tests/Functional/"
}
},
"notification-url": "https://packagist.org/downloads/",
......@@ -825,44 +1053,27 @@
],
"authors": [
{
"name": "Frank de Jonge",
"email": "info@frenky.net"
"name": "Michael Mainer",
"email": "mmainer@microsoft.com",
"role": "Developer"
}
],
"description": "Filesystem abstraction: Many filesystems, one API.",
"keywords": [
"Cloud Files",
"WebDAV",
"abstraction",
"aws",
"cloud",
"copy.com",
"dropbox",
"file systems",
"files",
"filesystem",
"filesystems",
"ftp",
"rackspace",
"remote",
"s3",
"sftp",
"storage"
],
"time": "2018-08-22T07:45:22+00:00"
"description": "The Microsoft Graph SDK for PHP",
"homepage": "https://graph.microsoft.io/en-us/",
"time": "2019-10-29T21:37:52+00:00"
},
{
"name": "monolog/monolog",
"version": "2.0.2",
"version": "2.0.1",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/monolog.git",
"reference": "c861fcba2ca29404dc9e617eedd9eff4616986b8"
"reference": "f9d56fd2f5533322caccdfcddbb56aedd622ef1c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/c861fcba2ca29404dc9e617eedd9eff4616986b8",
"reference": "c861fcba2ca29404dc9e617eedd9eff4616986b8",
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/f9d56fd2f5533322caccdfcddbb56aedd622ef1c",
"reference": "f9d56fd2f5533322caccdfcddbb56aedd622ef1c",
"shasum": ""
},
"require": {
......@@ -930,20 +1141,20 @@
"logging",
"psr-3"
],
"time": "2019-12-20T14:22:59+00:00"
"time": "2019-11-13T10:27:43+00:00"
},
{
"name": "nesbot/carbon",
"version": "2.28.0",
"version": "2.27.0",
"source": {
"type": "git",
"url": "https://github.com/briannesbitt/Carbon.git",
"reference": "e2bcbcd43e67ee6101d321d5de916251d2870ca8"
"reference": "13b8485a8690f103bf19cba64879c218b102b726"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/e2bcbcd43e67ee6101d321d5de916251d2870ca8",
"reference": "e2bcbcd43e67ee6101d321d5de916251d2870ca8",
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/13b8485a8690f103bf19cba64879c218b102b726",
"reference": "13b8485a8690f103bf19cba64879c218b102b726",
"shasum": ""
},
"require": {
......@@ -1000,7 +1211,7 @@
"datetime",
"time"
],
"time": "2019-12-16T16:30:25+00:00"
"time": "2019-11-20T06:59:06+00:00"
},
{
"name": "nikic/php-parser",
......@@ -1162,29 +1373,28 @@
},
{
"name": "phpoption/phpoption",
"version": "1.7.2",
"version": "1.6.0",
"source": {
"type": "git",
"url": "https://github.com/schmittjoh/php-option.git",
"reference": "77f7c4d2e65413aff5b5a8cc8b3caf7a28d81959"
"reference": "f4e7a6a1382183412246f0d361078c29fb85089e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/schmittjoh/php-option/zipball/77f7c4d2e65413aff5b5a8cc8b3caf7a28d81959",
"reference": "77f7c4d2e65413aff5b5a8cc8b3caf7a28d81959",
"url": "https://api.github.com/repos/schmittjoh/php-option/zipball/f4e7a6a1382183412246f0d361078c29fb85089e",
"reference": "f4e7a6a1382183412246f0d361078c29fb85089e",
"shasum": ""
},
"require": {
"php": "^5.5.9 || ^7.0"
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.3",
"phpunit/phpunit": "^4.8.35 || ^5.0 || ^6.0 || ^7.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.7-dev"
"dev-master": "1.6-dev"
}
},
"autoload": {
......@@ -1213,7 +1423,7 @@
"php",
"type"
],
"time": "2019-12-15T19:35:24+00:00"
"time": "2019-11-30T20:20:49+00:00"
},
{
"name": "psr/container",
......@@ -1264,6 +1474,56 @@
],
"time": "2017-02-14T16:28:37+00:00"
},
{
"name": "psr/http-message",
"version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-message.git",
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Http\\Message\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
}
],
"description": "Common interface for HTTP messages",
"homepage": "https://github.com/php-fig/http-message",
"keywords": [
"http",
"http-message",
"psr",
"psr-7",
"request",
"response"
],
"time": "2016-08-06T14:39:51+00:00"
},
{
"name": "psr/log",
"version": "1.1.2",
......@@ -1433,24 +1693,64 @@
],
"time": "2019-12-06T14:19:43+00:00"
},
{
"name": "ralouphie/getallheaders",
"version": "3.0.3",
"source": {
"type": "git",
"url": "https://github.com/ralouphie/getallheaders.git",
"reference": "120b605dfeb996808c31b6477290a714d356e822"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
"reference": "120b605dfeb996808c31b6477290a714d356e822",
"shasum": ""
},
"require": {
"php": ">=5.6"
},
"require-dev": {
"php-coveralls/php-coveralls": "^2.1",
"phpunit/phpunit": "^5 || ^6.5"
},
"type": "library",
"autoload": {
"files": [
"src/getallheaders.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Ralph Khattar",
"email": "ralph.khattar@gmail.com"
}
],
"description": "A polyfill for getallheaders.",
"time": "2019-03-08T08:55:37+00:00"
},
{
"name": "ramsey/uuid",
"version": "3.9.2",
"version": "3.9.1",
"source": {
"type": "git",
"url": "https://github.com/ramsey/uuid.git",
"reference": "7779489a47d443f845271badbdcedfe4df8e06fb"
"reference": "5ac2740e0c8c599d2bbe7f113a939f2b5b216c67"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ramsey/uuid/zipball/7779489a47d443f845271badbdcedfe4df8e06fb",
"reference": "7779489a47d443f845271badbdcedfe4df8e06fb",
"url": "https://api.github.com/repos/ramsey/uuid/zipball/5ac2740e0c8c599d2bbe7f113a939f2b5b216c67",
"reference": "5ac2740e0c8c599d2bbe7f113a939f2b5b216c67",
"shasum": ""
},
"require": {
"ext-json": "*",
"paragonie/random_compat": "^1 | ^2 | 9.99.99",
"php": "^5.4 | ^7 | ^8",
"php": "^5.4 | ^7",
"symfony/polyfill-ctype": "^1.8"
},
"replace": {
......@@ -1460,13 +1760,13 @@
"codeception/aspect-mock": "^1 | ^2",
"doctrine/annotations": "^1.2",
"goaop/framework": "1.0.0-alpha.2 | ^1 | ^2.1",
"jakub-onderka/php-parallel-lint": "^1",
"mockery/mockery": "^0.9.11 | ^1",
"jakub-onderka/php-parallel-lint": "^0.9.0",
"mockery/mockery": "^0.9.9",
"moontoast/math": "^1.1",
"paragonie/random-lib": "^2",
"php-mock/php-mock-phpunit": "^0.3 | ^1.1",
"phpunit/phpunit": "^4.8 | ^5.4 | ^6.5",
"squizlabs/php_codesniffer": "^3.5"
"squizlabs/php_codesniffer": "^2.3"
},
"suggest": {
"ext-ctype": "Provides support for PHP Ctype functions",
......@@ -1518,7 +1818,7 @@
"identifier",
"uuid"
],
"time": "2019-12-17T08:18:51+00:00"
"time": "2019-12-01T04:55:27+00:00"
},
{
"name": "swiftmailer/swiftmailer",
......@@ -1584,16 +1884,16 @@
},
{
"name": "symfony/console",
"version": "v4.4.2",
"version": "v4.4.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
"reference": "82437719dab1e6bdd28726af14cb345c2ec816d0"
"reference": "f0aea3df20d15635b3cb9730ca5eea1c65b7f201"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/82437719dab1e6bdd28726af14cb345c2ec816d0",
"reference": "82437719dab1e6bdd28726af14cb345c2ec816d0",
"url": "https://api.github.com/repos/symfony/console/zipball/f0aea3df20d15635b3cb9730ca5eea1c65b7f201",
"reference": "f0aea3df20d15635b3cb9730ca5eea1c65b7f201",
"shasum": ""
},
"require": {
......@@ -1656,11 +1956,11 @@
],
"description": "Symfony Console Component",
"homepage": "https://symfony.com",
"time": "2019-12-17T10:32:23+00:00"
"time": "2019-12-01T10:06:17+00:00"
},
{
"name": "symfony/css-selector",
"version": "v5.0.2",
"version": "v5.0.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
......@@ -1713,16 +2013,16 @@
},
{
"name": "symfony/debug",
"version": "v4.4.2",
"version": "v4.4.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug.git",
"reference": "5c4c1db977dc70bb3250e1308d3e8c6341aa38f5"
"reference": "b8600a1d7d20b0e80906398bb1f50612fa074a8e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/debug/zipball/5c4c1db977dc70bb3250e1308d3e8c6341aa38f5",
"reference": "5c4c1db977dc70bb3250e1308d3e8c6341aa38f5",
"url": "https://api.github.com/repos/symfony/debug/zipball/b8600a1d7d20b0e80906398bb1f50612fa074a8e",
"reference": "b8600a1d7d20b0e80906398bb1f50612fa074a8e",
"shasum": ""
},
"require": {
......@@ -1765,20 +2065,20 @@
],
"description": "Symfony Debug Component",
"homepage": "https://symfony.com",
"time": "2019-12-16T14:46:54+00:00"
"time": "2019-11-28T13:33:56+00:00"
},
{
"name": "symfony/error-handler",
"version": "v4.4.2",
"version": "v4.4.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/error-handler.git",
"reference": "6d7d7712a6ff5215ec26215672293b154f1db8c1"
"reference": "a1ad02d62789efed1d2b2796f1c15e0c6a00fc3b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/error-handler/zipball/6d7d7712a6ff5215ec26215672293b154f1db8c1",
"reference": "6d7d7712a6ff5215ec26215672293b154f1db8c1",
"url": "https://api.github.com/repos/symfony/error-handler/zipball/a1ad02d62789efed1d2b2796f1c15e0c6a00fc3b",
"reference": "a1ad02d62789efed1d2b2796f1c15e0c6a00fc3b",
"shasum": ""
},
"require": {
......@@ -1821,11 +2121,11 @@
],
"description": "Symfony ErrorHandler Component",
"homepage": "https://symfony.com",
"time": "2019-12-16T14:46:54+00:00"
"time": "2019-12-01T08:46:01+00:00"
},
{
"name": "symfony/event-dispatcher",
"version": "v4.4.2",
"version": "v4.4.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
......@@ -1953,7 +2253,7 @@
},
{
"name": "symfony/finder",
"version": "v4.4.2",
"version": "v4.4.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
......@@ -2002,16 +2302,16 @@
},
{
"name": "symfony/http-foundation",
"version": "v4.4.2",
"version": "v4.4.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
"reference": "fcae1cff5b57b2a9c3aabefeb1527678705ddb62"
"reference": "8bccc59e61b41963d14c3dbdb23181e5c932a1d5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/fcae1cff5b57b2a9c3aabefeb1527678705ddb62",
"reference": "fcae1cff5b57b2a9c3aabefeb1527678705ddb62",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/8bccc59e61b41963d14c3dbdb23181e5c932a1d5",
"reference": "8bccc59e61b41963d14c3dbdb23181e5c932a1d5",
"shasum": ""
},
"require": {
......@@ -2053,20 +2353,20 @@
],
"description": "Symfony HttpFoundation Component",
"homepage": "https://symfony.com",
"time": "2019-12-19T15:57:49+00:00"
"time": "2019-11-28T13:33:56+00:00"
},
{
"name": "symfony/http-kernel",
"version": "v4.4.2",
"version": "v4.4.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
"reference": "fe310d2e95cd4c356836c8ecb0895a46d97fede2"
"reference": "e4187780ed26129ee86d5234afbebf085e144f88"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/fe310d2e95cd4c356836c8ecb0895a46d97fede2",
"reference": "fe310d2e95cd4c356836c8ecb0895a46d97fede2",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/e4187780ed26129ee86d5234afbebf085e144f88",
"reference": "e4187780ed26129ee86d5234afbebf085e144f88",
"shasum": ""
},
"require": {
......@@ -2143,11 +2443,11 @@
],
"description": "Symfony HttpKernel Component",
"homepage": "https://symfony.com",
"time": "2019-12-19T16:23:40+00:00"
"time": "2019-12-01T14:06:38+00:00"
},
{
"name": "symfony/mime",
"version": "v5.0.2",
"version": "v5.0.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/mime.git",
......@@ -2560,16 +2860,16 @@
},
{
"name": "symfony/process",
"version": "v4.4.2",
"version": "v4.4.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
"reference": "b84501ad50adb72a94fb460a5b5c91f693e99c9b"
"reference": "51c0135ef3f44c5803b33dc60e96bf4f77752726"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/process/zipball/b84501ad50adb72a94fb460a5b5c91f693e99c9b",
"reference": "b84501ad50adb72a94fb460a5b5c91f693e99c9b",
"url": "https://api.github.com/repos/symfony/process/zipball/51c0135ef3f44c5803b33dc60e96bf4f77752726",
"reference": "51c0135ef3f44c5803b33dc60e96bf4f77752726",
"shasum": ""
},
"require": {
......@@ -2605,20 +2905,20 @@
],
"description": "Symfony Process Component",
"homepage": "https://symfony.com",
"time": "2019-12-06T10:06:46+00:00"
"time": "2019-11-28T13:33:56+00:00"
},
{
"name": "symfony/routing",
"version": "v4.4.2",
"version": "v4.4.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
"reference": "628bcafae1b2043969378dcfbf9c196539a38722"
"reference": "51f3f20ad29329a0bdf5c0e2f722d3764b065273"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/routing/zipball/628bcafae1b2043969378dcfbf9c196539a38722",
"reference": "628bcafae1b2043969378dcfbf9c196539a38722",
"url": "https://api.github.com/repos/symfony/routing/zipball/51f3f20ad29329a0bdf5c0e2f722d3764b065273",
"reference": "51f3f20ad29329a0bdf5c0e2f722d3764b065273",
"shasum": ""
},
"require": {
......@@ -2681,7 +2981,7 @@
"uri",
"url"
],
"time": "2019-12-12T12:53:52+00:00"
"time": "2019-12-01T08:39:58+00:00"
},
{
"name": "symfony/service-contracts",
......@@ -2743,16 +3043,16 @@
},
{
"name": "symfony/translation",
"version": "v4.4.2",
"version": "v4.4.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
"reference": "f7669f48a9633bf8139bc026c755e894b7206677"
"reference": "897fb68ee7933372517b551d6f08c6d4bb0b8c40"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/translation/zipball/f7669f48a9633bf8139bc026c755e894b7206677",
"reference": "f7669f48a9633bf8139bc026c755e894b7206677",
"url": "https://api.github.com/repos/symfony/translation/zipball/897fb68ee7933372517b551d6f08c6d4bb0b8c40",
"reference": "897fb68ee7933372517b551d6f08c6d4bb0b8c40",
"shasum": ""
},
"require": {
......@@ -2815,7 +3115,7 @@
],
"description": "Symfony Translation Component",
"homepage": "https://symfony.com",
"time": "2019-12-12T12:53:52+00:00"
"time": "2019-11-12T17:18:47+00:00"
},
{
"name": "symfony/translation-contracts",
......@@ -2876,16 +3176,16 @@
},
{
"name": "symfony/var-dumper",
"version": "v4.4.2",
"version": "v4.4.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
"reference": "be330f919bdb395d1e0c3f2bfb8948512d6bdd99"
"reference": "0a89a1dbbedd9fb2cfb2336556dec8305273c19a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/be330f919bdb395d1e0c3f2bfb8948512d6bdd99",
"reference": "be330f919bdb395d1e0c3f2bfb8948512d6bdd99",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/0a89a1dbbedd9fb2cfb2336556dec8305273c19a",
"reference": "0a89a1dbbedd9fb2cfb2336556dec8305273c19a",
"shasum": ""
},
"require": {
......@@ -2948,7 +3248,7 @@
"debug",
"dump"
],
"time": "2019-12-18T13:41:29+00:00"
"time": "2019-11-28T13:33:56+00:00"
},
{
"name": "tijsverkoyen/css-to-inline-styles",
......@@ -3116,16 +3416,16 @@
},
{
"name": "facade/flare-client-php",
"version": "1.3.1",
"version": "1.3.0",
"source": {
"type": "git",
"url": "https://github.com/facade/flare-client-php.git",
"reference": "24444ea0e1556f0a4b5fc8e61802caf72ae9a408"
"reference": "0fd0c0a5c75a5acf04578311a08a7832e06a981c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/facade/flare-client-php/zipball/24444ea0e1556f0a4b5fc8e61802caf72ae9a408",
"reference": "24444ea0e1556f0a4b5fc8e61802caf72ae9a408",
"url": "https://api.github.com/repos/facade/flare-client-php/zipball/0fd0c0a5c75a5acf04578311a08a7832e06a981c",
"reference": "0fd0c0a5c75a5acf04578311a08a7832e06a981c",
"shasum": ""
},
"require": {
......@@ -3133,7 +3433,7 @@
"illuminate/pipeline": "~5.5|~5.6|~5.7|~5.8|^6.0",
"php": "^7.1",
"symfony/http-foundation": "~3.3|~4.1",
"symfony/var-dumper": "^3.4|^4.0|^5.0"
"symfony/var-dumper": "^3.4|^4.0"
},
"require-dev": {
"larapack/dd": "^1.1",
......@@ -3166,20 +3466,20 @@
"flare",
"reporting"
],
"time": "2019-12-15T18:28:38+00:00"
"time": "2019-11-27T10:09:46+00:00"
},
{
"name": "facade/ignition",
"version": "1.14.0",
"version": "1.13.0",
"source": {
"type": "git",
"url": "https://github.com/facade/ignition.git",
"reference": "c6d36683b40e005cd395ddff1bbfbf0aa0fcd3c5"
"reference": "1d2103aefecc9c4e6975bcc77fc5eceb330adb33"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/facade/ignition/zipball/c6d36683b40e005cd395ddff1bbfbf0aa0fcd3c5",
"reference": "c6d36683b40e005cd395ddff1bbfbf0aa0fcd3c5",
"url": "https://api.github.com/repos/facade/ignition/zipball/1d2103aefecc9c4e6975bcc77fc5eceb330adb33",
"reference": "1d2103aefecc9c4e6975bcc77fc5eceb330adb33",
"shasum": ""
},
"require": {
......@@ -3237,7 +3537,7 @@
"laravel",
"page"
],
"time": "2020-01-06T09:32:42+00:00"
"time": "2019-11-27T11:17:18+00:00"
},
{
"name": "facade/ignition-contracts",
......@@ -3285,16 +3585,16 @@
},
{
"name": "filp/whoops",
"version": "2.7.1",
"version": "2.5.0",
"source": {
"type": "git",
"url": "https://github.com/filp/whoops.git",
"reference": "fff6f1e4f36be0e0d0b84d66b413d9dcb0c49130"
"reference": "cde50e6720a39fdacb240159d3eea6865d51fd96"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/filp/whoops/zipball/fff6f1e4f36be0e0d0b84d66b413d9dcb0c49130",
"reference": "fff6f1e4f36be0e0d0b84d66b413d9dcb0c49130",
"url": "https://api.github.com/repos/filp/whoops/zipball/cde50e6720a39fdacb240159d3eea6865d51fd96",
"reference": "cde50e6720a39fdacb240159d3eea6865d51fd96",
"shasum": ""
},
"require": {
......@@ -3303,8 +3603,8 @@
},
"require-dev": {
"mockery/mockery": "^0.9 || ^1.0",
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0",
"symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0"
"phpunit/phpunit": "^4.8.35 || ^5.7",
"symfony/var-dumper": "^2.6 || ^3.0 || ^4.0"
},
"suggest": {
"symfony/var-dumper": "Pretty print complex values better with var-dumper available",
......@@ -3313,7 +3613,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.6-dev"
"dev-master": "2.2-dev"
}
},
"autoload": {
......@@ -3328,8 +3628,8 @@
"authors": [
{
"name": "Filipe Dobreira",
"homepage": "https://github.com/filp",
"role": "Developer"
"role": "Developer",
"homepage": "https://github.com/filp"
}
],
"description": "php error handling for cool kids",
......@@ -3342,20 +3642,20 @@
"throwable",
"whoops"
],
"time": "2020-01-15T10:00:00+00:00"
"time": "2019-08-07T09:00:00+00:00"
},
{
"name": "fzaninotto/faker",
"version": "v1.9.1",
"version": "v1.9.0",
"source": {
"type": "git",
"url": "https://github.com/fzaninotto/Faker.git",
"reference": "fc10d778e4b84d5bd315dad194661e091d307c6f"
"reference": "27a216cbe72327b2d6369fab721a5843be71e57d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/fzaninotto/Faker/zipball/fc10d778e4b84d5bd315dad194661e091d307c6f",
"reference": "fc10d778e4b84d5bd315dad194661e091d307c6f",
"url": "https://api.github.com/repos/fzaninotto/Faker/zipball/27a216cbe72327b2d6369fab721a5843be71e57d",
"reference": "27a216cbe72327b2d6369fab721a5843be71e57d",
"shasum": ""
},
"require": {
......@@ -3368,9 +3668,7 @@
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.9-dev"
}
"branch-alias": []
},
"autoload": {
"psr-4": {
......@@ -3392,7 +3690,7 @@
"faker",
"fixtures"
],
"time": "2019-12-12T13:22:17+00:00"
"time": "2019-11-14T13:13:06+00:00"
},
{
"name": "hamcrest/hamcrest-php",
......@@ -3444,22 +3742,23 @@
},
{
"name": "mockery/mockery",
"version": "1.3.1",
"version": "1.3.0",
"source": {
"type": "git",
"url": "https://github.com/mockery/mockery.git",
"reference": "f69bbde7d7a75d6b2862d9ca8fab1cd28014b4be"
"reference": "5571962a4f733fbb57bede39778f71647fae8e66"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/mockery/mockery/zipball/f69bbde7d7a75d6b2862d9ca8fab1cd28014b4be",
"reference": "f69bbde7d7a75d6b2862d9ca8fab1cd28014b4be",
"url": "https://api.github.com/repos/mockery/mockery/zipball/5571962a4f733fbb57bede39778f71647fae8e66",
"reference": "5571962a4f733fbb57bede39778f71647fae8e66",
"shasum": ""
},
"require": {
"hamcrest/hamcrest-php": "~2.0",
"lib-pcre": ">=7.0",
"php": ">=5.6.0"
"php": ">=5.6.0",
"sebastian/comparator": "^1.2.4|^3.0"
},
"require-dev": {
"phpunit/phpunit": "~5.7.10|~6.5|~7.0|~8.0"
......@@ -3467,7 +3766,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.3.x-dev"
"dev-master": "1.2.x-dev"
}
},
"autoload": {
......@@ -3505,20 +3804,20 @@
"test double",
"testing"
],
"time": "2019-12-26T09:49:15+00:00"
"time": "2019-11-24T07:54:50+00:00"
},
{
"name": "myclabs/deep-copy",
"version": "1.9.4",
"version": "1.9.3",
"source": {
"type": "git",
"url": "https://github.com/myclabs/DeepCopy.git",
"reference": "579bb7356d91f9456ccd505f24ca8b667966a0a7"
"reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/579bb7356d91f9456ccd505f24ca8b667966a0a7",
"reference": "579bb7356d91f9456ccd505f24ca8b667966a0a7",
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/007c053ae6f31bba39dfa19a7726f56e9763bbea",
"reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea",
"shasum": ""
},
"require": {
......@@ -3553,7 +3852,7 @@
"object",
"object graph"
],
"time": "2019-12-15T19:12:40+00:00"
"time": "2019-08-09T12:45:53+00:00"
},
{
"name": "nunomaduro/collision",
......@@ -3657,18 +3956,18 @@
"authors": [
{
"name": "Arne Blankerts",
"email": "arne@blankerts.de",
"role": "Developer"
"role": "Developer",
"email": "arne@blankerts.de"
},
{
"name": "Sebastian Heuer",
"email": "sebastian@phpeople.de",
"role": "Developer"
"role": "Developer",
"email": "sebastian@phpeople.de"
},
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de",
"role": "Developer"
"role": "Developer",
"email": "sebastian@phpunit.de"
}
],
"description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
......@@ -3775,16 +4074,16 @@
},
{
"name": "phpdocumentor/reflection-docblock",
"version": "4.3.4",
"version": "4.3.2",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
"reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c"
"reference": "b83ff7cfcfee7827e1e78b637a5904fe6a96698e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/da3fd972d6bafd628114f7e7e036f45944b62e9c",
"reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c",
"url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/b83ff7cfcfee7827e1e78b637a5904fe6a96698e",
"reference": "b83ff7cfcfee7827e1e78b637a5904fe6a96698e",
"shasum": ""
},
"require": {
......@@ -3796,7 +4095,6 @@
"require-dev": {
"doctrine/instantiator": "^1.0.5",
"mockery/mockery": "^1.0",
"phpdocumentor/type-resolver": "0.4.*",
"phpunit/phpunit": "^6.4"
},
"type": "library",
......@@ -3823,7 +4121,7 @@
}
],
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
"time": "2019-12-28T18:55:12+00:00"
"time": "2019-09-12T14:27:41+00:00"
},
{
"name": "phpdocumentor/type-resolver",
......@@ -3874,33 +4172,33 @@
},
{
"name": "phpspec/prophecy",
"version": "1.10.1",
"version": "1.9.0",
"source": {
"type": "git",
"url": "https://github.com/phpspec/prophecy.git",
"reference": "cbe1df668b3fe136bcc909126a0f529a78d4cbbc"
"reference": "f6811d96d97bdf400077a0cc100ae56aa32b9203"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpspec/prophecy/zipball/cbe1df668b3fe136bcc909126a0f529a78d4cbbc",
"reference": "cbe1df668b3fe136bcc909126a0f529a78d4cbbc",
"url": "https://api.github.com/repos/phpspec/prophecy/zipball/f6811d96d97bdf400077a0cc100ae56aa32b9203",
"reference": "f6811d96d97bdf400077a0cc100ae56aa32b9203",
"shasum": ""
},
"require": {
"doctrine/instantiator": "^1.0.2",
"php": "^5.3|^7.0",
"phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
"sebastian/comparator": "^1.2.3|^2.0|^3.0",
"sebastian/comparator": "^1.1|^2.0|^3.0",
"sebastian/recursion-context": "^1.0|^2.0|^3.0"
},
"require-dev": {
"phpspec/phpspec": "^2.5 || ^3.2",
"phpspec/phpspec": "^2.5|^3.2",
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.10.x-dev"
"dev-master": "1.8.x-dev"
}
},
"autoload": {
......@@ -3933,7 +4231,7 @@
"spy",
"stub"
],
"time": "2019-12-22T21:05:45+00:00"
"time": "2019-10-03T11:07:50+00:00"
},
{
"name": "phpunit/php-code-coverage",
......@@ -4189,16 +4487,16 @@
},
{
"name": "phpunit/phpunit",
"version": "8.5.2",
"version": "8.5.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "018b6ac3c8ab20916db85fa91bf6465acb64d1e0"
"reference": "3ee1c1fd6fc264480c25b6fb8285edefe1702dab"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/018b6ac3c8ab20916db85fa91bf6465acb64d1e0",
"reference": "018b6ac3c8ab20916db85fa91bf6465acb64d1e0",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3ee1c1fd6fc264480c25b6fb8285edefe1702dab",
"reference": "3ee1c1fd6fc264480c25b6fb8285edefe1702dab",
"shasum": ""
},
"require": {
......@@ -4268,20 +4566,20 @@
"testing",
"xunit"
],
"time": "2020-01-08T08:49:49+00:00"
"time": "2019-12-06T05:41:38+00:00"
},
{
"name": "scrivo/highlight.php",
"version": "v9.17.1.0",
"version": "v9.15.10.0",
"source": {
"type": "git",
"url": "https://github.com/scrivo/highlight.php.git",
"reference": "5451a9ad6d638559cf2a092880f935c39776134e"
"reference": "9ad3adb4456dc91196327498dbbce6aa1ba1239e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/scrivo/highlight.php/zipball/5451a9ad6d638559cf2a092880f935c39776134e",
"reference": "5451a9ad6d638559cf2a092880f935c39776134e",
"url": "https://api.github.com/repos/scrivo/highlight.php/zipball/9ad3adb4456dc91196327498dbbce6aa1ba1239e",
"reference": "9ad3adb4456dc91196327498dbbce6aa1ba1239e",
"shasum": ""
},
"require": {
......@@ -4291,8 +4589,7 @@
},
"require-dev": {
"phpunit/phpunit": "^4.8|^5.7",
"symfony/finder": "^3.4",
"symfony/var-dumper": "^3.4"
"symfony/finder": "^2.8"
},
"suggest": {
"ext-dom": "Needed to make use of the features in the utilities namespace"
......@@ -4314,18 +4611,18 @@
"authors": [
{
"name": "Geert Bergman",
"homepage": "http://www.scrivo.org/",
"role": "Project Author"
"role": "Project Author",
"homepage": "http://www.scrivo.org/"
},
{
"name": "Vladimir Jimenez",
"homepage": "https://allejo.io",
"role": "Maintainer"
"role": "Contributor",
"homepage": "https://allejo.io"
},
{
"name": "Martin Folkers",
"homepage": "https://twobrain.io",
"role": "Contributor"
"role": "Contributor",
"homepage": "https://twobrain.io"
}
],
"description": "Server side syntax highlighter that supports 185 languages. It's a PHP port of highlight.js",
......@@ -4336,7 +4633,7 @@
"highlight.php",
"syntax"
],
"time": "2019-12-13T21:54:06+00:00"
"time": "2019-08-27T04:27:48+00:00"
},
{
"name": "sebastian/code-unit-reverse-lookup",
......@@ -4986,8 +5283,8 @@
"authors": [
{
"name": "Arne Blankerts",
"email": "arne@blankerts.de",
"role": "Developer"
"role": "Developer",
"email": "arne@blankerts.de"
}
],
"description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
......@@ -5044,7 +5341,9 @@
],
"aliases": [],
"minimum-stability": "dev",
"stability-flags": [],
"stability-flags": {
"league/oauth2-client": 20
},
"prefer-stable": true,
"prefer-lowest": false,
"platform": {
......
body {
padding-top: 4.5rem;
}
.alert-pre {
word-wrap: break-word;
word-break: break-all;
white-space: pre-wrap;
}
\ No newline at end of file
@extends('layout')
@section('content')
<h1>Calendar</h1>
<table class="table">
<thead>
<tr>
<th scope="col">Organizer</th>
<th scope="col">Subject</th>
<th scope="col">Start</th>
<th scope="col">End</th>
</tr>
</thead>
<tbody>
@isset($events)
@foreach($events as $event)
<tr>
<td>{{ $event->getOrganizer()->getEmailAddress()->getName() }}</td>
<td>{{ $event->getSubject() }}</td>
<td>{{ \Carbon\Carbon::parse($event->getStart()->getDateTime())->format('n/j/y g:i A') }}</td>
<td>{{ \Carbon\Carbon::parse($event->getEnd()->getDateTime())->format('n/j/y g:i A') }}</td>
</tr>
@endforeach
@endif
</tbody>
</table>
@endsection
\ No newline at end of file
@extends('layout')
@section('content')
<div class="jumbotron">
<h1>PHP Graph Tutorial</h1>
<p class="lead">This sample app shows how to use the Microsoft Graph API to access Office 365 data from PHP</p>
@if(isset($userName))
<h4>Welcome {{ $userName }}!</h4>
<p>Use the navigation bar at the top of the page to get started.</p>
@else
<a href="/signin" class="btn btn-primary btn-large">Click here to sign in</a>
@endif
</div>
@endsection
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<title>PHP Graph Tutorial</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css"
integrity="sha384-WskhaSGFgHYWDcbwN70/dfYBj47jz9qbsMId/iRN3ewGhXQFZCSftd1LZCfmhktB" crossorigin="anonymous">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.1.0/css/all.css"
integrity="sha384-lKuwvrZot6UHsBSfcMvOkWwlCMgc0TaWr+30HWe3a4ltaBwTZhyTEggF5tJv8tbt" crossorigin="anonymous">
<link rel="stylesheet" href="{{ asset('/css/app.css') }}">
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"
integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js"
integrity="sha384-smHYKdLADwkXOn1EmN1qk/HfnUcbVRZyYmZ4qpPea6sjB/pTJ0euyQp0Mk8ck+5T" crossorigin="anonymous"></script>
</head>
<body>
<nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">
<div class="container">
<a href="/" class="navbar-brand">PHP Graph Tutorial</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarCollapse"
aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarCollapse">
<ul class="navbar-nav mr-auto">
<li class="nav-item" style="font-size: 12px;">
<a href="/" class="nav-link {{$_SERVER['REQUEST_URI'] == '/' ? ' active' : ''}}">Home</a>
</li>
@if(isset($userName))
<li class="nav-item" style="font-size: 12px;" data-turbolinks="false">
<a href="/calendar" class="nav-link{{$_SERVER['REQUEST_URI'] == '/calendar' ? ' active' : ''}}">Calendar</a>
</li>
<li class="nav-item" style="font-size: 12px;" data-turbolinks="false">
<a href="/me" class="nav-link{{$_SERVER['REQUEST_URI'] == '/me' ? ' active' : ''}}">My Info</a>
</li>
<li class="nav-item" style="font-size: 12px;" data-turbolinks="false">
<a href="/users" class="nav-link{{$_SERVER['REQUEST_URI'] == '/users' ? ' active' : ''}}">All Users</a>
</li>
<li class="nav-item" style="font-size: 12px;" data-turbolinks="false">
<a href="/joinedTeams" class="nav-link{{$_SERVER['REQUEST_URI'] == '/joinedTeams' ? ' active' : ''}}">Joined Teams</a>
</li>
<li class="nav-item" style="font-size: 12px;" data-turbolinks="false">
<a href="/groups" class="nav-link{{$_SERVER['REQUEST_URI'] == '/groups' ? ' active' : ''}}">All Groups</a>
</li>
<li class="nav-item" style="font-size: 12px;" data-turbolinks="false">
<a href="/membersOfTeam/d1c164c6-db90-4c5b-b668-3ea57cb973cd" class="nav-link{{$_SERVER['REQUEST_URI'] == '/membersOfTeam/d1c164c6-db90-4c5b-b668-3ea57cb973cd' ? ' active' : ''}}">Team Members</a>
</li>
<li class="nav-item" style="font-size: 12px;" data-turbolinks="false">
<a href="/teamInfo/d1c164c6-db90-4c5b-b668-3ea57cb973cd" class="nav-link{{$_SERVER['REQUEST_URI'] == '/teamInfo/d1c164c6-db90-4c5b-b668-3ea57cb973cd' ? ' active' : ''}}">Team Info</a>
</li>
<li class="nav-item" style="font-size: 12px;" data-turbolinks="false">
<a href="/myLicense" class="nav-link{{$_SERVER['REQUEST_URI'] == '/myLicense' ? ' active' : ''}}">My License</a>
</li>
<li class="nav-item" style="font-size: 12px;" data-turbolinks="false">
<a href="/userLicense/d6a1a836-b0a9-4e0e-987a-af6cec0a6c29" class="nav-link{{$_SERVER['REQUEST_URI'] == '/userLicense/d6a1a836-b0a9-4e0e-987a-af6cec0a6c29' ? ' active' : ''}}">User License</a>
</li>
@endif
</ul>
<ul class="navbar-nav justify-content-end">
<li class="nav-item">
<a class="nav-link" href="https://developer.microsoft.com/graph/docs/concepts/overview" target="_blank">
<i class="fas fa-external-link-alt mr-1"></i>Docs
</a>
</li>
@if(isset($userName))
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button"
aria-haspopup="true" aria-expanded="false">
@if(isset($user_avatar))
<img src="{{ $user_avatar }}" class="rounded-circle align-self-center mr-2" style="width: 32px;">
@else
<i class="far fa-user-circle fa-lg rounded-circle align-self-center mr-2" style="width: 32px;"></i>
@endif
</a>
<div class="dropdown-menu dropdown-menu-right">
<h5 class="dropdown-item-text mb-0">{{ $userName }}</h5>
<p class="dropdown-item-text text-muted mb-0">{{ $userEmail }}</p>
<div class="dropdown-divider"></div>
<a href="/signout" class="dropdown-item">Sign Out</a>
</div>
</li>
@else
<li class="nav-item">
<a href="/signin" class="nav-link">Sign In</a>
</li>
@endif
</ul>
</div>
</div>
</nav>
<main role="main" class="container">
@if(session('error'))
<div class="alert alert-danger" role="alert">
<p class="mb-3">{{ session('error') }}</p>
@if(session('errorDetail'))
<pre class="alert-pre border bg-light p-2"><code>{{ session('errorDetail') }}</code></pre>
@endif
</div>
@endif
@yield('content')
</main>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Laravel</title>
<!-- Fonts -->
<link href="https://fonts.googleapis.com/css?family=Nunito:200,600" rel="stylesheet">
<!-- Styles -->
<style>
html, body {
background-color: #fff;
color: #636b6f;
font-family: 'Nunito', sans-serif;
font-weight: 200;
height: 100vh;
margin: 0;
}
.full-height {
height: 100vh;
}
.flex-center {
align-items: center;
display: flex;
justify-content: center;
}
.position-ref {
position: relative;
}
.top-right {
position: absolute;
right: 10px;
top: 18px;
}
.content {
text-align: center;
}
.title {
font-size: 84px;
}
.links > a {
color: #636b6f;
padding: 0 25px;
font-size: 13px;
font-weight: 600;
letter-spacing: .1rem;
text-decoration: none;
text-transform: uppercase;
}
.m-b-md {
margin-bottom: 30px;
}
</style>
</head>
<body>
<div class="flex-center position-ref full-height">
@if (Route::has('login'))
<div class="top-right links">
@auth
<a href="{{ url('/home') }}">Home</a>
@else
<a href="{{ route('login') }}">Login</a>
@if (Route::has('register'))
<a href="{{ route('register') }}">Register</a>
@endif
@endauth
</div>
@endif
<div class="content">
<div class="title m-b-md">
Laravel
</div>
<div class="links">
<a href="https://laravel.com/docs">Docs</a>
<a href="https://laracasts.com">Laracasts</a>
<a href="https://laravel-news.com">News</a>
<a href="https://blog.laravel.com">Blog</a>
<a href="https://nova.laravel.com">Nova</a>
<a href="https://forge.laravel.com">Forge</a>
<a href="https://vapor.laravel.com">Vapor</a>
<a href="https://github.com/laravel/laravel">GitHub</a>
</div>
</div>
</div>
</body>
</html>
<?php
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', function () {
return view('welcome');
});
Route::get('/', 'HomeController@welcome');
Route::get('/signin', 'MicrosoftGraphController@signin');
Route::get('/callback', 'MicrosoftGraphController@callback');
Route::get('/signout', 'MicrosoftGraphController@signout');
Route::get('/calendar', 'CalendarController@calendar');
//get details of the current user
Route::get('/me', 'MicrosoftGraphController@getMyInfo');
//get all users
Route::get('/users', 'MicrosoftGraphController@getAllUsers');
//get all joinedTeams
Route::get('/joinedTeams', 'MicrosoftGraphController@getMyTeams');
//get all groups
Route::get('/groups', 'MicrosoftGraphController@getAllGroups');
//get members of a team
Route::get('/membersOfTeam/{groupId}', 'MicrosoftGraphController@getTeamMembers');
//get team info
Route::get('/teamInfo/{groupId}', 'MicrosoftGraphController@getTeamInfo');
//get my license details
Route::get('/myLicense', 'MicrosoftGraphController@getMyLicense');
//get user license details
Route::get('/userLicense/{userId}', 'MicrosoftGraphController@getUserLicense');
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment