Files
IPB/upload/sources/action_public/login.php
T
2025-12-19 00:24:35 -08:00

974 lines
31 KiB
PHP

<?php
/*
+--------------------------------------------------------------------------
| Invision Power Board 2.2.2
| =============================================
| by Matthew Mecham
| (c) 2001 - 2006 Invision Power Services, Inc.
| http://www.invisionpower.com
| =============================================
| Web: http://www.invisionboard.com
| http://www.ibresource.ru/products/invisionpowerboard/
| Time: Monday 05th of March 2007 10:10:54 PM
| Release: e3790216629e5a2aaf37070b32237f06
| Licence Info: http://www.invisionboard.com/?license
| http://www.ibresource.ru/license
+---------------------------------------------------------------------------
| INVISION POWER BOARD IS NOT FREE / OPEN SOURCE!
+---------------------------------------------------------------------------
| INVISION POWER BOARD ÍÅ ßÂËßÅÒÑß ÁÅÑÏËÀÒÍÛÌ ÏÐÎÃÐÀÌÌÍÛÌ ÎÁÅÑÏÅ×ÅÍÈÅÌ!
| Ïðàâà íà ÏÎ ïðèíàäëåæàò Invision Power Services
| Ïðàâà íà ïåðåâîä IBResource (http://www.ibresource.ru)
+---------------------------------------------------------------------------
| > $Date: 2007-02-21 14:35:34 -0500 (Wed, 21 Feb 2007) $
| > $Revision: 855 $
| > $Author: bfarber $
+---------------------------------------------------------------------------
|
| > Log in / log out module
| > Module written by Matt Mecham
| > Date started: 14th February 2002
|
| > Module Version Number: 1.0.0
| > DBA Checked: Wed 19 May 2004
| > Quality Checked: Wed 15 Sept. 2004
+--------------------------------------------------------------------------
*/
if ( ! defined( 'IN_IPB' ) )
{
print "<h1>Íåêîððåêòíûé àäðåñ</h1>Âû íå èìååòå äîñòóïà ê ýòîìó ôàéëó íàïðÿìóþ. Åñëè âû íåäàâíî îáíîâëÿëè ôîðóì, âû äîëæíû îáíîâèòü âñå ñîîòâåòñòâóþùèå ôàéëû.";
exit();
}
class login
{
# Classes
var $ipsclass;
# Others
var $output = "";
var $page_title = "";
var $nav = array();
var $login_html = "";
var $modules = "";
var $han_login = "";
function auto_run()
{
$this->ipsclass->load_language('lang_login');
$this->ipsclass->load_template('skin_login');
if ( USE_MODULES == 1 )
{
require ROOT_PATH."modules/ipb_member_sync.php";
$this->modules = new ipb_member_sync();
$this->modules->ipsclass =& $this->ipsclass;
}
//-----------------------------------------
// Are we enforcing log ins?
//-----------------------------------------
if ( $this->ipsclass->vars['force_login'] == 1 )
{
$msg = 'admin_force_log_in';
}
else
{
$msg = "";
}
//-----------------------------------------
// What to do?
//-----------------------------------------
switch( $this->ipsclass->input['CODE'] )
{
case '01':
$this->do_log_in();
break;
case '02':
$this->log_in_form();
break;
case '03':
$this->do_log_out();
break;
case '04':
$this->markforum();
break;
case '05':
$this->markboard();
break;
case '06':
$this->delete_cookies();
break;
case 'autologin':
$this->auto_login();
break;
default:
$this->log_in_form($msg);
break;
}
//-----------------------------------------
// If we have any HTML to print, do so...
//-----------------------------------------
$this->ipsclass->print->add_output("$this->output");
$this->ipsclass->print->do_output( array( 'TITLE' => $this->page_title, 'JS' => 0, 'NAV' => $this->nav ) );
}
/*-------------------------------------------------------------------------*/
// AUTO LOG IN
/*-------------------------------------------------------------------------*/
function auto_login()
{
//-----------------------------------------
// Universal routine.
// If we have cookies / session created, simply return to the index screen
// If not, return to the log in form
//-----------------------------------------
$this->ipsclass->member = $this->ipsclass->sess->authorise();
//-----------------------------------------
// If there isn't a member ID set, do a quick check ourselves.
// It's not that important to do the full session check as it'll
// occur when they next click a link.
//-----------------------------------------
if ( ! $this->ipsclass->member['id'] )
{
$mid = intval( $this->ipsclass->my_getcookie('member_id') );
$pid = substr( $this->ipsclass->my_getcookie('pass_hash'), 0, 32 );
If ( $mid and $pid )
{
$this->ipsclass->DB->simple_construct( array( 'select' => '*',
'from' => 'members',
'where' => "id=$mid and member_login_key='$pid'"
) );
$this->ipsclass->DB->simple_exec();
if ( $member = $this->ipsclass->DB->fetch_row() )
{
$this->ipsclass->member = $member;
$this->ipsclass->session_id = "";
$this->ipsclass->my_setcookie('session_id', '0', -1 );
}
}
}
$true_words = $this->ipsclass->lang['logged_in'];
$false_words = $this->ipsclass->lang['not_logged_in'];
$method = 'no_show';
if ($this->ipsclass->input['fromreg'] == 1)
{
$true_words = $this->ipsclass->lang['reg_log_in'];
$false_words = $this->ipsclass->lang['reg_not_log_in'];
$method = 'show';
}
else if ($this->ipsclass->input['fromemail'] == 1)
{
$true_words = $this->ipsclass->lang['email_log_in'];
$false_words = $this->ipsclass->lang['email_not_log_in'];
$method = 'show';
}
else if ($this->ipsclass->input['frompass'] == 1)
{
$true_words = $this->ipsclass->lang['pass_log_in'];
$false_words = $this->ipsclass->lang['pass_not_log_in'];
$method = 'show';
}
if ($this->ipsclass->member['id'])
{
if ($method == 'show')
{
$this->ipsclass->print->redirect_screen( $true_words, "" );
}
else
{
$this->ipsclass->boink_it($this->ipsclass->vars['board_url'].'/index.'.$this->ipsclass->vars['php_ext']);
}
}
else
{
if ($method == 'show')
{
$this->ipsclass->print->redirect_screen( $false_words, 'act=login&amp;CODE=00' );
}
else
{
$this->ipsclass->boink_it($this->ipsclass->base_url.'&act=login&CODE=00');
}
}
}
/*-------------------------------------------------------------------------*/
// DELETE IPB COOKIES
/*-------------------------------------------------------------------------*/
function delete_cookies( $check_key=1 )
{
if( $check_key )
{
$key = $this->ipsclass->input['k'];
# Check for funny business
if ( $key != $this->ipsclass->md5_check )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'no_permission' ) );
}
}
if (is_array($_COOKIE))
{
foreach( $_COOKIE as $cookie => $value)
{
if (preg_match( "/^(".$this->ipsclass->vars['cookie_id']."ipbforum.*$)/i", $cookie, $match))
{
$this->ipsclass->my_setcookie( str_replace( $this->ipsclass->vars['cookie_id'], "", $match[0] ) , '-', -1 );
}
}
}
$this->ipsclass->my_setcookie('pass_hash' , '-1');
$this->ipsclass->my_setcookie('member_id' , '-1');
$this->ipsclass->my_setcookie('session_id', '-1');
$this->ipsclass->my_setcookie('topicsread', '-1');
$this->ipsclass->my_setcookie('anonlogin' , '-1');
$this->ipsclass->my_setcookie('forum_read', '-1');
$this->ipsclass->boink_it($this->ipsclass->base_url);
exit();
}
/*-------------------------------------------------------------------------*/
// MARK ALL AS READ
/*-------------------------------------------------------------------------*/
function markboard()
{
//-----------------------------------------
// Reset board marker
//-----------------------------------------
if ( $this->ipsclass->member['id'] )
{
$this->ipsclass->member['members_markers']['board'] = time();
$this->ipsclass->DB->do_update( 'members', array( 'members_markers' => serialize( $this->ipsclass->member['members_markers'] ) ), 'id='.$this->ipsclass->member['id'] );
//-----------------------------------------
// Update forum marker rows
//-----------------------------------------
$this->ipsclass->DB->do_update( 'topic_markers', array( 'marker_unread' => 0,
'marker_last_update' => time(),
'marker_last_cleared' => time(),
'marker_topics_read' => serialize(array()) ), 'marker_member_id='.$this->ipsclass->member['id'] );
}
else
{
$this->ipsclass->forum_read[ 0 ] = time();
$this->ipsclass->hdl_forum_read_cookie('set');
}
$this->ipsclass->boink_it($this->ipsclass->base_url.'act=idx');
}
/*-------------------------------------------------------------------------*/
// MARK FORUM AS READ
/*-------------------------------------------------------------------------*/
function markforum()
{
//-----------------------------------------
// INIT
//-----------------------------------------
$forum_id = intval($this->ipsclass->input['f']);
$from_forum_id = intval($this->ipsclass->input['fromforum']);
$forum_data = $this->ipsclass->forums->forum_by_id[ $forum_id ];
$children = $this->ipsclass->forums->forums_get_children( $forum_data['id'] );
$save = array();
$delete = array();
//-----------------------------------------
// Check
//-----------------------------------------
if ( ! $forum_data['id'] )
{
$this->ipsclass->Error( array( LEVEL => 1, MSG => 'missing_files' ) );
}
//-----------------------------------------
// Come from the index? Add kids
//-----------------------------------------
if ( $this->ipsclass->input['i'] )
{
if ( is_array( $children ) and count($children) )
{
foreach( $children as $id )
{
$this->ipsclass->forum_read[ $id ] = time();
$delete[] = $id;
$save[ $id ] = array( 'marker_forum_id' => $id,
'marker_member_id' => $this->ipsclass->member['id'],
'marker_last_update' => time(),
'marker_unread' => 0,
'marker_last_cleared' => time() );
}
}
}
//-----------------------------------------
// Add in the current forum...
//-----------------------------------------
$this->ipsclass->forum_read[ $forum_data['id'] ] = time();
$delete[] = $forum_data['id'];
$save[ $forum_data['id'] ] = array( 'marker_forum_id' => $forum_data['id'],
'marker_member_id' => $this->ipsclass->member['id'],
'marker_last_update' => time(),
'marker_unread' => 0,
'marker_last_cleared' => time() );
//-----------------------------------------
// Reset topic markers
//-----------------------------------------
if ( $this->ipsclass->vars['db_topic_read_cutoff'] and $this->ipsclass->member['id'] )
{
if ( count( $delete ) )
{
$this->ipsclass->DB->build_and_exec_query( array( 'delete' => 'topic_markers',
'where' => 'marker_member_id='.$this->ipsclass->member['id'].' AND marker_forum_id IN ('.implode(',',$delete ).')' ) );
foreach( $save as $data )
{
$this->ipsclass->DB->do_insert( 'topic_markers', $data );
}
}
}
//-----------------------------------------
// Reset cookie
//-----------------------------------------
$this->ipsclass->hdl_forum_read_cookie('set');
//-----------------------------------------
// Where are we going back to?
//-----------------------------------------
if ( $from_forum_id )
{
//-----------------------------------------
// Its a sub forum, lets go redirect to parent forum
//-----------------------------------------
$this->ipsclass->boink_it($this->ipsclass->base_url."showforum=".$from_forum_id);
}
else
{
$this->ipsclass->boink_it($this->ipsclass->base_url.'act=idx');
}
}
/*-------------------------------------------------------------------------*/
// LOG IN FORM
/*-------------------------------------------------------------------------*/
function log_in_form($message="")
{
//-----------------------------------------
// INIT
//-----------------------------------------
$extra_form = "";
$show_form = 1;
//-----------------------------------------
// Load handler...
//-----------------------------------------
require_once( ROOT_PATH.'sources/handlers/han_login.php' );
$this->han_login = new han_login();
$this->han_login->ipsclass =& $this->ipsclass;
$this->han_login->init();
//-----------------------------------------
// Are they banned?
//-----------------------------------------
if ( is_array( $this->ipsclass->cache['banfilters'] ) and count( $this->ipsclass->cache['banfilters'] ) )
{
foreach ($this->ipsclass->cache['banfilters'] as $ip)
{
$ip = str_replace( '\*', '.*', preg_quote($ip, "/") );
if ( preg_match( "/^$ip$/", $this->ipsclass->ip_address ) )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'you_are_banned', 'INIT' => 1 ) );
}
}
}
if ( $message != "" )
{
$message = $this->ipsclass->lang[ $message ];
$message = str_replace( "<#NAME#>", "<b>{$this->ipsclass->input['UserName']}</b>", $message );
$this->output .= $this->ipsclass->compiled_templates['skin_login']->errors($message);
}
//-----------------------------------------
// Using an alternate log in form?
//-----------------------------------------
if ( $this->han_login->login_method['login_login_url'] )
{
//-----------------------------------------
// Simply redirect to the form now
//-----------------------------------------
$this->ipsclass->boink_it( $this->han_login->login_method['login_login_url'] );
exit();
}
//-----------------------------------------
// Extra HTML?
//-----------------------------------------
if ( $this->han_login->login_method['login_alt_login_html'] )
{
if ( ! $this->han_login->login_method['login_replace_form'] )
{
$extra_form = $this->han_login->login_method['login_alt_login_html'];
$show_form = 1;
}
else
{
$this->output .= $this->han_login->login_method['login_alt_login_html'];
$show_form = 0;
}
}
//-----------------------------------------
// Continue...
//-----------------------------------------
if ( $show_form )
{
if ( !$this->ipsclass->my_getenv('HTTP_REFERER') OR !preg_match( "/" . preg_quote( $this->ipsclass->vars['board_url'], '/' ) . "/i", $this->ipsclass->my_getenv('HTTP_REFERER') ) )
{
// HTTP_REFERER isn't set when force_login is enabled
// This method will piece together the base url, and the querystring arguments
// This is not anymore secure/insecure than IPB, as IPB will have to process
// those arguments whether force_login is enabled or not.
$argv = (is_array($this->ipsclass->my_getenv('argv')) && count($this->ipsclass->my_getenv('argv')) > 0) ? $this->ipsclass->my_getenv('argv') : array();
$http_referrer = $this->ipsclass->base_url.@implode( "&amp;", $argv );
}
else
{
$http_referrer = $this->ipsclass->my_getenv('HTTP_REFERER');
}
$this->output .= $this->ipsclass->compiled_templates['skin_login']->ShowForm( $this->ipsclass->lang['please_log_in'], htmlentities(urldecode($http_referrer)), $extra_form );
}
$this->nav = array( $this->ipsclass->lang['log_in'] );
$this->page_title = $this->ipsclass->lang['log_in'];
$this->ipsclass->print->add_output("$this->output");
$this->ipsclass->print->do_output( array( 'TITLE' => $this->page_title, 'JS' => 0, 'NAV' => $this->nav, 'OVERRIDE' => $this->ipsclass->vars['board_offline'] ) );
exit();
}
/*-------------------------------------------------------------------------*/
// DO LOG IN
/*-------------------------------------------------------------------------*/
function do_log_in()
{
//-----------------------------------------
// INIT
//-----------------------------------------
$url = "";
$member = array();
//-----------------------------------------
// Load handler...
//-----------------------------------------
require_once( ROOT_PATH.'sources/handlers/han_login.php' );
$this->han_login = new han_login();
$this->han_login->ipsclass =& $this->ipsclass;
$this->han_login->init();
//-----------------------------------------
// Make sure the username and password were entered
//-----------------------------------------
if ( $_POST['UserName'] == "" )
{
if( $this->ipsclass->vars['ipbli_usertype'] == 'username' )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'no_username' ) );
}
else
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'no_email_login' ) );
}
}
if ( $_POST['PassWord'] == "" )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'pass_blank' ) );
}
//-----------------------------------------
// Check for input length
//-----------------------------------------
if ( $this->ipsclass->vars['ipbli_usertype'] == 'username' )
{
if ( $this->ipsclass->txt_mb_strlen( $_POST['UserName'] ) > 32 )
{
$this->ipsclass->Error( array( LEVEL => 1, MSG => 'username_long' ) );
}
$username = strtolower(str_replace( '|', '&#124;', $this->ipsclass->input['UserName']) );
}
else
{
$username = strtolower( trim( $this->ipsclass->input['UserName'] ) );
}
if ( $this->ipsclass->txt_mb_strlen( $_POST['PassWord'] ) > 32)
{
$this->ipsclass->Error( array( LEVEL => 1, MSG => 'pass_too_long' ) );
}
$password = md5( $this->ipsclass->input['PassWord'] );
//-----------------------------------------
// Check auth
//-----------------------------------------
$this->han_login->login_authenticate( $username, $this->ipsclass->input['PassWord'] );
//-----------------------------------------
// Check return code...
//-----------------------------------------
$member = $this->han_login->member;
if ( ( ! $member['id'] ) or ( $this->han_login->return_code == 'NO_USER' ) )
{
$this->log_in_form( 'wrong_name' );
}
if ( $this->han_login->return_code != 'SUCCESS' )
{
if ( $this->han_login->return_code == 'ACCOUNT_LOCKED' )
{
$extra = "<!-- -->";
if( $this->ipsclass->vars['ipb_bruteforce_unlock'] )
{
if( $this->han_login->account_unlock )
{
$time = time() - $this->han_login->account_unlock;
$time = $this->ipsclass->vars['ipb_bruteforce_period'] - ceil( $time / 60 );
$extra = sprintf( $this->ipsclass->lang['bruteforce_account_unlock'], $time );
}
}
$this->ipsclass->Error( array( 'LEVEL' => 5, 'MSG' => 'bruteforce_account_lock', 'EXTRA' => $extra ) );
}
else
{
$this->log_in_form( 'wrong_auth' );
}
}
//-----------------------------------------
// Is this a partial member?
// Not completed their sign in?
//-----------------------------------------
if ( $member['members_created_remote'] )
{
$pmember = $this->ipsclass->DB->build_and_exec_query( array( 'select' => '*', 'from' => 'members_partial', 'where' => "partial_member_id={$member['id']}" ) );
if ( $pmember['partial_member_id'] )
{
$this->ipsclass->print->redirect_screen( $this->ipsclass->lang['partial_login'], 'act=reg&amp;CODE=complete_login&amp;mid='.$member['id'].'&amp;key='.$pmember['partial_date'] );
exit();
}
}
//-----------------------------------------
// Generate a new log in key
//-----------------------------------------
$_ok = 1;
$_time = ( $this->ipsclass->vars['login_key_expire'] ) ? ( time() + ( intval($this->ipsclass->vars['login_key_expire']) * 86400 ) ) : 0;
$_sticky = $_time ? 0 : 1;
$_days = $_time ? $this->ipsclass->vars['login_key_expire'] : 365;
if ( $this->ipsclass->vars['login_change_key'] OR ! $member['member_login_key'] OR ( $this->ipsclass->vars['login_key_expire'] AND ( time() > $member['member_login_key_expire'] ) ) )
{
$member['member_login_key'] = $this->ipsclass->converge->generate_auto_log_in_key();
$this->ipsclass->DB->do_update( 'members', array( 'member_login_key' => $member['member_login_key'],
'member_login_key_expire' => $_time ), 'id='.$member['id'] );
}
//-----------------------------------------
// Strong hold cookie?
//-----------------------------------------
$this->ipsclass->stronghold_set_cookie( $member['id'], $member['member_login_key'], 1 );
//-----------------------------------------
// Cookie me softly?
//-----------------------------------------
if ( $this->ipsclass->input['CookieDate'] )
{
$this->ipsclass->my_setcookie("member_id" , $member['id'] , 1);
$this->ipsclass->my_setcookie("pass_hash" , $member['member_login_key'], $_sticky, $_days );
}
//-----------------------------------------
// Remove any COPPA cookies previously set
//-----------------------------------------
$this->ipsclass->my_setcookie("coppa", '0', 0);
//-----------------------------------------
// Update profile if IP addr missing
//-----------------------------------------
if ( $member['ip_address'] == "" OR $member['ip_address'] == '127.0.0.1' )
{
$this->ipsclass->DB->simple_construct( array( 'update' => 'members',
'set' => "ip_address='{$this->ipsclass->ip_address}'",
'where' => "id={$member['id']}"
) );
$this->ipsclass->DB->simple_exec();
}
//-----------------------------------------
// Create / Update session
//-----------------------------------------
$poss_session_id = "";
if ( $cookie_id = $this->ipsclass->my_getcookie('session_id') )
{
$poss_session_id = $this->ipsclass->my_getcookie('session_id');
}
else if ( $this->ipsclass->input['s'] )
{
$poss_session_id = $this->ipsclass->input['s'];
}
//-----------------------------------------
// Clean...
//-----------------------------------------
$poss_session_id = preg_replace("/([^a-zA-Z0-9])/", "", $poss_session_id);
if ( $poss_session_id )
{
$session_id = $poss_session_id;
if( $this->ipsclass->vars['match_ipaddress'] )
{
//-----------------------------------------
// Delete any old sessions with this users IP
// addy that doesn't match our session ID.
//-----------------------------------------
$this->ipsclass->DB->simple_construct( array( 'delete' => 'sessions',
'where' => "ip_address='".$this->ipsclass->ip_address."' AND id <> '$session_id'"
) );
$this->ipsclass->DB->simple_shutdown_exec();
}
if( $this->ipsclass->vars['disable_anonymous'] )
{
$privacy = 0;
}
else
{
$privacy = ( isset($this->ipsclass->input['Privacy']) AND $this->ipsclass->input['Privacy']) ? 1 : 0;
}
$this->ipsclass->DB->do_shutdown_update( 'sessions',
array (
'member_name' => $member['members_display_name'],
'member_id' => $member['id'],
'running_time' => time(),
'member_group' => $member['mgroup'],
'login_type' => $privacy
),
"id='".$session_id."'"
);
}
else
{
$session_id = md5( uniqid(microtime()) );
if( $this->ipsclass->vars['disable_anonymous'] )
{
$privacy = 0;
}
else
{
$privacy = $this->ipsclass->input['Privacy'] ? 1 : 0;
}
if( $this->ipsclass->vars['match_ipaddress'] )
{
//-----------------------------------------
// Delete any old sessions with this users IP addy.
//-----------------------------------------
$this->ipsclass->DB->simple_construct( array( 'delete' => 'sessions',
'where' => "ip_address='".$this->ipsclass->ip_address."'"
) );
$this->ipsclass->DB->simple_shutdown_exec();
}
$this->ipsclass->DB->do_shutdown_insert( 'sessions',
array (
'id' => $session_id,
'member_name' => $member['members_display_name'],
'member_id' => $member['id'],
'running_time' => time(),
'member_group' => $member['mgroup'],
'ip_address' => $this->ipsclass->ip_address,
'browser' => substr($this->ipsclass->clean_value($this->ipsclass->my_getenv('HTTP_USER_AGENT')), 0, 50),
'login_type' => $privacy
) );
}
$this->ipsclass->member = $member;
$this->ipsclass->session_id = $session_id;
if (isset($this->ipsclass->input['referer']) AND $this->ipsclass->input['referer'] && ($this->ipsclass->input['act'] != 'Reg'))
{
$url = str_replace( '&amp;', '&', $this->ipsclass->input['referer'] );
$url = str_replace( "{$this->ipsclass->vars['board_url']}/index.{$this->ipsclass->vars['php_ext']}", "", $url );
$url = preg_replace( "!^\?!" , "" , $url );
$url = preg_replace( "!s=(\w){32}!", "" , $url );
$url = preg_replace( "!act=(login|reg|lostpass)!i", "", $url );
}
//-----------------------------------------
// Set our privacy status
//-----------------------------------------
$this->ipsclass->DB->simple_construct( array( 'update' => 'members',
'set' => "login_anonymous='".intval($privacy)."&1', failed_logins='', failed_login_count=0",
'where' => "id={$member['id']}"
) );
$this->ipsclass->DB->simple_shutdown_exec();
//-----------------------------------------
// Clear out any passy change stuff
//-----------------------------------------
$this->ipsclass->DB->simple_construct( array( 'delete' => 'validating',
'where' => "member_id={$this->ipsclass->member['id']} AND lost_pass=1"
) );
$this->ipsclass->DB->simple_shutdown_exec();
//-----------------------------------------
// Redirect them to either the board
// index, or where they came from
//-----------------------------------------
$this->ipsclass->my_setcookie("session_id", $this->ipsclass->session_id, -1);
$this->logged_in = 1;
if ( USE_MODULES == 1 )
{
$this->modules->register_class($this);
$this->modules->on_login($member);
}
if ( isset($this->ipsclass->input['return']) AND $this->ipsclass->input['return'] != "" )
{
$return = urldecode($this->ipsclass->input['return']);
if ( preg_match( "#^http://#", $return ) )
{
$this->ipsclass->boink_it($return);
}
}
//-----------------------------------------
// Check for dupemail
//-----------------------------------------
$member_extra = $this->ipsclass->DB->simple_exec_query( array( 'select' => 'bio', 'from' => 'member_extra', 'where' => 'id='.$member['id'] ) );
if ( $member_extra['bio'] == 'dupemail' )
{
$this->ipsclass->print->redirect_screen( "{$this->ipsclass->lang['thanks_for_login']} {$this->ipsclass->member['members_display_name']}", 'act=usercp&amp;CODE=00' );
}
else
{
$this->ipsclass->print->redirect_screen( "{$this->ipsclass->lang['thanks_for_login']} {$this->ipsclass->member['members_display_name']}", $url );
}
}
/*-------------------------------------------------------------------------*/
// DO LOG OUT
/*-------------------------------------------------------------------------*/
function do_log_out( $return=1 )
{
//-----------------------------------------
// INIT
//-----------------------------------------
if ( $return )
{
$key = $this->ipsclass->input['k'];
# Check for funny business
if ( $key != $this->ipsclass->md5_check )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'no_permission' ) );
}
}
//-----------------------------------------
// Set some cookies
//-----------------------------------------
$this->ipsclass->my_setcookie( "member_id" , "0" );
$this->ipsclass->my_setcookie( "pass_hash" , "0" );
$this->ipsclass->my_setcookie( "anonlogin" , "-1" );
if ( is_array($_COOKIE) )
{
foreach( $_COOKIE as $cookie => $value )
{
if ( preg_match( "/^(".$this->ipsclass->vars['cookie_id']."ipbforumpass_.*$)/i", $cookie, $match) )
{
$this->ipsclass->my_setcookie( str_replace( $this->ipsclass->vars['cookie_id'], "", $match[0] ) , '-', -1 );
}
}
}
//-----------------------------------------
// Remote log out?
//-----------------------------------------
require_once( ROOT_PATH.'sources/handlers/han_login.php' );
$this->han_login = new han_login();
$this->han_login->ipsclass =& $this->ipsclass;
$this->han_login->init();
//-----------------------------------------
// Using an alternate log in form?
//-----------------------------------------
if ( $this->han_login->login_method['login_logout_url'] )
{
//-----------------------------------------
// Simply redirect to the form now
//-----------------------------------------
$this->ipsclass->boink_it( $this->han_login->login_method['login_logout_url'] );
exit();
}
//-----------------------------------------
// Do it..
//-----------------------------------------
$this->ipsclass->DB->simple_construct( array( 'update' => 'sessions',
'set' => "member_name='',member_id='0',login_type='0',member_group={$this->ipsclass->vars['guest_group']}",
'where' => "id='". $this->ipsclass->sess->session_id ."'"
) );
$this->ipsclass->DB->simple_shutdown_exec();
list( $privacy, $loggedin ) = explode( '&', $this->ipsclass->member['login_anonymous'] );
$this->ipsclass->DB->simple_construct( array( 'update' => 'members',
'set' => "login_anonymous='{$privacy}&0', last_visit=".time().", last_activity=".time(),
'where' => "id=".$this->ipsclass->member['id']
) );
$this->ipsclass->DB->simple_shutdown_exec();
# Horrid hack: IPB 3.0: Separate out log out functions into class / function
if ( $return )
{
//-----------------------------------------
// Redirect...
//-----------------------------------------
$url = "";
if ( isset($this->ipsclass->input['return']) AND $this->ipsclass->input['return'] != "" )
{
$return = urldecode($this->ipsclass->input['return']);
if ( preg_match( "#^http://#", $return ) )
{
$this->ipsclass->boink_it($return);
}
}
$this->ipsclass->print->redirect_screen( $this->ipsclass->lang['thanks_for_logout'], "" );
}
else
{
return TRUE;
}
}
}
?>