Вход Регистрация
Файл: apwa/stk/index.php
Строк: 405
<?php
/**
*
* @package Support Toolkit
* @copyright (c) 2009 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

define('IN_PHPBB'true);

if (!
defined('PHPBB_ROOT_PATH')) { define('PHPBB_ROOT_PATH''./../'); }
if (!
defined('PHP_EXT')) { define('PHP_EXT'substr(strrchr(__FILE__'.'), 1)); }
if (!
defined('STK_DIR_NAME')) { define('STK_DIR_NAME'substr(strrchr(dirname(__FILE__), DIRECTORY_SEPARATOR), 1)); }    // Get the name of the stk directory
if (!defined('STK_ROOT_PATH')) { define('STK_ROOT_PATH''./'); }
if (!
defined('STK_INDEX')) { define('STK_INDEX'STK_ROOT_PATH 'index.' PHP_EXT); }

require 
STK_ROOT_PATH 'common.' PHP_EXT;

// Setup the user
$user->session_begin();
$auth->acl($user->data);
$user->setup('acp/common'$config['default_style']);

// Load UMIL
$umil = new umil(true);

// Set a constant so we know when the STK got to a point where it savely loaded all absolutely required stuff
define('IN_STK'true);

// Language path.  We are using a custom language path to keep all the files within the stk/ folder.  First check if the $user->data['user_lang'] path exists, if not, check if the default lang path exists, and if still not use english.
stk_add_lang('common');

// Do not use the normal template path (to prevent issues with boards using alternate styles)
$template->set_custom_template(STK_ROOT_PATH 'style''stk');

// Work around for a bug in phpBB3.
$user->theme['template_storedb'] = false;

// Perform some quick tasks here that don't require any authentication!
perform_unauthed_quick_tasks($action$submit);

/*
* Start Login
*/
$stk_passwd $stk_passwd_expiration false;
// See whether we have an emergency login file
if (file_exists(STK_ROOT_PATH 'passwd.' PHP_EXT) && $user->data['user_type'] != USER_FOUNDER)
{
    
// Include the file
    
include(STK_ROOT_PATH 'passwd.' PHP_EXT);

    
// Can we use trust this password
    
if ($stk_passwd_expiration === false || time() > $stk_passwd_expiration)
    {
        
// No? Invalidate the password and try to remove the file
        
$stk_passwd false;
        
perform_authed_quick_tasks('delpasswdfile');
    }
}

// Do the actual login.
if ($stk_passwd !== false)
{
    
// We need to reset the session_id here.
    // If an incorrect session_id is in the user's cookies (with the correct sid in the URL) we will keep failing the check_form_key and we can not login to fix the cookie problem otherwise!
    
$user->session_id '';

    
// Set some vars
    
$cookie_token    request_var('stk_token'''truetrue);
    
$err_msg        '';
    
$login_token    request_var('stk_pass'''true);
    
$stk_session    false;

    
// One foot in the air for an active session
    
if (!empty($cookie_token))
    {
        if (
phpbb_check_hash($stk_passwd$cookie_token))
        {
            
$stk_session true;
            unset(
$stk_passwd$login_token);
        }
    }

    
// No active session?
    
if (!$stk_session)
    {
        
// We're trying to login
        
if (isset($_POST['login']))
        {
            if (
$cache->get('_stk_last_login') !== false)
            {
                
// Make sure that we do not have an stk_last_login cache file (expires after 3 seconds).  To prevent a bruteforce attack
                
$err_msg 'STK_LOGIN_WAIT';
            }
            else if (!
check_form_key('stk_login_form'))
            {
                
$err_msg 'FORM_INVALID';
            }
            else
            {
                
// Create a hash of the given token to compare the password
                
$login_token_hash phpbb_hash($login_token);

                if (
phpbb_check_hash($stk_passwd$login_token_hash))
                {
                    
$stk_session true;

                    
// Create a session cookie to keep the user logged in
                    
setcookie('stk_token'$login_token_hash0);
                }
                else
                {
                    
// Store a cache file letting us know when the last login failure attempt was
                    
$cache->put('_stk_last_login'true3);

                    
$err_msg 'INCORRECT_PASSWORD';
                }
            }
        }

        
// Past this point we don't want the passwords anymore
        
unset($stk_passwd$login_token);

        
// Still no session. Make the user happy and show him something to work with
        
if (!$stk_session)
        {
            
add_form_key('stk_login_form');

            
$template->assign_vars(array(
                
// Password field related
                
'TITLE'            => $user->lang['SUPPORT_TOOL_KIT_PASSWORD'],
                
'TITLE_EXPLAIN'    => $user->lang['SUPPORT_TOOL_KIT_PASSWORD_EXPLAIN'],

                
// Other page stuff
                
'LOGIN_ERROR'            => (!empty($err_msg)) ? $user->lang[$err_msg] : false,

                
'U_ACTION'                => append_sid(STK_INDEXfalsetrue$user->session_id),
                
'U_INDEX'                => append_sid(PHPBB_ROOT_PATH 'index.' PHP_EXT),

                
// Identify this method in the template
                
'S_STK_LOGIN_METHOD'    => true,
            ));

            
page_header($user->lang['LOGIN'], false);

            
$template->set_filenames(array(
                
'body' => 'login_body.html',
            ));

            
page_footer(false);
        }
    }

    
// Tell the template engine we're logged through this
    
$template->assign_vars(array(
        
'S_STK_LOGIN'            => true,
        
'STK_LOGIN_DISABLE_MSG'    => sprintf($user->lang['USING_STK_LOGIN'], append_sid(STK_INDEX, array('action' => 'delpasswdfile'))),
    ));

    
// Don't use "Anonymous" as username
    
$user->data['username'] = $user->lang['EMERGENCY_LOGIN_NAME'];
}
// phpBB authentication. Only allow founders to pass!
else
{
    if (!
$user->data['is_registered'])
    {
        
$user->add_lang('ucp');

        
// Assign a string only used here
        
$template->assign_var('GEN_PASS_FILE_EXPLAIN'sprintf($user->lang['GEN_PASS_FILE_EXPLAIN'], append_sid(STK_INDEX, array('action' => 'genpasswdfile'))));

        
// A user can potentially access this file directly
        
login_box(''$user->lang['STK_NON_LOGIN'], ''falsefalse);
    }

    
// This requires that the user is logged in as an administrator (like how the ACP requires two logins)
    
if (!isset($user->data['session_admin']) || !$user->data['session_admin'])
    {
        
// Proceed to ACP is misleading
        
$user->lang['PROCEED_TO_ACP'] = $user->lang['PROCEED_TO_STK'];

        
login_box(''$user->lang['STK_FOUNDER_ONLY'], $user->lang['LOGIN_STK_SUCCESS'], truefalse);
    }

    
// Only Board Founders may use the STK
    
if ($user->data['user_type'] != USER_FOUNDER)
    {
        
trigger_error('BOARD_FOUNDER_ONLY');
    }
}
/*
* End Login
*/

