Вход Регистрация
Файл: admin/sources/loginauth/ipconverge/auth.php
Строк: 487
<?php

/**
 * <pre>
 * Invision Power Services
 * IP.Board v3.3.3
 * Login handler abstraction : IP.Converge Method
 * Last Updated: $Date: 2012-05-10 16:10:13 -0400 (Thu, 10 May 2012) $
 * </pre>
 *
 * @author         $Author: bfarber $
 * @copyright    (c) 2001 - 2009 Invision Power Services, Inc.
 * @license        http://www.invisionpower.com/company/standards.php#license
 * @package        IP.Board
 * @link        http://www.invisionpower.com
 * @since        Tuesday 1st March 2005 (11:52)
 * @version        $Revision: 10721 $
 *
 */

if ( ! defined'IN_IPB' ) )
{
    print 
"<h1>Incorrect access</h1>You cannot access this file directly. If you have recently upgraded, make sure you upgraded 'admin.php'.";
    exit();
}

class 
login_ipconverge extends login_core implements interface_login
{
    
/**
     * Login method configuration
     *
     * @access    protected
     * @var        array
     */
    
protected $method_config    = array();

    
/**
     * API Server object
     *
     * @access    protected
     * @var        object
     */
    
protected $api_server;
    
    
    
/**
     * Constructor
     *
     * @access    public
     * @param    object        ipsRegistry reference
     * @param    array         Configuration info for this method
     * @param    array         Custom configuration info for this method
     * @return    @e void
     */
    
public function __constructipsRegistry $registry$method$conf=array() )
    {
        
$this->method_config    $method;
        
        
parent::__construct$registry );
    }
    
    
/**
     * Authenticate the request
     *
     * @access    public
     * @param    string        Username
     * @param    string        Email Address
     * @param    string        Password
     * @return    boolean        Authentication successful
     */
    
public function authenticate$username$email_address$password )
    {
        
//-----------------------------------------
        // INIT
        //-----------------------------------------
        
        
$md5_once_pass md5$password );
        
$external_data '';
        
        
//-----------------------------------------
        // Check admin authentication request
        //-----------------------------------------
        
        
if ( $this->is_admin_auth )
        {
            
$this->adminAuthLocal$username$email_address$password );
            
              if ( 
$this->return_code == 'SUCCESS' )
              {
                  return 
true;
              }
        }
        
        
//-----------------------------------------
        // Get product ID and code from API
        //-----------------------------------------
        
        
$converge $this->DB->buildAndFetch( array( 'select' => '*',
                                                            
'from'   => 'converge_local',
                                                            
'where'  => 'converge_active=1' 
                                                    
)         );
                                                                    
        if ( ! 
$converge['converge_api_code'] )
        {
            
$this->return_code 'WRONG_AUTH';
            return 
false;
        }
        
        
//-----------------------------------------
        // If the user submitted a name, grab email
        //-----------------------------------------

        
if( $username AND !$email_address )
        {
            
$temp IPSMember::load$username'extendedProfile''username' );
            
            if( 
$temp['email'] )
            {
                
$email_address $temp['email'];
            }
        }
        
        
//-----------------------------------------
        // Auth against converge...
        //-----------------------------------------
        
        
if ( ! is_object$this->api_server ) )
        {
            require_once( 
IPS_KERNEL_PATH 'classApiServer.php' );/*noLibHook*/
            
$this->api_server = new classApiServer();
        }
        
        
$request = array( 'auth_key'          => $converge['converge_api_code'],
                          
'product_id'        => $converge['converge_product_id'],
                          
'email_address'     => $email_address,
                          
'md5_once_password' => $md5_once_pass,
                          
'username'          => $username
                        
);

        
$url     $converge['converge_url'] . '/converge_master/converge_server.php';

        
//-----------------------------------------
        // Send request
        //-----------------------------------------
        
        
$this->api_server->auth_user $converge['converge_http_user'];
        
