• This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn more.

Add-on Bridge with Xenforo

#1
Hi,

We are preparing our website to move from vBulletin to Xenforo
In vBulletin we are using upload script which is linked with the forum (users table only), the benefit from this bridge: the user can login to the upload script using his forum username and password.

This is the file that we are using to link the upload script with vBulletin users table.
Is it possible to modify it to link the same script with Xenforo?

It is only one file:

Code:
<?php

//no for directly open
if (!defined('IN_COMMON'))
{
    exit();
}

//
//Path of config file in vb
//
if(!defined('SCRIPT_CONFIG_PATH'))
{
    define('SCRIPT_CONFIG_PATH', '/includes/config.php');
}

function kleeja_auth_login ($name, $pass, $hashed = false, $expire, $loginadm = false, $return_name = false)
{
    global $lang, $config, $usrcp, $userinfo;
    global $script_path, $script_cp1256, $script_srv, $script_db, $script_user, $script_pass, $script_prefix, $script_db_charset;

    if(isset($script_path))
    {
        //check for last slash
        if(isset($script_path[strlen($script_path)]) && $script_path[strlen($script_path)] == '/')
        {
            $script_path = substr($script_path, 0, strlen($script_path));
        }

        //get some useful data from vb config file
        if(file_exists(PATH .  $script_path . SCRIPT_CONFIG_PATH))
        {
            require_once (PATH .  $script_path . SCRIPT_CONFIG_PATH);

            //
            //get config from config file
            //
            $forum_srv    = $config['MasterServer']['servername'];
            $forum_db    = $config['Database']['dbname'];
            $forum_user    = $config['MasterServer']['username'];
            $forum_pass    = $config['MasterServer']['password'];
            $forum_prefix= $config['Database']['tableprefix'];
            if($config['MasterServer']['port'] != 3306)
            {
                $forum_srv .= ':' . $config['MasterServer']['port'];
            }

            //some people change their db charset
            if(isset($config['Mysqli']['charset']))
            {
                $forum_db_charset = $config['Mysqli']['charset'];
            }
        }
        else
        {
            big_error('Forum path is not correct', sprintf($lang['SCRIPT_AUTH_PATH_WRONG'], 'Vbulletin'));
        }
    }
    else
    {
        //
        //custom config data
        //
        $forum_srv    = $script_srv;
        $forum_db    = $script_db;
        $forum_user    = $script_user;
        $forum_pass    = $script_pass;
        $forum_prefix = $script_prefix;

        //some people change their db charset
        if(isset($script_db_charset))
        {
            $forum_db_charset = $script_db_charset;
        }
    }

    if(empty($forum_srv) || empty($forum_user) || empty($forum_db))
    {
        return;
    }

    $SQLVB    = new SSQL($forum_srv, $forum_user, $forum_pass, $forum_db, true);


    if(isset($forum_db_charset))
    {    //config
        $SQLVB->set_names($forum_db_charset);
    }
    else //auto
    {
        $SQLVB->set_names('latin1');
    }


    unset($forum_pass); // We do not need this any longer

    $pass = empty($script_cp1256) || !$script_cp1256 ? $pass : $usrcp->kleeja_utf8($pass, false);
    $name = empty($script_cp1256) || !$script_cp1256 || $hashed ? $name : $usrcp->kleeja_utf8($name, false);
   
    $query_salt = array(
                        'SELECT'    => $hashed ? '*' : 'salt',
                        'FROM'        => "`{$forum_prefix}user`",
                    );

    $query_salt['WHERE'] = $hashed ? "userid=" . intval($name) . " AND password='" . $SQLVB->real_escape($pass) . "' AND usergroupid != '8'" :  "username='" . $SQLVB->real_escape($name) . "' AND usergroupid != '8'";
   
    //if return only name let's ignore the obove
    if($return_name)
    {
        $query_salt['SELECT']    = "username";
        $query_salt['WHERE']    = "userid=" . intval($name);
    }

    ($hook = kleeja_run_hook('qr_select_usrdata_vb_usr_class')) ? eval($hook) : null; //run hook               
    $result_salt = $SQLVB->build($query_salt);

    if ($SQLVB->num_rows($result_salt) > 0)
    {
        while($row1=$SQLVB->fetch_array($result_salt))
        {
            if($return_name)
            {
                return empty($script_cp1256) || !$script_cp1256 ? $row1['username'] : $usrcp->kleeja_utf8($row1['username']);
            }

            if(!$hashed)
            {
                $pass = md5(md5($pass) . $row1['salt']);  // without normal md5

                $query    = array(
                                'SELECT'    => '*',
                                'FROM'    => "`{$forum_prefix}user`",
                                'WHERE'    => "username='" . $SQLVB->real_escape($name) . "' AND password='" . $SQLVB->real_escape($pass) . "' AND usergroupid != '8'"
                        );
       
                $result = $SQLVB->build($query);

                if ($SQLVB->num_rows($result) != 0)
                {
                    while($row=$SQLVB->fetch_array($result))
                    {
                        if(!$loginadm)
                        {
                            define('USER_ID', $row['userid']);
                            define('GROUP_ID', ($row['usergroupid'] == 6 ? 1 : 3));
                            define('USER_NAME', empty($script_cp1256) || !$script_cp1256 ? $row['username'] : $usrcp->kleeja_utf8($row['username']));
                            define('USER_MAIL', $row['email']);
                            define('USER_ADMIN', ($row['usergroupid'] == 6 ? 1 : 0));
                        }

                        //define('LAST_VISIT',$row['last_visit']);

                        $userinfo = $row;
                        $userinfo['group_id'] =  ($row['usergroupid'] == 6 ? 1 : 3);
                        $user_y = kleeja_base64_encode(serialize(array('id'=>$row['userid'], 'name'=>USER_NAME, 'mail'=>$row['email'], 'last_visit'=>time())));
                       
                        $hash_key_expire = sha1(md5($config['h_key'] . $row['password']) .  $expire);

                        if(!$loginadm)
                        {
                            $usrcp->kleeja_set_cookie('ulogu', $usrcp->en_de_crypt(
                                                    $row['userid'] . '|' .
                                                    $row['password'] . '|' .
                                                    $expire . '|' .
                                                    $hash_key_expire . '|' .
                                                    ($row['usergroupid'] == 6 ? 1 : 3) . '|' .
                                                    $user_y
                                                ), $expire);
                        }

                        ($hook = kleeja_run_hook('qr_while_usrdata_vb_usr_class')) ? eval($hook) : null; //run hook
                    }
                    $SQLVB->freeresult($result);
                }#nums_sql2
                else
                {
                    $SQLVB->close();
                    return false;
                }
            }
            else
            {
                if(!$loginadm)
                {
                    define('USER_ID', $row1['userid']);
                    define('USER_NAME', empty($script_cp1256) || !$script_cp1256 ? $row1['username'] : $usrcp->kleeja_utf8($row1['username']));
                    define('USER_MAIL',$row1['email']);
                    define('USER_ADMIN',($row1['usergroupid'] == 6) ? 1 : 0);
                    define('GROUP_ID',($row1['usergroupid'] == 6) ? 1 : 3);
                    $userinfo = $row1;
                    $userinfo['group_id'] = ($row1['usergroupid'] == 6 ? 1 : 3);
                }
            }
        }#whil1

        $SQLVB->freeresult($result_salt);

        unset($pass);
        $SQLVB->close();

        return true;
    }
    else
    {
        $SQLVB->close();
        return false;
    }
}

function kleeja_auth_username ($user_id)
{
    return kleeja_auth_login ($user_id, false, true, 0, false, true);
}