Вход Регистрация
Файл: sngine-v2.8/Script/includes/libs/HybridAuth/Provider/Slack.php
Строк: 72
<?php
/*!
* Hybridauth
* https://hybridauth.github.io | https://github.com/hybridauth/hybridauth
*  (c) 2019 Hybridauth authors | https://hybridauth.github.io/license.html
*/

namespace HybridauthProvider;

use 
HybridauthAdapterOAuth2;
use 
HybridauthExceptionUnexpectedApiResponseException;
use 
HybridauthData;
use 
HybridauthUser;

/**
 * Slack OAuth2 provider adapter.
 */
class Slack extends OAuth2
{

    
/**
     * {@inheritdoc}
     */
    
public $scope 'identity.basic identity.email identity.avatar';

    
/**
     * {@inheritdoc}
     */
    
protected $apiBaseUrl 'https://slack.com/';

    
/**
     * {@inheritdoc}
     */
    
protected $authorizeUrl 'https://slack.com/oauth/authorize';

    
/**
     * {@inheritdoc}
     */
    
protected $accessTokenUrl 'https://slack.com/api/oauth.access';

    
/**
     * {@inheritdoc}
     */
    
protected $apiDocumentation 'https://api.slack.com/docs/sign-in-with-slack';

    
/**
     * {@inheritdoc}
     */
    
public function getUserProfile()
    {
        
$response $this->apiRequest('api/users.identity');

        
$data = new DataCollection($response);

        if (!
$data->exists('ok') || !$data->get('ok')) {
            throw new 
UnexpectedApiResponseException('Provider API returned an unexpected response.');
        }

        
$userProfile = new UserProfile();

        
$userProfile->identifier $data->filter('user')->get('id');
        
$userProfile->displayName $data->filter('user')->get('name');
        
$userProfile->email $data->filter('user')->get('email');
        
$userProfile->photoURL $this->findLargestImage($data);

        return 
$userProfile;
    }

    
/**
     * Returns the url of the image with the highest resolution in the user
     * object.
     *
     * Slack sends multiple image urls with different resolutions. As they make
     * no guarantees which resolutions will be included we have to search all
     * <code>image_*</code> properties for the one with the highest resolution.
     * The resolution is attached to the property name such as
     * <code>image_32</code> or <code>image_192</code>.
     *
     * @param DataCollection $data response object as returned by
     *     <code>api/users.identity</code>
     *
     * @return string|null the value of the <code>image_*</code> property with
     *     the highest resolution.
     */
    
private function findLargestImage(DataCollection $data)
    {
        
$maxSize 0;
        foreach (
$data->filter('user')->properties() as $property) {
            if (
preg_match('/^image_(d+)$/'$property$matches) === 1) {
                
$availableSize = (int)$matches[1];
                if (
$maxSize $availableSize) {
                    
$maxSize $availableSize;
                }
            }
        }
        if (
$maxSize 0) {
            return 
$data->filter('user')->get('image_' $maxSize);
        }
        return 
null;
    }
}
Онлайн: 3
Реклама