$this->api_server->auth_pass $converge['converge_http_pass'];
        
        
$this->api_server->apiSendRequest$url'convergeAuthenticate'$request );

        
//-----------------------------------------
        // Handle errors...
        //-----------------------------------------

        
if ( count$this->api_server->errors ) )
        {
            
$this->return_code 'WRONG_AUTH';
            return 
false;
        }
        else if( 
$this->api_server->params['response'] != 'SUCCESS' )
        {
            if( 
$this->api_server->params['response'] == 'FLAGGED_REMOTE' )
            {
                
$this->return_code 'FLAGGED_REMOTE';
                return 
false;
            }

            
$this->return_code 'WRONG_AUTH';
            return 
false;
        }
        
        if( 
$this->api_server->params['extra_data'] )
        {
            
$external_data unserializebase64_decode$this->api_server->params['extra_data'] ) );
        }
        
        
//-----------------------------------------
        // Get member...
        //-----------------------------------------
        
        
$this->_loadMember$email_address );
        
        if ( !
$this->member->getProperty('member_id') )
        {
            
//-----------------------------------------
            // Got no member - but auth passed - create?
            //-----------------------------------------
            
            
$tmp_display    $this->api_server->params['username'] ? $this->api_server->params['username'] : '';//'cvg_' . mt_rand();
            
$email_address    $email_address $email_address $this->api_server->params['email'];

            
$this->member_data $this->createLocalMember
                                                        array( 
                                                            
'members' => array( 
                                                                            
'name'                    => $tmp_display,
                                                                            
'members_display_name'    => $tmp_display,
                                                                            
'password'                => $password,
                                                                            
'email'                    => $email_address,

                                                                            
//-----------------------------------------
                                                                            // @link    http://forums.invisionpower.com/index.php?autocom=tracker&showissue=11868
                                                                            //-----------------------------------------
                                                                            
                                                                            
'joined'                => $this->api_server->params['joined'],
                                                                            
'ip_address'             => $this->api_server->params['ipaddress'],
                                                                            ) 
                                                            ) 
                                                        );
        }
        
        
//-----------------------------------------
        // Allow for custom code execution
        //-----------------------------------------
        
        
if( is_fileIPS_ROOT_PATH 'sources/loginauth/ipconverge/custom.php' ) )
        {
            include_once( 
IPS_ROOT_PATH 'sources/loginauth/ipconverge/custom.php' );/*noLibHook*/
        
}

        
//-----------------------------------------
        // Return
        //-----------------------------------------
        
        
$this->return_code $this->api_server->params['response'];
        return 
true;
    }
    
    
/**
     * Load the member
     *
     * @access    protected
     * @param    string        Email Address
     * @return    @e void
     */
    
protected function _loadMember$email_address )
    {
        
$this->member_data IPSMember::load$email_address'extendedProfile,groups' );
        
        if( 
$this->member_data['member_id'] )
        {
            
ipsRegistry::instance()->member()->setMember$this->member_data['member_id'] );
        }
    }
    
    
/**
     * Check if an email already exists
     *
     * @access    public
     * @param    string        Email Address
     * @return    boolean        Request was successful
     */
    
public function emailExistsCheck$email )
    {
        
//-----------------------------------------
        // Get product ID and code from API
        //-----------------------------------------
        
        
$converge $this->DB->buildAndFetch( array( 'select' => '*',
                                                            
'from'   => 'converge_local',
                                                            
'where'  => 'converge_active=1' 
                                                    
)         );
                                                                    
        if ( ! 
$converge['converge_api_code'] )
        {
            
$this->return_code 'WRONG_AUTH';
            return 
false;
        }
        
        
//-----------------------------------------
        // Auth against converge...
        //-----------------------------------------
        
        
if ( ! is_object$this->api_server ) )
        {
            require_once( 
IPS_KERNEL_PATH 'classApiServer.php' );/*noLibHook*/
            
$this->api_server = new classApiServer();
        }
        
        
