Add Symfony Deprecation Contracts package

- Created CHANGELOG.md to maintain version history.
- Added README.md with usage instructions for the trigger_deprecation() function.
- Initialized composer.json for the Symfony Deprecation Contracts library, specifying dependencies and autoloading.
This commit is contained in:
2025-12-15 08:43:18 +01:00
parent 0eedc919db
commit 778ee26fe4
643 changed files with 113899 additions and 109267 deletions

View File

@@ -0,0 +1,5 @@
/build
/vendor
composer.phar
composer.lock
.DS_Store

View File

@@ -0,0 +1,35 @@
filter:
excluded_paths: [tests/*]
checks:
php:
code_rating: true
remove_extra_empty_lines: true
remove_php_closing_tag: true
remove_trailing_whitespace: true
fix_use_statements:
remove_unused: true
preserve_multiple: false
preserve_blanklines: true
order_alphabetically: true
fix_php_opening_tag: true
fix_linefeed: true
fix_line_ending: true
fix_identation_4spaces: true
fix_doc_comments: true
tools:
external_code_coverage:
timeout: 600
runs: 3
php_analyzer: true
php_code_coverage: false
php_code_sniffer:
config:
standard: PSR2
filter:
paths: ['src']
php_loc:
enabled: true
excluded_dirs: [vendor, tests]
php_cpd:
enabled: true
excluded_dirs: [vendor, tests]

View File

@@ -0,0 +1,45 @@
language: php
matrix:
include:
- php: 5.6
- php: 7.0
- php: 7.1
- php: nightly
- php: hhvm-3.6
sudo: required
dist: trusty
group: edge
- php: hhvm-3.9
sudo: required
dist: trusty
group: edge
- php: hhvm-3.12
sudo: required
dist: trusty
group: edge
- php: hhvm-3.15
sudo: required
dist: trusty
group: edge
- php: hhvm-nightly
sudo: required
dist: trusty
group: edge
fast_finish: true
allow_failures:
- php: nightly
- php: hhvm-nightly
before_script:
- travis_retry composer self-update
- travis_retry composer install --no-interaction --prefer-source --dev
- travis_retry phpenv rehash
script:
- ./vendor/bin/phpcs --standard=psr2 src/
- ./vendor/bin/phpunit --coverage-text --coverage-clover=coverage.clover
after_script:
- wget https://scrutinizer-ci.com/ocular.phar
- php ocular.phar code-coverage:upload --format=php-clover coverage.clover

View File

@@ -0,0 +1,108 @@
# Changelog
All Notable changes to `oauth2-microsoft` will be documented in this file
## 2.2.0 - 2017-06-07
### Added
- Nothing
### Deprecated
- Nothing
### Fixed
- Nothing
### Removed
- Support for retrieving image urls.
### Security
- Nothing
## 2.1.0 - 2017-06-04
### Added
- Support for custom authorization urls, previous URLs serve as default values.
### Deprecated
- Nothing
### Fixed
- Nothing
### Removed
- Nothing
### Security
- Nothing
## 2.0.0 - 2017-01-25
### Added
- PHP 7.1 Support
### Deprecated
- Nothing
### Fixed
- Nothing
### Removed
- PHP 5.5 Support
### Security
- Nothing
## 1.0.0 - 2017-01-25
Bump for base package parity
## 0.2.1 - 2015-11-12
### Added
- Nothing
### Deprecated
- Nothing
### Fixed
- Improved null checks in checkResponse method
### Removed
- Nothing
### Security
- Nothing
## 0.2.0 - 2015-08-20
### Added
- Upgrade to support version 1.0 release of core client
### Deprecated
- Nothing
### Fixed
- Nothing
### Removed
- Nothing
### Security
- Nothing
## 0.1.0 - 2015-03-21
### Added
- Initial release!
### Deprecated
- Nothing
### Fixed
- Nothing
### Removed
- Nothing
### Security
- Nothing

View File

@@ -0,0 +1,42 @@
# Contributing
Contributions are **welcome** and will be fully **credited**.
We accept contributions via Pull Requests on [Github](https://github.com/stevenmaguire/oauth2-microsoft).
## Pull Requests
- **[PSR-2 Coding Standard](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md)** - The easiest way to apply the conventions is to install [PHP Code Sniffer](http://pear.php.net/package/PHP_CodeSniffer).
- **Add tests!** - Your patch won't be accepted if it doesn't have tests.
- **Document any change in behaviour** - Make sure the README and any other relevant documentation are kept up-to-date.
- **Consider our release cycle** - We try to follow SemVer. Randomly breaking public APIs is not an option.
- **Create topic branches** - Don't ask us to pull from your master branch.
- **One pull request per feature** - If you want to do more than one thing, send multiple pull requests.
- **Send coherent history** - Make sure each individual commit in your pull request is meaningful. If you had to make multiple intermediate commits while developing, please squash them before submitting.
- **Ensure tests pass!** - Please run the tests (see below) before submitting your pull request, and make sure they pass. We won't accept a patch until all tests pass.
- **Ensure no coding standards violations** - Please run PHP Code Sniffer using the PSR-2 standard (see below) before submitting your pull request. A violation will cause the build to fail, so please make sure there are no violations. We can't accept a patch if the build fails.
## Running Tests
``` bash
$ ./vendor/bin/phpunit
```
## Running PHP Code Sniffer
``` bash
$ ./vendor/bin/phpcs src --standard=psr2 -sp
```
**Happy coding**!

View File

@@ -0,0 +1,140 @@
# Microsoft Provider for OAuth 2.0 Client
[![Latest Version](https://img.shields.io/github/release/stevenmaguire/oauth2-microsoft.svg?style=flat-square)](https://github.com/stevenmaguire/oauth2-microsoft/releases)
[![Build Status](https://img.shields.io/travis/stevenmaguire/oauth2-microsoft/master.svg?style=flat-square)](https://travis-ci.org/stevenmaguire/oauth2-microsoft)
[![Coverage Status](https://img.shields.io/scrutinizer/coverage/g/stevenmaguire/oauth2-microsoft.svg?style=flat-square)](https://scrutinizer-ci.com/g/stevenmaguire/oauth2-microsoft/code-structure)
[![Quality Score](https://img.shields.io/scrutinizer/g/stevenmaguire/oauth2-microsoft.svg?style=flat-square)](https://scrutinizer-ci.com/g/stevenmaguire/oauth2-microsoft)
[![Total Downloads](https://img.shields.io/packagist/dt/stevenmaguire/oauth2-microsoft.svg?style=flat-square)](https://packagist.org/packages/stevenmaguire/oauth2-microsoft)
[![Software License](https://img.shields.io/packagist/l/stevenmaguire/oauth2-microsoft.svg?style=flat-square)](LICENSE.md)
This package provides Microsoft OAuth 2.0 support for the PHP League's [OAuth 2.0 Client](https://github.com/thephpleague/oauth2-client).
## Installation
To install, use composer:
```
composer require stevenmaguire/oauth2-microsoft
```
## Usage
Usage is the same as The League's OAuth client, using `\Stevenmaguire\OAuth2\Client\Provider\Microsoft` as the provider.
### Authorization Code Flow
```php
$provider = new Stevenmaguire\OAuth2\Client\Provider\Microsoft([
// Required
'clientId' => '{microsoft-client-id}',
'clientSecret' => '{microsoft-client-secret}',
'redirectUri' => 'https://example.com/callback-url',
// Optional
'urlAuthorize' => 'https://login.windows.net/common/oauth2/authorize',
'urlAccessToken' => 'https://login.windows.net/common/oauth2/token',
'urlResourceOwnerDetails' => 'https://outlook.office.com/api/v1.0/me'
]);
if (!isset($_GET['code'])) {
// If we don't have an authorization code then get one
$authUrl = $provider->getAuthorizationUrl();
$_SESSION['oauth2state'] = $provider->getState();
header('Location: '.$authUrl);
exit;
// Check given state against previously stored one to mitigate CSRF attack
} elseif (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) {
unset($_SESSION['oauth2state']);
exit('Invalid state');
} else {
// Try to get an access token (using the authorization code grant)
$token = $provider->getAccessToken('authorization_code', [
'code' => $_GET['code']
]);
// Optional: Now you have a token you can look up a users profile data
try {
// We got an access token, let's now get the user's details
$user = $provider->getResourceOwner($token);
// Use these details to create a new profile
printf('Hello %s!', $user->getFirstname());
} catch (Exception $e) {
// Failed to get user details
exit('Oh dear...');
}
// Use this to interact with an API on the users behalf
echo $token->getToken();
}
```
#### Managing Scopes and State
When creating your Microsoft authorization URL, you can specify the state and scopes your application may authorize.
```php
$options = [
'state' => 'OPTIONAL_CUSTOM_CONFIGURED_STATE',
'scope' => ['wl.basic', 'wl.signin'] // array or string
];
$authorizationUrl = $provider->getAuthorizationUrl($options);
```
If neither are defined, the provider will utilize internal defaults.
At the time of authoring this documentation, the following scopes are available.
##### Core
- wl.basic
- wl.offline_access
- wl.signin
##### Extended
- wl.birthday
- wl.calendars
- wl.calendars_update
- wl.contacts_birthday
- wl.contacts_create
- wl.contacts_calendars
- wl.contacts_photos
- wl.contacts_skydrive
- wl.emails
- wl.events_create
- wl.imap
- wl.phone_numbers
- wl.photos
- wl.postal_addresses
- wl.skydrive
- wl.skydrive_update
- wl.work_profile
- office.onenote_create
## Testing
``` bash
$ ./vendor/bin/phpunit
```
## Contributing
Please see [CONTRIBUTING](https://github.com/stevenmaguire/oauth2-microsoft/blob/master/CONTRIBUTING.md) for details.
## Credits
- [Steven Maguire](https://github.com/stevenmaguire)
- [All Contributors](https://github.com/stevenmaguire/oauth2-microsoft/contributors)
## License
The MIT License (MIT). Please see [License File](https://github.com/stevenmaguire/oauth2-microsoft/blob/master/LICENSE) for more information.

View File

@@ -0,0 +1,38 @@
{
"name": "stevenmaguire/oauth2-microsoft",
"description": "Microsoft OAuth 2.0 Client Provider for The PHP League OAuth2-Client",
"license": "MIT",
"authors": [
{
"name": "Steven Maguire",
"email": "stevenmaguire@gmail.com",
"homepage": "https://github.com/stevenmaguire"
}
],
"keywords": [
"oauth",
"oauth2",
"client",
"authorization",
"authorisation",
"microsoft"
],
"require": {
"league/oauth2-client": "^2.0"
},
"require-dev": {
"phpunit/phpunit": "~4.0",
"mockery/mockery": "~0.9",
"squizlabs/php_codesniffer": "~2.0"
},
"autoload": {
"psr-4": {
"Stevenmaguire\\OAuth2\\Client\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"Stevenmaguire\\OAuth2\\Client\\Test\\": "tests/src/"
}
}
}

View File

@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
backupStaticAttributes="false"
bootstrap="vendor/autoload.php"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false"
syntaxCheck="false"
>
<logging>
<log type="coverage-html"
target="./build/coverage/html"
charset="UTF-8"
highlight="false"
lowUpperBound="35"
highLowerBound="70"/>
<log type="coverage-clover"
target="./build/coverage/log/coverage.xml"/>
</logging>
<testsuites>
<testsuite name="Package Test Suite">
<directory suffix=".php">./tests/</directory>
</testsuite>
</testsuites>
<filter>
<whitelist>
<directory suffix=".php">./</directory>
<exclude>
<directory suffix=".php">./vendor</directory>
<directory suffix=".php">./tests</directory>
</exclude>
</whitelist>
</filter>
</phpunit>

View File

@@ -1,188 +1,112 @@
<?php //ICB0 74:0 81:12ed 82:24de ?><?php //000ab
// Copyright prestashow.com 2025. All Rights Reserved.
// @authors prestashow.com <contact@prestashow.com>
// @license https://prestashow.com/license
return;
?>
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
<?php namespace PShowSsoScoped\Stevenmaguire\OAuth2\Client\Provider;
use PShowSsoScoped\GuzzleHttp\Psr7\Uri;
use PShowSsoScoped\League\OAuth2\Client\Provider\AbstractProvider;
use PShowSsoScoped\League\OAuth2\Client\Provider\Exception\IdentityProviderException;
use PShowSsoScoped\League\OAuth2\Client\Token\AccessToken;
use PShowSsoScoped\Psr\Http\Message\ResponseInterface;
class Microsoft extends AbstractProvider
{
/**
* Default scopes
*
* @var array
*/
public $defaultScopes = ['wl.basic', 'wl.emails'];
/**
* Base url for authorization.
*
* @var string
*/
protected $urlAuthorize = 'https://login.live.com/oauth20_authorize.srf';
/**
* Base url for access token.
*
* @var string
*/
protected $urlAccessToken = 'https://login.live.com/oauth20_token.srf';
/**
* Base url for resource owner.
*
* @var string
*/
protected $urlResourceOwnerDetails = 'https://apis.live.net/v5.0/me';
/**
* Get authorization url to begin OAuth flow
*
* @return string
*/
public function getBaseAuthorizationUrl()
{
return $this->urlAuthorize;
}
/**
* Get access token url to retrieve token
*
* @return string
*/
public function getBaseAccessTokenUrl(array $params)
{
return $this->urlAccessToken;
}
/**
* Get default scopes
*
* @return array
*/
protected function getDefaultScopes()
{
return $this->defaultScopes;
}
/**
* Check a provider response for errors.
*
* @throws IdentityProviderException
* @param ResponseInterface $response
* @return void
*/
protected function checkResponse(ResponseInterface $response, $data)
{
if (isset($data['error'])) {
throw new IdentityProviderException(
(isset($data['error']['message']) ? $data['error']['message'] : $response->getReasonPhrase()),
$response->getStatusCode(),
$response
);
}
}
/**
* Generate a user object from a successful user details request.
*
* @param array $response
* @param AccessToken $token
* @return MicrosoftResourceOwner
*/
protected function createResourceOwner(array $response, AccessToken $token)
{
return new MicrosoftResourceOwner($response);
}
/**
* Get provider url to fetch user details
*
* @param AccessToken $token
*
* @return string
*/
public function getResourceOwnerDetailsUrl(AccessToken $token)
{
$uri = new Uri($this->urlResourceOwnerDetails);
return (string) Uri::withQueryValue($uri, 'access_token', (string) $token);
}
}

