API em PHP para o protocolo spamd do SpamAssassin

Posted in desenvolvimento on 04/05/2010 by Pedro Padron – 1 Comment

Nos últimos dias tenho trabalhado em um client em PHP para o protocolo spamd, e como ele já implementa todos os comandos do protocolo, resolvi publicar o projeto. Esta é a release 0.1.0, então é de se esperar que ocorram mudanças na API nas próximas versões. Feedback é sempre bem vindo.

Tentei fazer com que o uso dessa biblioteca fosse o mais simples possível, abstraindo as particularidades do protocolo por baixo dos panos, para que você possa fazer coisas como:

require_once 'SpamAssassin/Client.php';
 
$params = array(
    "hostname" => "localhost",
    "port" => "783",
    "user" => "ppadron",
);
 
$sa = new SpamAssassin_Client($params);
 
$message = file_get_contents('/path/to/message/file');
 
var_dump($sa->isSpam($message));
bool(true)

Métodos disponíveis

ping()
Pings the server to test the connection
getSpamReport($message)
Returns a detailed report if the message is spam or null if it’s ham
headers($message)
Processes the message and returns it’s headers (like X-Spam-Flag and X-Spam-Status)
check($message)
Checks if a message is spam with the CHECK protocol command
isSpam($message)
Shortcut to check() method that returns a boolean
process($message)
Processes the message, checks it for spam and returning it’s modified version
symbols($message)
Returns all rules matched by the message
learn($message, $learnType)
Uses SpamAssassin learning feature with TELL. Must be enabled on the server.
report($message)
Report message as spam, both local and remote
revoke($message)
Revokes a message previously reported as spam

Ainda estou escrevendo alguns exemplos de uso, mas por enquanto você pode conferir a documentação da API neste endereço. Também sugiro que dê uma olhada no diretório tests.

Se você tem a intenção de usar essa biblioteca para implementar um filtro de spam em seu servidor de email, talvez seja melhor considerar usar o utilitário spamc ou então a biblioteca em Perl que já vem com o próprio SpamAssassin (que por acaso foi a minha principal fonte de inspiração).

Essa biblioteca se torna mais útil quando você já possui código escrito em PHP e precisa interagir com o SpamAssassin, como no caso de você possuir um webmail em PHP onde deseja que o usuário possa reportar spam a um servidor remoto de SpamAssassin.

O projeto está hospedado no Github, então você pode:

Pretendo disponibilizar esse pacote em um repositório PEAR. Mais novidades em breve…

(English) Packaging Perl CPAN modules as RPM with cpanspec

Posted in sysadmin on 17/02/2010 by Pedro Padron – 1 Comment

Sorry, this entry is only available in English.

Vídeo: Augeas no Locaweb 5o. TechDay

Posted in desenvolvimento on 01/02/2010 by Pedro Padron – Be the first to comment

augeas-logo
Em Novembro de 2009 fiz uma apresentação sobre o Augeas e a sua extensão para o PHP no 5o TechDay da Locaweb, um evento interno com palestras técnicas dos mais variados assuntos. A apresentação foi gravada, então deixo aqui o vídeo para quem quiser assistir (são cerca de 10 minutos). Se quiser acompanhar os slides, eles estão disponíveis em PDF.

Importante: Vale lembrar que o suporte a lentes recursivas já foi implementado na versão 0.7, permitindo editar arquivos de configuração que contenham aninhamento indefinido de diretivas, como no exemplo do httpd.conf citado na palestra.

Este blog possui um novo domínio: ppadron.blog.br

Posted in news on 20/01/2010 by Pedro Padron – Be the first to comment

Comparando com o antigo endereço (ppadron.w3p.com.br), o novo (ppadron.blog.br) é muito mais fácil de lembrar e mais intuitivo. Se você acompanha este blog, por favor atualize seu leitor RSS. De qualquer forma, o endereço antigo continuará funcionando normalmente, graças à diretiva RedirectMatch do Apache. Este é o conteúdo do .htaccess em ppadron.w3p.com.br:

RedirectMatch permanent (.*)$ http://ppadron.blog.br$1

Isso irá redirecionar (301 Moved Permanently) qualquer coisa do antigo endereço para o novo, preservando os links permanentes do Wordpress.

Lançada a extensão Augeas para o PHP

Posted in desenvolvimento on 01/12/2009 by Pedro Padron – Be the first to comment

Há algumas semanas lancei a primeira versão do augeas, minha primeira extensão do PECL. Augeas é uma ferramenta para edição de arquivos de configuração que fornece uma API unificada para diferentes formatos de arquivo. Citando o site oficial do projeto:

Augeas é uma ferramenta de edição de configuração. Faz o parsing de arquivos de configuração em seus formatos nativos e os transforma em uma árvore. Mudanças nas configurações são feitas manipulando essa árvore e salvando-a de volta ao formato nativo do arquivo de configuração.

Logo após o segundo release, informei David Lutterkort a respeito da extensão, que gentilmente adicionou-a na lista de bindings para linguagens de programação no site do Augeas.

Bem, hoje eu lancei a versão 0.4.0 (graças ao Pierre Joye por arrumar a página de upload), que inclui um novo método (Augeas::mv()) e finalmente uma suíte de testes do PHPUnit (AllTests.php).

Os próximos itens na minha lista de coisas a fazer são:

  • Augeas::defVar() como um wrapper para aug_defvar()
  • Augeas::__toString() como um wrapper para aug_print() facilitando o debug
  • documentação completa no formato docbook ao invés desta wiki

Aqui vai um pequeno exemplo do que pode ser feito com o Augeas:

$aug = new Augeas();
 
// vamos desabilitar register_globals!
$aug->set("/files/etc/php.ini/PHP/register_globals", "Off");
 
if (!$aug->save()) {
    die("Você não possui privilégios para editar o arquivo php.ini.");
}

Fácil, não? Nada de regex, nada de fopen, nada de encheção de saco.