$request = array( 'auth_key'          => $converge['converge_api_code'],
                          
'product_id'        => $converge['converge_product_id'],
                          
'email_address'     => $email,
                        );

        
$url     $converge['converge_url'] . '/converge_master/converge_server.php';

        
//-----------------------------------------
        // Send request
        //-----------------------------------------
        
        
$this->api_server->auth_user $converge['converge_http_user'];
        
$this->api_server->auth_pass $converge['converge_http_pass'];
        
        
$this->api_server->apiSendRequest$url'convergeCheckEmail'$request );

        
//-----------------------------------------
        // Handle errors...
        //-----------------------------------------

        
if ( count$this->api_server->errors ) )
        {
            
$this->return_code 'WRONG_AUTH';
            return 
false;
        }
        
        
$this->return_code $this->api_server->params['response'];
        return 
true;
    }
    
    
/**
     * Change an email address
     *
     * @access    public
     * @param    string        Old Email Address
     * @param    string        New Email Address
     * @param    array         Array of member data
     * @return    boolean        Request was successful
     */
    
public function changeEmail$old_email$new_email$memberData )
    {
        
//-----------------------------------------
        // Get product ID and code from API
        //-----------------------------------------
        
        
$converge $this->DB->buildAndFetch( array( 'select' => '*',
                                                                      
'from'   => 'converge_local',
                                                                      
'where'  => 'converge_active=1' ) );
                                                                    
        if ( ! 
$converge['converge_api_code'] )
        {
            
$this->return_code 'WRONG_AUTH';
            return 
false;
        }
        
        
//-----------------------------------------
        // Auth against converge...
        //-----------------------------------------
        
        
if ( ! is_object$this->api_server ) )
        {
            require_once( 
IPS_KERNEL_PATH 'classApiServer.php' );/*noLibHook*/
            
$this->api_server = new classApiServer();
        }
        
        
$request = array( 'auth_key'          => $converge['converge_api_code'],
                          
'product_id'        => $converge['converge_product_id'],
                          
'email_address'     => $new_email,
                        );

        
$url     $converge['converge_url'] . '/converge_master/converge_server.php';

        
//-----------------------------------------
        // Send request
        //-----------------------------------------
        
        
$this->api_server->auth_user $converge['converge_http_user'];
        
$this->api_server->auth_pass $converge['converge_http_pass'];
        
        
$this->api_server->apiSendRequest$url'convergeCheckEmail'$request );

        
//-----------------------------------------
        // Handle errors...
        //-----------------------------------------

        
if ( count$this->api_server->errors ) )
        {
            
$this->return_code 'WRONG_AUTH';
            return 
false;
        }
        
        if( 
$this->api_server->params['response'] == 'EMAIL_NOT_IN_USE' )
        {
            
//-----------------------------------------
            // Change email
            //-----------------------------------------
            
            
$request = array( 'auth_key'          => $converge['converge_api_code'],
                              
'product_id'        => $converge['converge_product_id'],
                              
'old_email_address' => $old_email,
                              
'new_email_address' => $new_email,
                            );

            
$url     $converge['converge_url'] . '/converge_master/converge_server.php';

            
//-----------------------------------------
            // Send request
            //-----------------------------------------

            
$this->api_server->apiSendRequest$url'convergeChangeEmail'$request );

            
//-----------------------------------------
            // Handle errors...
            //-----------------------------------------

            
if ( count$this->api_server->errors ) )
            {
                
$this->return_code 'WRONG_AUTH';
                return 
false;
            }
        }
        
        
$this->return_code $this->api_server->params['response'];
        return 
true;
    }
    
    
    
/**
     * Change a password
     *
     * @access    public
     * @param    string        Email Address
     * @param    string        New Password
     * @param    string        Plain Text Password
     * @param    string        Member Array
     * @return    boolean        Request was successful
     */
    