View File

@@ -1,152 +1,93 @@
<?php //ICB0 74:0 81:efc 82:1d82 ?><?php //000ab
// Copyright prestashow.com 2025. All Rights Reserved.
// @authors prestashow.com <contact@prestashow.com>
// @license https://prestashow.com/license
return;
?>
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
DyX3YuWA0ltSAfHPH2W9BDTLtOCkErBDiMcFuES==
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
zon1axxjmpYGiZF26uS==
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
78+10eKIpwUdFmsYJzRH6W==
<?php namespace PShowSsoScoped\Stevenmaguire\OAuth2\Client\Provider;
use PShowSsoScoped\League\OAuth2\Client\Provider\ResourceOwnerInterface;
class MicrosoftResourceOwner implements ResourceOwnerInterface
{
/**
* Raw response
*
* @var array
*/
protected $response;
/**
* Creates new resource owner.
*
* @param array $response
*/
public function __construct(array $response = array())
{
$this->response = $response;
}
/**
* Get user id
*
* @return string|null
*/
public function getId()
{
return $this->response['id'] ?: null;
}
/**
* Get user email
*
* @return string|null
*/
public function getEmail()
{
return $this->response['emails']['preferred'] ?: null;
}
/**
* Get user firstname
*
* @return string|null
*/
public function getFirstname()
{
return $this->response['first_name'] ?: null;
}
/**
* Get user lastname
*
* @return string|null
*/
public function getLastname()
{
return $this->response['last_name'] ?: null;
}
/**
* Get user name
*
* @return string|null
*/
public function getName()
{
return $this->response['name'] ?: null;
}
/**
* Get user urls
*
* @return string|null
*/
public function getUrls()
{
return isset($this->response['link']) ? $this->response['link'].'/cid-'.$this->getId() : null;
}
/**
* Return all of the owner details available as an array.
*
* @return array
*/
public function toArray()
{
return $this->response;
}
}

