[FUG-BR] Jabber Users List

Renato Botelho garga em FreeBSD.org
Seg Ago 29 14:50:43 BRT 2005


On Mon, Aug 29, 2005 at 02:35:05PM -0300, Gian Depiné wrote:
> Olá Pessoal
> 
> Instalei aqui na empresa o jabberd1.4, está rodando direitinho, mas
> tem um detalhe que está faltando e que me parece essencial:
> 
> O que eu preciso é uma forma de importar, no programa cliente, a lista
> de contatos completa dos funcionários da empresa.

Fiz um cgi pra executar essa tarefa, porem, no meu caso eh o jabberd
2.x.

Aqui vai a copia do script, pode ser que te ajude, nao conheco a
estrutura de database do 1.x.

#!/usr/local/bin/perl
#
# jabber_update.pl
# 
# CGI utilizado para adicionar todos os usuários da sua rede
# jabberd2 a lista de contato de todos os outros e remover da
# lista usuarios que foram excluido mantendo assim a lista 
# sempre atualizada
#
# Autor: Renato Botelho <rbgarga em gmail.com>
#
# Data: 22/06/2005
#

use DBI;
use CGI qw/:standard/;
use strict;

print header,
      start_html('Atualizar a base do Jabber'),
      h1('Atualizar a base do Jabber'),
      start_form,
      "Senha: ",password_field('senha','',20,80),
      checkbox('cb_reiniciar','','ON','Reiniciar o Jabber'),p,
      submit('submit','Executar'),
      end_form,
      hr;

if (param()) {
  if (param('senha') ne 'SENHA') {

    print "Senha Inválida",br;

  } else {
    my $fez_algo = 0;

    my $dominio  = 'jabber.SEU_DOM.com.br';
    my $group    = 'GRUPO_PADRAO';
    
    my $database = 'MYSQL_DATABASE';
    my $hostname = 'MYSQL_HOST';
    my $port     = '3306';
    my $user     = 'MYSQL_USER';
    my $password = 'MYSQL_PASS';
    
    my $dsn = "DBI:mysql:database=$database;host=$hostname;port=$port";
    my $dbh = DBI->connect($dsn, $user, $password) || die "Erro ao conectar no mysql";

    my $sql = '';
    
    my @users = ();
    my @usersaux = ();
    
    $sql = "select cast(username as char) as username from authreg order by username";

    my $sth = $dbh->prepare($sql);

    $sth->execute;
    while (my $ref = $sth->fetchrow_hashref()) {
      push(@users, "$ref->{'username'}\@$dominio");
    }
    $sth->finish;
    
    push(@usersaux, @users);
    
    foreach my $user ( @users ) {
      my @users2add = ();
    
      $sql = 'select * from `roster-items` ' .
             'where cast(`collection-owner` as char) = ' . "'$user' and " .
             "      cast(jid as char) like '%\@$dominio'" . 
             'order by `collection-owner`,jid';

      $sth = $dbh->prepare($sql);

      $sth->execute;
      while (my $ref = $sth->fetchrow_hashref()) {
        push(@users2add, $ref->{'jid'});
      }
      $sth->finish;
    
      foreach my $useraux ( @usersaux ) {
        if (!grep(/^$useraux$/, @users2add) && ($user ne $useraux)) {
          my $nome = ucfirst($useraux);
          $nome =~ s/\@.*$//g;
          $sql = 'insert into `roster-items` (`collection-owner`, jid, name, `to`, `from`, ask) values ' .
                 "('$user', '$useraux', '$nome', 1, 1, 0)";

          $sth = $dbh->prepare($sql);
          $sth->execute;
          $sth->finish;

          $sql = 'insert into `roster-groups` (`collection-owner`, jid, `group`) values ' .
                 "('$user', '$useraux', '$group')";

          $sth = $dbh->prepare($sql);
          $sth->execute;
          $sth->finish;

          $fez_algo = 1 if $fez_algo == 0;

          print "Adicionado: $user -> $useraux",br;
        }
      }
    
      foreach my $useraux ( @users2add ) {
        if (!grep(/^$useraux$/, @users) && ($user ne $useraux)) {
          $sql = 'delete from `roster-groups` where cast(`collection-owner` as char) = ' . 
                 "'$user' and cast(jid as char) = '$useraux'";

          $sth = $dbh->prepare($sql);
          $sth->execute;
          $sth->finish;

          $sql = 'delete from `roster-items` where cast(`collection-owner` as char) = ' . 
                 "'$user' and cast(jid as char) = '$useraux'";

          $sth = $dbh->prepare($sql);
          $sth->execute;
          $sth->finish;

          $fez_algo = 1 if $fez_algo == 0;

          print "Removido: $user -> $useraux",br;
        }
      }
    }
    
    $dbh->disconnect;

    if ($fez_algo) {
      if (param('cb_reiniciar') eq 'ON') {
        my @comandos = ('jabber-pyicq-transport.sh','jabber-pymsn-transport.sh','jabberd.sh');
        my $basedir  = '/usr/local/etc/rc.d';
        print "Parando o Jabber...",br; 
        foreach my $comando ( @comandos ) {
          system("/usr/local/bin/sudo $basedir/$comando stop");
        }
        print "Iniciando o Jabber...",br; 
        foreach my $comando ( @comandos ) {
          system("/usr/local/bin/sudo $basedir/$comando start");
        }
        print br;
      }
      print "Atualização executada com sucesso!!!",br;
    } else {
      print "Base de dados correta. Não e necessário atualizar nada.",br;
    }
  } 
}

[]s
-- 
Renato Botelho <garga @ FreeBSD.org>
               <freebsd @ galle.com.br>
GnuPG Key: http://www.FreeBSD.org/~garga/pubkey.asc

"Laughter is the closest distance between two people."
		-- Victor Borge

_______________________________________________
Freebsd mailing list
Freebsd em fug.com.br
http://mail.fug.com.br/mailman/listinfo/freebsd_fug.com.br




Mais detalhes sobre a lista de discussão freebsd