Problema grave no noosfero: sumiço de usuários???

Daniel Tygel dtygel at gmail.com
Tue Dec 25 13:17:00 BRST 2012


Olá comunidade noosfero,

     Nesta mensagem corrijo o comando grep, acrescido de um script php,
e dou informações finais sobre os estragos gerados pelo script de
destruição de usuários não ativados em 72 horas. Gostaria que isso
servisse de reflexão à comunidade e ao time core de desenvolvimento do
Noosfero.

    O comando grep que mandei na última mensagem ainda não era
suficiente para identificar as pessoas que se cadastram (signup com
sucesso na verificação de senha, termos de uso, e outros campos
obrigatórios). A coisa ficou um pouco mais complexa porque tem vezes que
o noosfero faz um 302 (para cirandas.net) e tem outras em que faz um
200. Percebi que o que identifica que o registro foi feito com sucesso é
a linha "Sent mail to" dentro do bloco do signup nos logs. Além disso, a
ordem dos parâmetros enviados é variável, portanto não dá para fazer o
cut no bash, mas sim um script à posteriori (fiz em php) que lê os
elementos do hash de Parameters e gera o csv. Assim, o comando grep
fica:

zgrep -B 5 'Sent mail to' production.log* | grep -A 1 'Processing
AccountController#signup' | grep Parameters | cut -d ':'
--output-delimiter ',' -f 3 > ~/fez_registro_bruto.csv

Caso interesse a alguém de vocês, envio ao final da mensagem o script
PHP que fiz para gerar o CSV limpo com os campos nome, login e e-mail a
partir do "parameters" resgatado pelo comando acima e salvo no arquivo
"fez_registro_bruto.csv".

Gostaria também de partilhar com vocês as informações que consegui obter
sobre o tamanho do estrago do bug, que considero bastante grande. Isso é
para refletirmos antes de inserir uma peça de código que elimina
usuários por qualquer razão que seja. Na minha opinião, houve descuido
da equipe de core ao deixar um código agressivo destes entrar no
noosfero.

Tamanho do estrago gerado no CIRANDAS por causa do script de eliminação
de usuários não ativados em 72 horas:

* 147 pessoas perderam suas contas e as recriaram, e hoje estas contas
novas estão em funcionamento. Destas, por volta de 100 pessoas tinham
feito login na conta anterior e perderam o que tinham feito (ou seja,
perderam conteúdo gerado e depois refizeram sua conta!!). Nem sei como
lidar com estes usuários: eles perderam suas contas, tinham colocado
conteúdo, e ao perceberem que sua conta não existia mais, eles fizeram
uma nova, que permaneceu viva. Ainda temos que decidir se enviaremos
e-mail a estes ou não.

* 35 pessoas que perderam suas contas tinham feito login (ou seja,
criaram conteúdo) e não as recriaram depois (!!). É o estrago mais
drástico que recebemos. Teremos que enviar um e-mail pedindo desculpas,
recriando a conta, e reenviando um link de ativação. Destas 35 pessoas,
há umas 5 que criaram duas vezes sua conta, e a perderam de novo!
Imaginem a impressão que estes usuários estão tendo sobre a segurança de
postar conteúdo no cirandas!!

* Apenas 48 usuários que perderam suas contas não tinham feito login, ou
seja, não tinham ativado sua conta. E mais: destes, apenas um parecia
ser um scam: os outros eram usuários reais tentando criar uma conta
(!!). Isso demonstra como este código de apagar contas em 72 horas é
totalmente inadequado, para não usar termo pior. Estas pessoas não devem
ter recebido o e-mail de ativação, ou ele caiu em spam, ou estava em
inglês, ou não entenderam a mensagem (perfil de nosso público do
Cirandas). Vamos reativar estas contas e enviar um novo link de
ativação, em português.


         Abraços,

                     daniel tygel
----------
Script PHP para limpar o arquivo fez_registro_bruto.csv:

