使用php添加/更新名单作为管理员

时间:2014-03-12 08:46:10

标签: xmpp admin ejabberd

根据我项目的性质,我想使用一些脚本(php)添加/更新名册信息。我想以同样的方式做到这一点,它是由ejabberd的web管理界面手动完成的。但我想自动化这个。有没有办法做到这一点?

对于如何实现这一目标的任何建议都非常感谢。提前谢谢!

2 个答案:

答案 0 :(得分:0)

如果您使用的是Openfire,您可以使用Userservice插件,它允许您通过HTTP请求管理用户名单

答案 1 :(得分:0)

<?php
/**
 * Created by JetBrains PhpStorm.
 * User: Abel Espinosa Cañive
 * Date: 8/5/15
 * Time: 7:43 PM
 * To change this template use File | Settings | File Templates.
 */
/*
ERROR CODE:
0           :Success
Other Number:Error
*/
define ( "MAX_SIZE", "5120" ); // 5MB MAX file size
define ( "DOMAIN", "my.domain.com" );

class eJabberedPlugin
{
    var $display_debug_info;

//activa la opcion de debugueo del XMPP
function eJabberedPlugin($v_display_debug_info=false)
{
    $this->display_debug_info = $v_display_debug_info;
}

//Crea un nuevo usuario
//$UserLogin    : usuario que se creará
//$UserPass     : contraseña para el usuario nuevo
function createNewUserREST($UserLogin,$UserPass)
{
    $url = "http://DOMAIN:5280/rest/";
    $request = "register $UserLogin DOMAIN $UserPass";
    $response = $this->sendRESTRequest($url, $request);
    return $response;
}

//Adiciona Amigo1 a Amigo2 y viceversa (forzado)
//$user1    : usuario que desea agregar a $user2
//$user2    : usuario que desea agregar a $user1
//$nick_user1   : nick que le dará el $user2 al $user1 en su roster
//$nick_user2   : nick que le dará el $user1 al $user2 en su roster
//$group1   : Grupo en el roster de $user1 que se agregará al $user2
//$group2   : Grupo en el roster de $user2 que se agregará al $user1
function addFriendREST($user1,$user2,$nick_user1="",$nick_user2="",$group1="Friends",$group2="Friends")
{
    $url = "http://DOMAIN:5280/rest/";
    $exist_user1 = $this->checkUser($user1);
    $exist_user2 = $this->checkUser($user2);
    if($exist_user1==0 && $exist_user2==0)
    {
        $request1 = "add_rosteritem $user1 DOMAIN $user2 DOMAIN $nick_user2 $group1 both";
        $request2 = "add_rosteritem $user2 DOMAIN $user1 DOMAIN $nick_user1 $group2 both";
        $response1 = $this->sendRESTRequest($url, $request1);
        $response2 = $this->sendRESTRequest($url, $request2);

    }
    else
    {
        $response1 = $exist_user1;
        $response2 = $exist_user2;
    }
    $response_array = [$response1,$response2];
    return $response_array;
}

//Elimina un usuario del servidor
//$username : Usuario que se eliminará
function deleteUserREST($username)
{
    $url = "http://DOMAIN:5280/rest/";
    $request = "unregister $username DOMAIN";
    $response = $this->sendRESTRequest($url, $request);
    return $response;
}

//Agrega o cambia un avatar a un usuario dado
//$username : usuario que se modificará
//$photo_url    : archivo de la imagen nueva
function addAvatarREST($username,$photo_url)
{
    $url = "http://DOMAIN:5280/rest/";

    $raw_file = file_get_contents($photo_url["tmp_name"]);
    $photo = base64_encode($raw_file);
    $request = "set_vcard2 $username DOMAIN PHOTO BINVAL $photo";
    $response = $this->sendRESTRequest($url, $request);
    return $response;
}

//Verifica si el usuario existe en el servidor
//$username : Usuario a verificar
function checkUser($username)
{
    $url = "http://DOMAIN:5280/rest/";
    $request = "check_account $username DOMAIN";
    $response = $this->sendRESTRequest($url, $request);
    return $response;
}

//Obtiene una lista de todos los usuarios registrados en el servidor
function allUsers()
{
    $url = "http://DOMAIN:5280/rest/";
    $request = "registered_users DOMAIN";
    $response = $this->sendRESTRequest($url, $request);
    $arr = str_split($response);
    $collecting = "";
    $result = [];
    for ($i = 0; $i < count($arr); $i++) {
        if (ctype_alnum($arr[$i])==true) {
            $collecting.=$arr[$i];
            if ($i==count($arr)-1) {
                array_push($result,$collecting);
            }
        }
        else
        {
            array_push($result,$collecting);
            $collecting = "";
        }
    }
    return $result;
}

//Ejecuta las consultas con el servidor
//$url  : Direccion del servidor REST
//$xml  : Consulta
function sendRESTRequest ($url, $xml) {
    $context = stream_context_create(
        array('http' =>
        array(
            'method' => "POST",
            'header' => "Content-Length: ".strlen($xml),
            'content' => $xml
        )
        )
    );
    $file = file_get_contents($url, false, $context);
    return "$file";
}

//Obtiene la extension del archivo adjunto
//$str  : Nombre del archivo que se verifica
function getExtension($str) {
    $i = strrpos ( $str, "." );
    if (! $i) {
        return "";
    }
    $l = strlen ( $str ) - $i;
    $ext = substr ( $str, $i + 1, $l );
    return $ext;
}
}
//*****FIN DE LA CLASE*****//