// Try to override some limits - maybe it helps some...
@set_time_limit(0);
$mem_limit = @ini_get('memory_limit');
if (!empty(
$mem_limit))
{
    
$unit strtolower(substr($mem_limit, -11));
    
$mem_limit = (int) $mem_limit;

    if (
$unit == 'k')
    {
        
$mem_limit floor($mem_limit 1024);
    }
    else if (
$unit == 'g')
    {
        
$mem_limit *= 1024;
    }
    else if (
is_numeric($unit))
    {
        
$mem_limit floor((int) ($mem_limit $unit) / 1048576);
    }
    
$mem_limit max(128$mem_limit) . 'M';
}
else
{
    
$mem_limit '128M';
}
@
ini_set('memory_limit'$mem_limit);

// Before we continue check whether this is the latest version of the STK, if not. Block access.
stk_version_check();

// From this point we'll be able to use the full STK layout
$template->assign_var('S_STK_FULL_BODY'true);

// Perform some quick tasks here that require the user to be authenticated
perform_authed_quick_tasks($action);

// If they canceled redirect them to the STK index.
if (isset($_POST['cancel']))
{
    
redirect(append_sid(STK_INDEXfalsetrue$user->session_id));
}

// Setup the plugin manager
$plugin = new plugin();

// Output common stuff
$template->assign_vars(array(
    
'U_ACTION'        => append_sid(STK_INDEX$plugin->url_arg(), true$user->session_id),
    
'U_ADM_INDEX'    => append_sid(PHPBB_ROOT_PATH 'adm/index.' PHP_EXTfalsetrue$user->session_id),
    
'U_STK_INDEX'    => append_sid(STK_INDEXfalsetrue$user->session_id),
    
'U_STK_LOGOUT'    => append_sid(STK_INDEX'action=stklogout'true$user->session_id),
    
'U_BACK_TOOL'    => ($plugin->get_part('t')) ? append_sid(STK_INDEX$plugin->url_arg(), true$user->session_id) : false,
    
'U_INDEX'        => append_sid(PHPBB_ROOT_PATH 'index.' PHP_EXT),
    
'U_LOGOUT'        => append_sid(PHPBB_ROOT_PATH 'ucp.' PHP_EXT'mode=logout'true$user->session_id),

    
'USERNAME'        => $user->data['username'],
));

