Seditio Source
Root |
./othercms/ips_4.3.4/system/Login/LoginAbstract.php
<?php
/**
 * @brief        4.2 and below Backwards Compatibilty Login Handler
 * @author        <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
 * @copyright    (c) 2001 - 2016 Invision Power Services, Inc.
 * @license        http://www.invisionpower.com/legal/standards/
 * @package        IPS Community Suite
 * @since        16 May 2017
 * @version        SVN_VERSION_NUMBER
 */

namespace IPS\Login;

/* To prevent PHP errors (extending class does not exist) revealing path */
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
{
   
header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
    exit;
}

/**
 * 4.2 and below Backwards Compatibilty Login Handler
 *
 * @deprecated    This class exists only to provide backwards compatibility for login handlers created before 4.3
 */
abstract class _LoginAbstract extends \IPS\Login\Handler
{    
   
/**
     * Get title
     *
     * @return    string
     */
   
public static function getTitle()
    {
        return
'login_handler_' . mb_substr( get_called_class(), 10 );
    }
   
   
/**
     * Get type
     *
     * @return    int
     */
   
public function type()
    {
        if (
method_exists( $this, 'loginForm' ) )
        {
            return \
IPS\Login::TYPE_BUTTON;
        }
        else
        {
            return \
IPS\Login::TYPE_USERNAME_PASSWORD;
        }
    }
   
   
/**
     * Get auth type
     *
     * @return    int
     */
   
public function authType()
    {
        return
$this->authTypes;
    }
   
   
/**
     * Get button
     *
     * @return    string
     */
   
public function button()
    {
       
$destination = NULL;
        if ( isset( \
IPS\Request::i()->ref ) )
        {
            try
            {
               
$url = \IPS\Http\Url::createFromString( base64_decode( \IPS\Request::i()->ref ) );
                if (
$url instanceof \IPS\Http\Url\Internal )
                {
                   
$destination = $url;
                }
            }
            catch ( \
Exception $e ) { }
        }
       
        return
$this->loginForm( \IPS\Request::i()->url(), FALSE, $destination );
    }
   
   
/**
     * Authenticate
     *
     * @param    \IPS\Login    $login                The login object
     * @param    string        $usernameOrEmail    The username or email address provided by the user
     * @param    string        $password            The plaintext password provided by the user
     * @return    \IPS\Member
     * @throws    \IPS\Login\Exception
     */
   
public function authenticateUsernamePassword( \IPS\Login $login, $usernameOrEmail, $password )
    {
        return
$this->authenticate( array( 'auth' => $usernameOrEmail, 'password' => $password ) );
    }
   
   
/**
     * Authenticate
     *
     * @param    \IPS\Login    $login                The login object
     * @return    \IPS\Member
     * @throws    \IPS\Login\Exception
     */
   
public function authenticateButton( \IPS\Login $login )
    {
        return
$this->authenticate( $login->url );
    }
   
   
/**
     * Create an account from login - checks registration is enabled, the name/email doesn't already exists and calls the spam service
     *
     * @param    $member|NULL        \IPS\Member    The existing member, if one exists
     * @param    $memberProperties    array        Any properties to set on the member (whether registering or not) such as IDs from third-party services
     * @param    $name                string|NULL    The desired username. If not provided, not allowed, or another existing user has this name, it will be left blank and the user prompted to provide it.
     * @param    $email                string|NULL    The user's email address. If it matches an existing account, an \IPS\Login\Exception object will be thrown so the user can be prompted to link those accounts. If not provided, it will be left blank and the user prompted to provide it.
     * @param    $details            mixed        If $email matches an existing account, this is wgat will later be provided to link() - include any data you will need to link the accounts later
     * @param    $profileSync        array|NULL    If creating a new account, the default profile sync settings for this provider
     * @param    $profileSyncClass    string|NULL    If $profileSync is enabled, the profile sync service with a name matching this login handler will be used. Provide an alternative classname to override (e.g. for Windows login, the login handler class is Live, but the profile sync class is Microsoft)
     * @return    \IPS\Member
     * @throws    \IPS\Login\Exception    If email address matches (\IPS\Login\Exception::MERGE_SOCIAL_ACCOUNT), registration is disabled (IPS\Login\Exception::REGISTRATION_DISABLED) or the spam service denies registration (\IPS\Login\Exception::REGISTRATION_DENIED_BY_SPAM_SERVICE)
     */
   
protected function createOrUpdateAccount( $member, $memberProperties=array(), $name=NULL, $email=NULL, $details=NULL, $profileSync=NULL, $profileSyncClass=NULL )
    {
       
/* Create an account */
       
if ( !$member or !$member->member_id )
        {
            try
            {
               
$member = $this->createAccount( $name, $email );
            }
            catch ( \
IPS\Login\Exception $e )
            {
                if (
$details )
                {
                   
$e->details = $details;
                }
                throw
$e;
            }
           
           
/* Member properties */
           
foreach ( $memberProperties as $k => $v )
            {
               
$member->$k = $v;
            }
           
$member->save();
        }
       
       
/* Or just update? */
       
else
        {
            foreach (
$memberProperties as $k => $v )
            {
               
$member->$k = $v;

                if(
$k == 'members_pass_hash' or $k == 'email' )
                {
                   
$member->invalidateSessionsAndLogins( \IPS\Session::i()->id );
                }
            }
           
$member->save();
        }
       
       
/* Return */
       
return $member;
    }
   
   
/**
     * Can this handler process a password change for a member?
     *
     * @return    bool
     */
   
public function canChangePassword( \IPS\Member $member )
    {
        return
method_exists( $this, 'canChange' ) ? $this->canChange( 'password', $member ) : FALSE;
    }
   
   
/**
     * Link Account
     *
     * @param    \IPS\Member    $member        The member
     * @param    mixed        $details    Details as they were passed to the exception
     * @return    void
     */
   
public function completeLink( \IPS\Member $member, $details )
    {
        static::
link( $member, $details );
    }
}