Вход Регистрация
Файл: admin/applications/core/modules_public/global/login.php
Строк: 359
<?php

/**
 * <pre>
 * Invision Power Services
 * IP.Board v3.3.3
 * Login handler abstraction
 * 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
 * @subpackage    Core
 * @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 all the relevant files.";
    exit();
}

class 
public_core_global_login extends ipsCommand
{
    
/**
     * Login handler object
     *
     * @var        object
     */
    
protected $han_login;
    
    
/**
     * Facebook connect class
     *
     * @var        object
     */
    
protected $_facebook;
    
    
/**
     * Initiate login handler
     *
     * @return    @e void
     */
    
public function initHanLogin()
    {
        
$classToLoad IPSLib::loadLibraryIPS_ROOT_PATH 'sources/handlers/han_login.php''han_login' );
        
$this->han_login =  new $classToLoad$this->registry );
        
$this->han_login->init();
    }
    
    
/**
     * Class entry point
     *
     * @param    object        Registry reference
     * @return    @e void        [Outputs to screen/redirects]
     */
    
public function doExecuteipsRegistry $registry 
    {
        
/* Make object */
        
$this->registry   =  $registry;
        
$this->DB         =  $this->registry->DB();
        
$this->settings   =& $this->registry->fetchSettings();
        
$this->request    =& $this->registry->fetchRequest();
        
$this->lang       =  $this->registry->getClass('class_localization');
        
$this->member     =  $this->registry->member();
        
$this->memberData =& $this->registry->member()->fetchMemberData();
        
$this->cache      =  $this->registry->cache();
        
$this->caches     =& $this->registry->cache()->fetchCaches();
        
        
$this->registry->getClass'class_localization' )->loadLanguageFile( array( 'public_login' ), 'core' );
        
        
//-----------------------------------------
        // Load handler...
        //-----------------------------------------
        
        
$this->initHanLogin();
        
        
//-----------------------------------------
        // Are we enforcing log ins?
        //-----------------------------------------
        
        
$msg "";
        
        if ( !
$this->request['do'] == 'showForm' AND $this->settings['force_login'] == )
        {
            
$msg 'admin_force_log_in';
        }
        
        
//-----------------------------------------
        // Meta tags
        //-----------------------------------------
        
        
$this->registry->output->addMetaTag'robots''noindex' );
        
        
//-----------------------------------------
        // What to do?
        //-----------------------------------------
        
        
switch( $this->request['do'] )
        {
            case 
'process':
                
$return $this->doLogin();

                if( 
$return[2] )
                {
                    
//$this->registry->getClass('output')->showError( $return[2], 1014 );
                    
$this->loginForm$return[2], $return[3] );
                }
                else
                {
                    
$this->registry->getClass('output')->redirectScreen$return[0], $return[1] );
                }
            break;
            
            case 
'logout':
                
$return $this->doLogout();
                
                
/* URL */
                
$return[2] = $return[2] ? $return[2] : '';

                if( 
$return[0] == 'immediate' )
                {
                    
$this->registry->getClass('output')->silentRedirect$return[2] );
                }
                else
                {
                    
$this->registry->getClass('output')->redirectScreen$return[1], $return[2] );
                }
            break;
        
            case 
'deleteCookies':
                
$return $this->deleteCookies();
                
$this->registry->getClass('output')->silentRedirect$this->settings['base_url'] );
            break;
                
            case 
'autologin':
                
$return $this->autoLogin();
            break;
                
            case 
'showForm':
            default:
                
$return $this->loginForm($msg);
            break;
        }
        
        
//-----------------------------------------
        // If we have any HTML to print, do so...
        //-----------------------------------------
        
        
$this->registry->getClass('output')->addContent$this->output );
        
$this->registry->getClass('output')->sendOutput();
     }
    
    
/**
     * Attempt to automatically log a user in
     *
     * @return    array        [0=Words to display,1=URL to send to]
     */
     
public function autoLogin()
     {
         
/* Verify the login */
        
$this->han_login->verifyLogin();
        
        
/* Lang Bits */
         
$true_words  $this->lang->words['logged_in'];
         
$false_words $this->lang->words['not_logged_in'];
         
$method      'no_show';
         
         
/* Register Redirect */
         
if ($this->request['fromreg'] == 1)
         {
             
$true_words  $this->lang->words['reg_log_in'];
             
$false_words $this->lang->words['reg_not_log_in'];
             
$method 'show';
         }
         
/* Email Redirect */
         
else if ($this->request['fromemail'] == 1)
         {
             
$true_words  $this->lang->words['email_log_in'];
             
$false_words $this->lang->words['email_not_log_in'];
             
$method 'show';
         }
         
/* Password Redirect */
         
else if ($this->request['frompass'] == 1)
         {
             
$true_words  $this->lang->words['pass_log_in'];
             
$false_words $this->lang->words['pass_not_log_in'];
             
$method 'show';
         }
         
         if( 
$this->memberData['member_id'] )
         {
            
/* Member Sync */
            
IPSLib::runMemberSync'onLogin'$this->memberData );
        
            if ( ! 
$this->request['fromreg'] )
            {
                
IPSCookie::set('session_id''0', -);
            }
            
             if( 
$method == 'show' )
             {
                 
$this->registry->getClass('output')->redirectScreen$true_words$this->settings['base_url'] );
             }
             else
             {
                 
$this->registry->getClass('output')->silentRedirect$this->settings['board_url'] . '/index.php' );
             }
         }
         else
         {
             if( 
$method == 'show' )
             {
                 
$this->registry->getClass('output')->redirectScreen$false_words$this->settings['base_url'] . 'app=core&module=global&section=login' );
             }
             else
             {
                 
$this->registry->getClass('output')->silentRedirect$this->settings['base_url'] . 'app=core&module=global&section=login' );
             }
         }
     }
     
    