// Does the user want to run a tool?
if ($plugin->get_part('t'))
{
    
// Load the tool
    
$tool $plugin->load_tool($plugin->get_part('c'), $plugin->get_part('t'));

    
// Can we use this tool?
    
if (method_exists($tool'tool_active'))
    {
        if ((
$msg $tool->tool_active()) !== true)
        {
            if (
$msg === false)
            {
                
$msg $user->lang['TOOL_NOT_AVAILABLE'];
            }
            else
            {
                
$msg = isset($user->lang[$msg]) ? $user->lang[$msg] : $msg;
            }

            
trigger_error($msg);
        }
    }

    
$error = array();
    if (
$submit)
    {
        
// In run_tool do whatever is required.  If there is an error, put it into the array and the display options will be ran again
        
$tool->run_tool($error);
    }

    if (!
$submit || !empty($error))
    {
        
/*
        * Instead of building a page yourself you may return an array with the options you want to show.  This is outputted similar to how the acp_board is.
        * You may also send back a string if you just want a confirm box shown with that string used for the title
        */
        
$options $tool->display_options();

        if (
is_array($options) && isset($options['vars']))
        {
            
page_header($user->lang[$options['title']]);

            
// Go through each error and see if the key exists in the $user->lang.  If it does, use that.
            
if (!empty($error))
            {
                
array_walk($error'use_lang');

                foreach (
$error as $e)
                {
                    
$template->assign_block_vars('errormsgrow', array(
                        
'MSG'    => $e,
                    ));
                }
            }

            
$template->assign_vars(array(
                
'L_TITLE'            => $user->lang[$options['title']],
                
'L_TITLE_EXPLAIN'    => (isset($user->lang[$options['title'] . '_EXPLAIN'])) ? $user->lang[$options['title'] . '_EXPLAIN'] : '',
            ));

            foreach (
$options['vars'] as $name => $vars)
            {
                if (!
is_array($vars) && strpos($name'legend') === false)
                {
                    continue;
                }

                if (
strpos($name'legend') !== false)
                {
                    
$template->assign_block_vars('options', array(
                        
'S_LEGEND'        => true,
                        
'LEGEND'        => (isset($user->lang[$vars])) ? $user->lang[$vars] : $vars)
                    );

                    continue;
                }

                
$type explode(':'$vars['type']);

                
$l_explain '';
                if (
$vars['explain'] && isset($vars['lang_explain']))
                {
                    
$l_explain = (isset($user->lang[$vars['lang_explain']])) ? $user->lang[$vars['lang_explain']] : $vars['lang_explain'];
                }
                else if (
$vars['explain'])
                {
                    
$l_explain = (isset($user->lang[$vars['lang'] . '_EXPLAIN'])) ? $user->lang[$vars['lang'] . '_EXPLAIN'] : '';
                }

                
$content build_cfg_template($type$name$vars);

                if (empty(
$content))
                {
                    continue;
                }

                
$template->assign_block_vars('options', array(
                    
'KEY'            => $name,
                    
'TITLE'            => (isset($user->lang[$vars['lang']])) ? $user->lang[$vars['lang']] : $vars['lang'],
                    
'S_EXPLAIN'        => $vars['explain'],
                    
'TITLE_EXPLAIN'    => $l_explain,
                    
'CONTENT'        => $content['tpl'],

                    
// Find user link
                    
'S_FIND_USER'    => (isset($content['find_user'])) ? true false,
                    
'U_FIND_USER'    => (isset($content['find_user'])) ? append_sid(PHPBB_ROOT_PATH 'memberlist.' PHP_EXT, array('mode' => 'searchuser''form' => 'select_user''field' => 'username''select_single' => 'true''form' => 'stk''field' => $content['find_user_field'])) : '',
                ));
            }

            
$template->set_filenames(array(
                
'body' => 'tool_options.html',
            ));

            
page_footer();
        }
        else if (
is_string($options))
        {
            if (
confirm_box(true))
            {
                
$tool->run_tool();
            }
            else
            {
                
confirm_box(false$options'''confirm_body.html'STK_DIR_NAME '/index.' PHP_EXT $plugin->url_arg(true));
            }
        }
        else
        {
            
// The page should have been setup by the tool.  We will exit to prevent the redirect from below.
            
exit;
        }
    }

    
// Should never get here...
    
redirect(append_sid(STK_INDEXfalsetrue$user->session_id));
}
else
{
    
// Output the main page
    
page_header($user->lang['SUPPORT_TOOL_KIT']);

    
// In de event the request category is empty force it to main.
    
if (!$plugin->get_part('c'))
    {
        
$plugin->set_part('c''main');
    }

    
// Category title and desc if available
    
$template->assign_vars(array(
        
'L_TITLE'            => $user->lang['CAT_' strtoupper($plugin->get_part('c'))],
        
'L_TITLE_EXPLAIN'    => isset($user->lang['CAT_' strtoupper($plugin->get_part('c')) . '_EXPLAIN']) ? $user->lang['CAT_' strtoupper($plugin->get_part('c')) . '_EXPLAIN'] : '',
        
'CAT'                => $plugin->get_part('c'),
    ));

    
$template->set_filenames(array(
        
'body' => 'index_body.html',
    ));

    
page_footer();
}
Онлайн: 2
Реклама