<?php
$f = fopen("fez_registro_bruto.csv", "r");
$g = fopen("fez_registro.csv","w");
fwrite($g,'nome,login,email'.chr(10));
while (($d = fgets($f)) !== FALSE) {
	$pars = json_decode(str_replace('=>',':',trim($d)));
	$txt =
$pars->profile_data->name.','.$pars->user->login.','.$pars->user->email;
	fwrite($g,$txt.chr(10));
}
fclose($f);
fclose($g);
?>



Em Seg, 2012-12-24 às 19:35 -0200, Daniel Tygel escreveu:

> Olá Aurium e demais,
> 
>    Acabo de ver que nosso grep tava melhor do que o que o Aurium
> propôs. Explico:
> 
>    O grep que Aurium colocou insere todas as tentativas de registro,
> independente de ter sido validado o e-mail e outros campos
> obrigatórios. O que percebemos (Bráulio e eu) é que apenas as
> tentativas de registro que resultam em 302 (desvio para cirandas.net)
> são as que o registro se consolidou. Tem um monte de tentativas que
> resultam em 200, e significam que algum campo está com problemas.
> 
>     Foi por isso que nosso grep para identificar quem se registrou
> (i.e. fez signup) tinha o seguinte formato:
> 
> zgrep -B 10 302.*cirandas\.net/account/signup production.log* | grep
> Parameters | cut -d '"' --output-delimiter ',' -f 14,52,56 | sort|uniq
> 
> 
>     É por aí?
> 
>            Abraços,
> 
>                   daniel
> 
> Em Sex, 2012-12-21 às 15:38 -0300, Aurelio A Heckert escreveu: 
> 
> > Em Sex 21 Dez 2012 14:39:56 BRT, Bráulio Bhavamitra escreveu:
> > > Oi Aurium,
> > >
> > > Desconfiamos do problema justamente em agosto, mas só fomos investigar
> > > mesmo nesta semana.
> > 
> > Puts! Nem considerei essa possibilidade pq achei que vc já teria 
> > atualizado,
> > mas beleza, então já está descoberto.
> > 
> > > Depois da migração do CIRANDAS, o problema aparentemente não
> > > aconteceu mais, ainda precisamos investigar melhor sua causa,
> > > mas é difícil uma vez que os logs são pouco detalhes e os
> > > dados foram apagados.
> > 
> > Nos logs dá para identificar os registros feitos. Dê um saque nesse 
> > exemplo:
> > 
> > Coleta submits do signup:
> > grep -A9 'Processing AccountController#signup .* \[POST\]' 
> > production.log > /tmp/signups.log
> > 
> > Uma coisa legal é identificar as origens:
> > echo $(cat /tmp/signups.log) | sed 's/--/\n/g' |
> > sed -r 's/.*for ([0-9.]+) .*"login"=>"([^"]+)".*"email"=>"([^"]+)".*/\1 
> > \2 \3/g' |
> > while read ip login email; do
> >   echo "http://cirandas.net/$login $email -> $(geoiplookup $ip)"
> > done
> > 
> > http://cirandas.net/ze jose em hotmail.com -> GeoIP Country Edition: GB, 
> > United Kingdom
> > http://cirandas.net/nick nick em gmail.com -> GeoIP Country Edition: US, 
> > United States
> > 
> > Login e e-mail já deve ajudar. Bastaria mandar e-mail de convite pra 
> > esse pessoal,
> > mas você também pode extrair o nome e outros campos que vão no post.  
> > ;-)
> > 
> > > abraços,
> > > bráulio
> > 
> > Abraço!
> > 
> > --
> > 
> > *Aurélio A. Heckert (aka Aurium)*
> > http://softwarelivre.org/aurium
> > *COLIVRE — Coop. de Tecnologias Livres*
> > http://colivre.coop.br
> > 
> > *Inkscape* — Desenhe Livremente
> > http://inkscapeBrasil.org
> > 
> > _______________________________________________
> > Noosfero-br mailing list
> > Noosfero-br em listas.softwarelivre.org
> > http://listas.softwarelivre.org/cgi-bin/mailman/listinfo/noosfero-br
> 
> 


-------------- Pr�xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.softwarelivre.org/pipermail/noosfero-br/attachments/20121225/58483f20/attachment.html>


More information about the Noosfero-br mailing list