Spamworldpro Mini Shell
Spamworldpro


Server : Apache
System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64
User : corals ( 1002)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /home/corals/old/app/code/Soon/Social/Helper/Facebook/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //home/corals/old/app/code/Soon/Social/Helper/Facebook/Connect.php
<?php
/**
 * This file is part of Soon_Social for Magento2.
 *
 * @license All rights reserved
 * @author Christophe SOON <[email protected]>
 * @category Soon
 * @package Soon_Social
 * @copyright Copyright (c) 2015 Agence Soon (http://www.agence-soon.fr)
 */

namespace Soon\Social\Helper\Facebook;

use Facebook\Facebook;
use Magento\Framework\App\ResponseInterface;
use Magento\Framework\DataObject;
use Soon\Social\Helper\Connect as AbstractConnect;

/**
 * Class Connect
 * @package Soon\Social\Helper\Facebook
 */
class Connect extends AbstractConnect
{
    /**
     * @var string
     */
    const SERVICE_NAME = 'facebook';

    /**
     * @var Facebook
     */
    private $fb;

    /**
     * Facebook app config
     *
     * @var array
     */
    protected $_appConfig;

    /**
     * Get service name
     *
     * @return string
     */
    public function getServiceName()
    {
        return self::SERVICE_NAME;
    }

    /**
     * Retrieve URL login for FB login
     *
     * @param bool $loginFlag
     * @return string
     */
    public function getLoginUrl($loginFlag = false)
    {
        $loginUri = 'connect/facebook/fbLogin';
        $params = $this->_getRequest()->getParams();

        if ($loginFlag) {
            $params['login'] = 1;
        }
        return $this->_getUrl($loginUri, $params);
    }

    /**
     * Retrieve URL for post FB login process
     *
     * @return string
     */
    public function getRedirectUrl()
    {
        return $this->_getUrl('connect/facebook/fbLoginBack');
    }

    /**
     * @return string
     */
    public function getOAuthUrl()
    {
        $helper = $this->fb()->getRedirectLoginHelper();
        $permissions = ['email'];
        $url = $helper->getLoginUrl($this->getRedirectUrl(), $permissions);

        return $url;
    }

    /**
     * Get user data from connector
     *
     * @return DataObject
     */
    public function getUserData()
    {
        return $this->_getUserData();
    }

    /**
     * @param ResponseInterface $response
     */
    public function beforeConnectLogin(ResponseInterface $response)
    {
    }

    /**
     * @param ResponseInterface $response
     */
    public function beforeConnectLoginBack(ResponseInterface $response)
    {
        $this->setAccessToken();
    }

    /**
     * Retrieve Facebook user data and create a DataObject with it
     */
    protected function _getUserData()
    {
        $userData = new DataObject();
        $srcData = $this->fb()->get($this->_getUserDataFieldsRequestUrl())->getDecodedBody();

        foreach ($srcData as $k => $v) {
            $userData->setData(str_replace('_', '', $k), $v);
        }

        $userData->setData('social_referrer', self::SERVICE_NAME);

        return $userData;
    }

    /**
     * Retrieve fields to request to FB as defined in config
     *
     * @return string
     */
    private function _getUserDataFieldsRequestUrl()
    {
        $userDataFields = array_keys($this->scopeConfig->getValue('soon_social/facebook_user_data'));
        return sprintf('/me?fields=%s', implode(',', $userDataFields));
    }

    /**
     * Facebook SDK instanciation
     *
     * @return Facebook
     */
    private function fb()
    {
        if (is_null($this->fb)) {
            $config = [
                'app_id' => $this->getAppConfig()['app_id'],
                'app_secret' => $this->getAppConfig()['secret'],
                'default_graph_version' => 'v2.2',
                'persistent_data_handler' => 'session',
                'allowSignedRequest' => false // optional but should be set to false for non-canvas apps
            ];
            $this->fb = new Facebook($config);
        }

        return $this->fb;
    }

    /**
     * Set access token to $fb object
     *
     * @return Connect
     */
    private function setAccessToken()
    {
        $fb = $this->fb();

        $helper = $fb->getRedirectLoginHelper();
        $accessToken = $helper->getAccessToken();
        $fb->setDefaultAccessToken($accessToken);

        return $this;
    }
    /**
     * Retrieve FB app config
     * @return array []
     * @throws \Exception
     */
    private function getAppConfig()
    {
        if (is_null($this->_appConfig)) {
            $configFields = [
                'app_id' => ['is_required' => true],
                'secret' => ['is_required' => true],
            ];

            $appConfig = [];

            foreach ($configFields as $field => $v) {
                $config = $this->scopeConfig->getValue('soon_social_connect/facebook_connect/' . $field);

                if (trim($config) == '' && $v['is_required']) {
                    throw new \Exception(sprintf('Cannot find Facebook info for required field: %s', $field));
                }

                $appConfig[$field] = $config;
            }

            $this->_appConfig = $appConfig;
        }

        return $this->_appConfig;
    }
}

Spamworldpro Mini