public function changePass$email$new_pass$plain_pass$member )
    {
        
//-----------------------------------------
        // Get product ID and code from API
        //-----------------------------------------
        
        
$converge $this->DB->buildAndFetch( array( 'select' => '*''from' => 'converge_local''where' => 'converge_active=1' ) );

        if ( ! 
$converge['converge_api_code'] )
        {
            
$this->return_code 'WRONG_AUTH';
            return 
false;
        }
        
        
//-----------------------------------------
        // Auth against converge...
        //-----------------------------------------
        
        
if ( ! is_object$this->api_server ) )
        {
            require_once( 
IPS_KERNEL_PATH 'classApiServer.php' );/*noLibHook*/
            
$this->api_server = new classApiServer();
        }
        
        
$request = array( 'auth_key'          => $converge['converge_api_code'],
                          
'product_id'        => $converge['converge_product_id'],
                          
'email_address'     => $email,
                          
'md5_once_password' => $new_pass,
                        );

        
$url     $converge['converge_url'] . '/converge_master/converge_server.php';

        
//-----------------------------------------
        // Send request
        //-----------------------------------------
        
        
$this->api_server->auth_user $converge['converge_http_user'];
        
$this->api_server->auth_pass $converge['converge_http_pass'];
        
        
$this->api_server->apiSendRequest$url'convergeChangePassword'$request );

        
//-----------------------------------------
        // Handle errors...
        //-----------------------------------------

        
if ( count$this->api_server->errors ) )
        {
            
$this->return_code 'WRONG_AUTH';
            return 
false;
        }
        
        
$this->return_code $this->api_server->params['response'];
        return 
true;
    }
    
    
/**
     * Change a login name
     *
     * @access    public
     * @param    string        Old Name
     * @param    string        New Name
     * @param    string        User's email address
     * @param    array         Array of member data
     * @return    boolean        Request was successful
     */
    
public function changeName$old_name$new_name$email_address$memberData )
    {
        
//-----------------------------------------
        // Get product ID and code from API
        //-----------------------------------------
        
        
$converge $this->DB->buildAndFetch( array( 'select' => '*''from'   => 'converge_local''where'  => 'converge_active=1' ) );

        if ( ! 
$converge['converge_api_code'] )
        {
            
$this->return_code 'WRONG_AUTH';
            return 
false;
        }
        
        
//-----------------------------------------
        // Auth against converge...
        //-----------------------------------------
        
        
if ( ! is_object$this->api_server ) )
        {
            require_once( 
IPS_KERNEL_PATH 'classApiServer.php' );/*noLibHook*/
            
$this->api_server = new classApiServer();
        }
        
        
$request = array( 'auth_key'          => $converge['converge_api_code'],
                          
'product_id'        => $converge['converge_product_id'],
                          
'email_address'     => $email_address,
                          
'old_username'      => $old_name,
                          
'new_username'      => $new_name,
                        );

        
$url     $converge['converge_url'] . '/converge_master/converge_server.php';

        
//-----------------------------------------
        // Send request
        //-----------------------------------------
        
        
$this->api_server->auth_user $converge['converge_http_user'];
        
$this->api_server->auth_pass $converge['converge_http_pass'];
        
        
$this->api_server->apiSendRequest$url'convergeChangeUsername'$request );

        
//-----------------------------------------
        // Handle errors...
        //-----------------------------------------

        
if ( count$this->api_server->errors ) )
        {
            
$this->return_code 'WRONG_AUTH';
            return 
false;
        }

        
$this->return_code $this->api_server->params['response'];
        return 
true;
    }
    
    
/**
     * Ping Converge's convergeLogOut method to log this user out of all other converged apps (if SSO is enabled)
     *
     * @access    public
     * @param    void
     * @return    @e void
     */
    