// Crea una instancia de la clase eJabberedPlugin
$obj = new eJabberedPlugin();
// Ahora comenzamos a usar la clase de arriba :)

//Crear nuevo usuario
if(isset($_POST['action']) && $_POST['action']=='newUser')
{
    if(isset($_POST['user']) && isset($_POST['pass']))
    {
        $result = $obj->createNewUserREST($_POST['user'],$_POST['pass']);
        if($result==0)
        {
            echo "created ok";
        }
        else
        {
            echo "not created, error:$result";
        }
    }
}
//Eliminar usuario
elseif(isset($_POST['action']) && $_POST['action']=='delUser')
{
    if(isset($_POST['user']))
    {

    $result = $obj->deleteUserREST($_POST['user']);
    if($result==0)
    {
        echo "deleted ok";
    }
    else
    {
        echo "not deleted, error:$result";
    }
}
}
//Agregar amigos
elseif(isset($_POST['action']) && $_POST['action']=='addFriend')
{
    if(isset($_POST['userFriend1']) && isset($_POST['userFriend2'])  && isset($_POST['nickUser1'])  && isset($_POST['nickUser2'])  && isset($_POST['groupUser1'])  && isset($_POST['groupUser2']) )
    {
        $result = $obj->addFriendREST($_POST['userFriend1'],$_POST['userFriend2'],$_POST['nickUser1'],$_POST['nickUser2'],$_POST['groupUser1'],$_POST['groupUser2']);
        if(count($result)==2 && $result[0]==0 && $result[1]==0)
        {
            echo "added ok";
        }
        else
        {
            echo "not added, error:<br>";
            if($result[0]==1 && $result[1]==0)
            {
                echo "Usuario ".$_POST['userFriend1'].": Usuario no registrado.<br>";
                echo "Usuario ".$_POST['userFriend2'].": ".$result[1]." errores<br>";
            }
            elseif($result[0]==0 && $result[1]==1)
            {
                echo "Usuario ".$_POST['userFriend1'].": ".$result[0]." errores<br>";
                echo "Usuario ".$_POST['userFriend2'].": Usuario no registrado.<br>";
            }
            else
            {
                echo "Usuarios ".$_POST['userFriend1']." y ".$_POST['userFriend2']." no registrados.<br>";
            }
        }
    }
}
//Agregar avatar
elseif(isset($_POST['action']) && $_POST['action']=='addAvatar')
{
    if(isset($_POST['user']) && isset($_FILES['avatar']))
    {
        $filename = stripslashes ( $_FILES ["avatar"] ["name"] );
        $size = filesize ( $_FILES ["avatar"] ["tmp_name"]);
        // Convert extension into a lower case format
        $ext = $obj->getExtension ( $filename );
        $ext = strtolower ( $ext );
        // File extension check
        // Valid image formats
        $valid_formats = array ("jpg","png","gif","bmp","jpeg");
        if (in_array ( $ext, $valid_formats )) {
            // File size check
            if ($size < (MAX_SIZE * 1024)) {
                $result = $obj->addAvatarREST($_POST['user'],$_FILES['avatar']);
                if($result==0)
                {
                    echo "added ok";
                }
                else
                {
                    echo "not added, error:$result";
                }
            }
        }
    }
}
?>