/**
     * Delete a user's cookies
     *
     * @param    boolean        Check the key
     * @return    mixed        Output error page if key checking fails, else boolean true
     */
     
public function deleteCookies$check_key=true )
     {
        
//-----------------------------------------
        // Check the md5 key
        //-----------------------------------------
        
         
if( $check_key )
         {
            
$key $this->request['k'];

            if ( 
$key != $this->member->form_hash )
            {
                
$this->registry->getClass('output')->showError'bad_delete_cookies_key'2010 );
            }
        }

        
//-----------------------------------------
        // Wipe out any forum password cookies
        //-----------------------------------------
        
        
if ( is_array($_COOKIE) )
         {
             foreach( 
$_COOKIE as $cookie => $value )
             {
                 if ( 
stripos$cookie$this->settings['cookie_id']."ipbforum" ) !== false )
                 {
                     
IPSCookie::setstr_replace$this->settings['cookie_id'], ""$cookie ), '-', -);
                 }

                if ( 
stripos$cookie$this->settings['cookie_id']."itemMarking_" ) !== false )
                 {
                     
IPSCookie::setstr_replace$this->settings['cookie_id'], ""$cookie ), '-', -);
                 }
             }
         }
         
        
//-----------------------------------------
        // And the rest of the cookies
        //-----------------------------------------
        
         
IPSCookie::set('pass_hash' '-1');
         
IPSCookie::set('member_id' '-1');
         
IPSCookie::set('session_id''-1');
         
         return 
true;
    }  
    
    
/**
     * Show the login form
     *
     * @param    string        Message to show on login form
     * @return    string        Login form HTML
     */
    
public function loginForm$message=""$replacement='' )
    {
        
//-----------------------------------------
        // INIT
        //-----------------------------------------
        
        
$extra_form   "";
        
$show_form    1;
        
$template     '';
        
$serviceClick trim$this->request['serviceClick'] );
        
        
//-----------------------------------------
        // Are they banned?
        //-----------------------------------------
        
        
if ( IPSMember::isBanned'ip'$this->member->ip_address ) )
        {
            
$this->registry->getClass('output')->showError'you_are_banned'2011nullnull403 );
        }
        
        if ( 
$message != "" )
        {
            if( 
$replacement )
            {
                
$message sprintf$this->lang->words$message ], $replacement );
            }
            else
            {
                
$message    $this->lang->words$message ];
            }
            
$name        $this->request['UserName'] ? $this->request['UserName'] : $this->request['address'];
            
$message    str_replace"<#NAME#>""<b>" $name "</b>"$message );
        
            
$template .= $this->registry->getClass('output')->getTemplate('login')->errors($message);
        }
        
        
//-----------------------------------------
        // Using an alternate log in form?
        //-----------------------------------------
        
        
$this->han_login->checkLoginUrlRedirect();
        
        
/* Did we click a service? */
        
if ( $serviceClick )
        {
            switch (
$serviceClick)
            {
                case 
'facebook':
                    
$this->registry->getClass('output')->silentRedirect$this->settings['_original_base_url'] . "/interface/facebook/index.php?_reg=1" );
                break;
                case 
'twitter':
                    
$this->registry->getClass('output')->silentRedirect$this->settings['_original_base_url'] . "/interface/twitter/index.php?_reg=1" );
                break;
                case 
'vkontakte':
                    
$this->registry->getClass('output')->silentRedirect$this->settings['_original_base_url'] . "/interface/vkontakte/index.php?reg=1" );
                break;
            }
        }
        
        
//-----------------------------------------
        // Extra  HTML?
        //-----------------------------------------
        
        
$additionalForm    $this->han_login->additionalFormHTML();
        
        if ( 
count($additionalForm[1]) )
        {
            if ( 
$additionalForm[0] == 'add' )
            {
                
$extra_form    $additionalForm[1];
                
$show_form    1;
            }
            else
            {
                
$template    .= $additionalForm[1];
                
$show_form    0;
            }
        }

        
//-----------------------------------------
        // Continue...
        //-----------------------------------------
        
        