public function logoutCallback()
    {        
        
/* Fetch converge */
        
$converge $this->DB->buildAndFetch( array(    'select' => '*',
                                                        
'from'   => 'converge_local',
                                                        
'where'  => 'converge_active = 1' ) );
                                                                    
        if ( 
is_array$converge ) && count$converge ) )
        {
            
/* Set API class */
            
if ( ! is_object$this->api_server ) )
            {
                require_once( 
IPS_KERNEL_PATH 'classApiServer.php' );/*noLibHook*/
                
$this->api_server = new classApiServer();
            }
            
            
/* Build request */
            
$request = array(    'auth_key'            =>    $converge['converge_api_code'],
                                
'product_id'        =>    $converge['converge_product_id'],
                                
'email_address'        =>    $this->member->getProperty('email') );
            
            
/* Send it */
            
$this->api_server->auth_user $converge['converge_http_user'];
            
$this->api_server->auth_pass $converge['converge_http_pass'];        
            
$this->api_server->apiSendRequest$converge['converge_url'] . '/converge_master/converge_server.php''convergeLogOut'$request );
        }
    }
    
    
/**
     * Create an account in IP.Converge
     *
     * @access    public
     * @param    array        Member information
     * @return    boolean        Request was successful
     */
    
public function createAccount$member=array() )
    {
        if( !
is_array$member ) )
        {
            
$this->return_code 'FAIL';
            return 
false;
        }
        
        
//-----------------------------------------
        // Get product ID and code from API
        //-----------------------------------------
        
        
$converge $this->DB->buildAndFetch( array( 'select' => '*',
                                                                      
'from'   => 'converge_local',
                                                                      
'where'  => 'converge_active=1' ) );
                                                                    
        if ( ! 
$converge['converge_api_code'] )
        {
            
$this->return_code 'WRONG_AUTH';
            return 
false;
        }
        
        
//-----------------------------------------
        // Auth against converge...
        //-----------------------------------------
        
        
if ( ! is_object$this->api_server ) )
        {
            require_once( 
IPS_KERNEL_PATH 'classApiServer.php' );/*noLibHook*/
            
$this->api_server = new classApiServer();
        }
        
        
$request = array( 'auth_key'          => $converge['converge_api_code'],
                          
'product_id'        => $converge['converge_product_id'],
                          
'email_address'     => $member['email'],
                        );

        
$url     $converge['converge_url'] . '/converge_master/converge_server.php';

        
//-----------------------------------------
        // Send request
        //-----------------------------------------
        
        
$this->api_server->auth_user $converge['converge_http_user'];
        
$this->api_server->auth_pass $converge['converge_http_pass'];
        
        
$this->api_server->apiSendRequest$url'convergeCheckEmail'$request );

        
//-----------------------------------------
        // Handle errors...
        //-----------------------------------------

        
if ( count$this->api_server->errors ) )
        {
            
$this->return_code 'WRONG_AUTH';
            return 
false;
        }
        
        if( 
$this->api_server->params['response'] == 'EMAIL_NOT_IN_USE' )
        {
            
$request = array( 'auth_key'            => $converge['converge_api_code'],
                              
'product_id'            => $converge['converge_product_id'],
                              
'email_address'        => $member['email'],
                              
'md5_once_password'    => md5$member['password'] ),
                              
'ip_address'            => $member['ip_address'],
                              
'unix_join_date'        => $member['joined'],
                              
'username'            => $member['username'],
                            );

            
$url     $converge['converge_url'] . '/converge_master/converge_server.php';

            
//-----------------------------------------
            // Send request
            //-----------------------------------------

            
$this->api_server->apiSendRequest$url'convergeAddMember'$request );

            
//-----------------------------------------
            // Handle errors...
            //-----------------------------------------

            
if ( count$this->api_server->errors ) )
            {
                
$this->return_details     implode'<br />'$this->api_server->errors );
                
$this->return_code         $this->api_server->params['response'];
                return 
false;
            }
        }
        
        
$this->return_code $this->api_server->params['response'];
        return 
true;
    }
}
Онлайн: 3
Реклама