View File

@@ -0,0 +1,174 @@
<?php namespace Stevenmaguire\OAuth2\Client\Test\Provider;
use League\OAuth2\Client\Tool\QueryBuilderTrait;
use Mockery as m;
class MicrosoftTest extends \PHPUnit_Framework_TestCase
{
use QueryBuilderTrait;
protected $provider;
protected function setUp()
{
$this->provider = new \Stevenmaguire\OAuth2\Client\Provider\Microsoft([
'clientId' => 'mock_client_id',
'clientSecret' => 'mock_secret',
'redirectUri' => 'none',
]);
}
public function tearDown()
{
m::close();
parent::tearDown();
}
public function testAuthorizationUrl()
{
$url = $this->provider->getAuthorizationUrl();
$uri = parse_url($url);
parse_str($uri['query'], $query);
$this->assertArrayHasKey('client_id', $query);
$this->assertArrayHasKey('redirect_uri', $query);
$this->assertArrayHasKey('state', $query);
$this->assertArrayHasKey('scope', $query);
$this->assertArrayHasKey('response_type', $query);
$this->assertArrayHasKey('approval_prompt', $query);
$this->assertNotNull($this->provider->getState());
}
public function testScopes()
{
$scopeSeparator = ',';
$options = ['scope' => [uniqid(), uniqid()]];
$query = ['scope' => implode($scopeSeparator, $options['scope'])];
$url = $this->provider->getAuthorizationUrl($options);
$encodedScope = $this->buildQueryString($query);
$this->assertContains($encodedScope, $url);
}
public function testGetAuthorizationUrl()
{
$url = $this->provider->getAuthorizationUrl();
$uri = parse_url($url);
$this->assertEquals('/oauth20_authorize.srf', $uri['path']);
}
public function testGetBaseAccessTokenUrl()
{
$params = [];
$url = $this->provider->getBaseAccessTokenUrl($params);
$uri = parse_url($url);
$this->assertEquals('/oauth20_token.srf', $uri['path']);
}
public function testSettingAuthEndpoints()
{
$customAuthUrl = uniqid();
$customTokenUrl = uniqid();
$customResourceOwnerUrl = uniqid();
$token = m::mock('League\OAuth2\Client\Token\AccessToken');
$this->provider = new \Stevenmaguire\OAuth2\Client\Provider\Microsoft([
'clientId' => 'mock_client_id',
'clientSecret' => 'mock_secret',
'redirectUri' => 'none',
'urlAuthorize' => $customAuthUrl,
'urlAccessToken' => $customTokenUrl,
'urlResourceOwnerDetails' => $customResourceOwnerUrl
]);
$authUrl = $this->provider->getAuthorizationUrl();
$this->assertContains($customAuthUrl, $authUrl);
$tokenUrl = $this->provider->getBaseAccessTokenUrl([]);
$this->assertContains($customTokenUrl, $tokenUrl);
$resourceOwnerUrl = $this->provider->getResourceOwnerDetailsUrl($token);
$this->assertContains($customResourceOwnerUrl, $resourceOwnerUrl);
}
public function testGetAccessToken()
{
$response = m::mock('Psr\Http\Message\ResponseInterface');
$response->shouldReceive('getBody')->andReturn('{"access_token":"mock_access_token","authentication_token":"","code":"","expires_in":3600,"refresh_token":"mock_refresh_token","scope":"","state":"","token_type":""}');
$response->shouldReceive('getHeader')->andReturn(['content-type' => 'json']);
$client = m::mock('GuzzleHttp\ClientInterface');
$client->shouldReceive('send')->times(1)->andReturn($response);
$this->provider->setHttpClient($client);
$token = $this->provider->getAccessToken('authorization_code', ['code' => 'mock_authorization_code']);
$this->assertEquals('mock_access_token', $token->getToken());
$this->assertLessThanOrEqual(time() + 3600, $token->getExpires());
$this->assertGreaterThanOrEqual(time(), $token->getExpires());
$this->assertEquals('mock_refresh_token', $token->getRefreshToken());
$this->assertNull($token->getResourceOwnerId());
}
public function testUserData()
{
$email = uniqid();
$firstname = uniqid();
$lastname = uniqid();
$name = uniqid();
$userId = rand(1000,9999);
$urls = uniqid();
$postResponse = m::mock('Psr\Http\Message\ResponseInterface');
$postResponse->shouldReceive('getBody')->andReturn('{"access_token":"mock_access_token","authentication_token":"","code":"","expires_in":3600,"refresh_token":"mock_refresh_token","scope":"","state":"","token_type":""}');
$postResponse->shouldReceive('getHeader')->andReturn(['content-type' => 'json']);
$userResponse = m::mock('Psr\Http\Message\ResponseInterface');
$userResponse->shouldReceive('getBody')->andReturn('{"id": '.$userId.', "name": "'.$name.'", "first_name": "'.$firstname.'", "last_name": "'.$lastname.'", "emails": {"preferred": "'.$email.'"}, "link": "'.$urls.'"}');
$userResponse->shouldReceive('getHeader')->andReturn(['content-type' => 'json']);
$client = m::mock('GuzzleHttp\ClientInterface');
$client->shouldReceive('send')
->times(2)
->andReturn($postResponse, $userResponse);
$this->provider->setHttpClient($client);
$token = $this->provider->getAccessToken('authorization_code', ['code' => 'mock_authorization_code']);
$user = $this->provider->getResourceOwner($token);
$this->assertEquals($email, $user->getEmail());
$this->assertEquals($email, $user->toArray()['emails']['preferred']);
$this->assertEquals($firstname, $user->getFirstname());
$this->assertEquals($firstname, $user->toArray()['first_name']);
$this->assertEquals($lastname, $user->getLastname());
$this->assertEquals($lastname, $user->toArray()['last_name']);
$this->assertEquals($name, $user->getName());
$this->assertEquals($name, $user->toArray()['name']);
$this->assertEquals($userId, $user->getId());
$this->assertEquals($userId, $user->toArray()['id']);
$this->assertEquals($urls.'/cid-'.$userId, $user->getUrls());
$this->assertEquals($urls.'/cid-'.$userId, $user->toArray()['link'].'/cid-'.$user->toArray()['id']);
}
/**
* @expectedException League\OAuth2\Client\Provider\Exception\IdentityProviderException
**/
public function testExceptionThrownWhenErrorObjectReceived()
{
$message = uniqid();
$postResponse = m::mock('Psr\Http\Message\ResponseInterface');
$postResponse->shouldReceive('getBody')->andReturn('{"error": {"code": "request_token_expired", "message": "'.$message.'"}}');
$postResponse->shouldReceive('getHeader')->andReturn(['content-type' => 'json']);
$postResponse->shouldReceive('getStatusCode')->andReturn(500);
$client = m::mock('GuzzleHttp\ClientInterface');
$client->shouldReceive('send')
->times(1)
->andReturn($postResponse);
$this->provider->setHttpClient($client);
$token = $this->provider->getAccessToken('authorization_code', ['code' => 'mock_authorization_code']);
}
}