[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