if ( $show_form )
        {
            if( 
$this->request['referer'] )
            {
                
$http_referrer    $this->request['referer'];
            }
            else
            {
                
/* @link    http://community.invisionpower.com/tracker/issue-32302-login-redirect-when-activating */
                
$_urlPieces    = @parse_url($this->settings['board_url']);

                if( 
strposmy_getenv('HTTP_REFERER'), $_urlPieces['host'] ? $_urlPieces['host'] : $this->settings['board_url'] ) !== false )
                {
                    
$http_referrer my_getenv('HTTP_REFERER');
                }
                else
                {
                    
$http_referrer    '';
                }                    
            }
            
            
$login_methods    false;
            
$uses_name        false;
            
$uses_email        false;
            
            foreach( 
$this->cache->getCache('login_methods') as $method )
            {
                
$login_methods$method['login_folder_name'] ]    = $method['login_folder_name'];

                if( 
$method['login_user_id'] == 'username' or $method['login_user_id'] == 'either' )
                {
                    
$uses_name    true;
                }
                
                if( 
$method['login_user_id'] == 'email' or $method['login_user_id'] == 'either' )
                {
                    
$uses_email    true;
                }
            }
        
            if( 
$uses_name AND $uses_email )
            {
                
$this->lang->words['enter_name']    = $this->lang->words['enter_name_and_email'];
            }
            else if( 
$uses_email )
            {
                
$this->lang->words['enter_name']    = $this->lang->words['enter_useremail'];
            }
            else
            {
                
$this->lang->words['enter_name']    = $this->lang->words['enter_username'];
            }

            
$template .= $this->registry->getClass('output')->getTemplate('login')->showLogInForm$this->lang->words['please_log_in'], htmlentities(urldecode($http_referrer)), $extra_form$login_methods );
        }

        
        
$this->registry->getClass('output')->addNavigation$this->lang->words['log_in'], '' );
        
$this->registry->getClass('output')->setTitle$this->lang->words['log_in'] . ' - ' ipsRegistry::$settings['board_name'] );
        
$this->registry->getClass('output')->addContent$template );
        
$this->registry->getClass('output')->sendOutput();
    }
    
    
/**
     * Verify login form submission and log user in
     *
     * @return    mixed        array [0=Words to show, 1=URL to send to, 2=error array]
     */
    
public function doLogin()
    {
        if( !
defined('IGNORE_AUTH_KEY') OR !IGNORE_AUTH_KEY )
        {
            if ( 
$this->request['auth_key'] != $this->member->form_hash )
            {
                
$this->registry->getClass('output')->showError'login_no_authkey'10193nullnull403 );
            }
        }

        return 
$this->han_login->verifyLogin();
    }
    
    
/**
     * Log a user out
     *
     * @param    integer        Flag to check md5 key
     * @return    mixed        Error message or array [0=immediate|redirect, 1=words to show, 2=URL to send to]
     */
    
public function doLogout$check_key=true )
    {
        
//-----------------------------------------
        // INIT
        //-----------------------------------------
        
        
if ( $check_key )
        {
            
$key $this->request['k'];
            
            
# Check for funny business
            
if ( $key != $this->member->form_hash )
            {
                
$this->registry->getClass('output')->showError'bad_logout_key'2012 );
            }
        }
        
        
//-----------------------------------------
        // Set some cookies
        //-----------------------------------------
        
        
IPSCookie::set"member_id" "0"  );
        
IPSCookie::set"pass_hash" "0"  );
        
        if( 
is_array$_COOKIE ) )
         {
             foreach( 
$_COOKIE as $cookie => $value)
             {
                 if ( 
stripos$cookie$this->settings['cookie_id'] . 'ipbforumpass' ) !== false AND ! strstr$value'mobileApp' ) )
                 {
                     
IPSCookie::setstr_replace$this->settings['cookie_id'], ""$cookie ), '-', -);
                 }
             }
         }

        
//-----------------------------------------
        // Do it..
        //-----------------------------------------

        
$this->member->sessionClass()->convertMemberToGuest();

        
$privacy intvalIPSMember::isLoggedInAnon($this->memberData) );
        
        
IPSMember::save$this->memberData['member_id'], array( 'core' => array( 'login_anonymous' => "{$privacy}&0"'last_activity' => IPS_UNIX_TIME_NOW ) ) );

        
//-----------------------------------------
        // Logout callbacks...
        //-----------------------------------------
        
        
IPSLib::runMemberSync'onLogOut'$this->memberData );
        
        
$this->han_login->logoutCallback();
        
        
//-----------------------------------------
        // Return..
        //-----------------------------------------
        
        
$url "";
        
        if ( 
$this->request['return'] AND $this->request['return'] != "" )
        {
            
$return urldecode($this->request['return']);
            
            if ( 
strpos$return"http://" ) === )
            {
                return array( 
'immediate'''$return );
            }
        }
        
        return array( 
'redirect'$this->lang->words['thanks_for_logout'], $this->settings['base_url'] );
    }
}
Онлайн: 1
Реклама