Source Interação com XenForo / Sistema de Login com XenForo

Ehrmantraut

Administrador
Registrado
Junho 2, 2017
Mensagens
341
Pontos de reações
369
Website
www.brcheats.net
Bom amigos venho aqui trazer uma classe em php para ajudar a fazer interações com o xenforo, por exemplo obter a url do avatar do usuário, fazer login usando as credenciais do site, obter o id do grupo do usuário e entre outras informações.

XenForo_Class.php:
PHP:
<?php
define('FORUM_ROOT', 'https://website.net/forum/'); // Seu site
define('XF_ROOT', '../.');
class CXenforo
{
    function __construct(){        
        require_once(XF_ROOT . '/library/XenForo/Autoloader.php');    
        XenForo_Autoloader::getInstance()->setupAutoloader(XF_ROOT . '/library');
        XenForo_Application::initialize(XF_ROOT . '/library', XF_ROOT);
        XenForo_Application::set('page_start_time', TIMENOW);
    }
 
    public function sessionUsername(){
   
            $dependencies = new XenForo_Dependencies_Public();
            $dependencies->preLoadData();
            XenForo_Session::startPublicSession();
            $visitor = XenForo_Visitor::getInstance();
            return ($visitor->username);    
    }
    public function xf_userinfo(){
   
        $userModel = XenForo_Model::create('XenForo_Model_User');
        $criteria = array(
        'user_group_id' => array (1,2,3,4,5)
        );
        $options = array(
        'join' => XenForo_Model_User::FETCH_USER_FULL,
        'order' => 'user_id'
        );
    return  $userModel->getModelFromCache('XenForo_Model_User')->getUsers($criteria, $options);    
    }    
   
    public function xf_login($user, $pass){
   
        $db = XenForo_Application::getDb();
        $data = $db->fetchOne('SELECT auth.data FROM xf_user_authenticate AS auth INNER
        JOIN xf_user AS user ON (user.user_id = auth.user_id) WHERE user.username = ?', $user);
        $auth = XenForo_Authentication_Abstract::createDefault();
        $auth->setData($data);
        $check = $auth->authenticate($user, $pass);
        return $check;
    }
 
    public function userGroupID($usuario){
   
        $userModel = XenForo_Model::create('XenForo_Model_User');
        $user = $userModel->getUserByName($usuario);
        return $user['user_group_id'];
    }
    public function getUser_Info($username,$param)
    {
        $userModel = XenForo_Model::create('XenForo_Model_User');
        $user = $userModel->getUserByName($username);
        return $user[$param];    
    }
 
    public function getUser_Avatar($username, $size){
   
        $userModel = XenForo_Model::create('XenForo_Model_User');
        $user = $userModel->getUserByName($username);
        $group = floor($user['user_id'] / 1000);
        if($user[avatar_date] == 0)
            return FORUM_ROOT . "styles/default/xenforo/avatars/avatar_s.png";
        else
            return FORUM_ROOT . XenForo_Application::$externalDataUrl . "/avatars/$size/$group/$user[user_id].jpg?$user[avatar_date]";
    }
}
?>
Como usar? É simples, crie um outro PHP com o nome escolhido, por exemplo: xf_Login.php e nele insira o código:
PHP:
<?php
    include "XenForo_Class.php";
    $user_name = addslashes($_GET['user']);
    $user_pass = addslashes($_GET['pass']);

    $Xenforo = new CXenforo();
    if ($Xenforo->xf_login($user_name, $user_pass))
        echo "LOGIN_OK";
    else
        echo "LOGIN_ERROR";
?>
Para enviar os dados pela URL, no seu loader coloque assim:
Código:
string ResponseString = new WebClient().DownloadString("https://website.net/forum/xf_Login.php?user=" + Username + "&pass=" + Password);
if (ResponseString == "LOGIN_OK") {
    // Sucesso
}
else if (ResponseString == "LOGIN_ERROR") {
   // Usuário ou senha incorretos
}
Ou seja irá ficar assim:
https://website.net/forum/xf_Login.php?user=Rick&pass=123

Créditos:
Rick
 

Enzo004J

Membro
Registrado
Dezembro 15, 2019
Mensagens
13
Pontos de reações
0
Idade
23
require_once(XF_ROOT . '/library/XenForo/Autoloader.php'); oque seria esse altoloader.php? https://prnt.sc/qplqns
desculpe-me por não mostrar a url, mas é um forum de filmes e quero criar um programa para assitir :)
 

Ehrmantraut

Administrador
Registrado
Junho 2, 2017
Mensagens
341
Pontos de reações
369
Website
www.brcheats.net
require_once(XF_ROOT . '/library/XenForo/Autoloader.php'); oque seria esse altoloader.php? https://prnt.sc/qplqns
desculpe-me por não mostrar a url, mas é um forum de filmes e quero criar um programa para assitir :)
É um dos arquivos de library do XenForo, esse arquivo é do XenForo 1, se tu estiver com o XenForo 2+ é tudo diferente, esse tutorial do tópico é somente para o XenForo 1.
 

Enzo004J

Membro
Registrado
Dezembro 15, 2019
Mensagens
13
Pontos de reações
0
Idade
23
ñ, só existe /library/ e só, a versão
XenForo 1.5.24
vai ne?
 

Enzo004J

Membro
Registrado
Dezembro 15, 2019
Mensagens
13
Pontos de reações
0
Idade
23
pode me enviar o xenforo, não consigo encontrar essa versão.
 

BruninhoBK

Membro
Registrado
Janeiro 20, 2020
Mensagens
1
Pontos de reações
0
Idade
33
Para enviar os dados pela URL, no seu loader coloque assim:
Código:
string ResponseString = new WebClient().DownloadString("https://website.net/forum/xf_Login.php?user=" + Username + "&pass=" + Password);
if (ResponseString == "LOGIN_OK") {
    // Sucesso
}
else if (ResponseString == "LOGIN_ERROR") {
   // Usuário ou senha incorretos
}
Exemplo para Python:
Python:
# importing the requests library
import requests

# defining the api-endpoint 
API_ENDPOINT = "https://website.net/forum/xf_Login.php"

# data to be sent to api
data = "?user={s:username}&pass={s:password}".format(
    username = "Exemplo",
    password = "Exemplo"
)

# sending post request and saving response as response object
r = requests.get(url = "{}{}".format(API_ENDPOINT, data))
 
# extracting response text
if r.text == "LOGIN_OK":
    print("Success")
elif r.text == "LOGIN_ERROR":
    print("Fail")
else:
    print("Error")
 

Membros que estão visualizando este tópico (Total: 1, membros: 0, visitantes: 1)

Topo