Je configure une instance Discourse pour une organisation qui utilise actuellement une liste de diffusion. Nous avons importé les courriels (20 000 messages) sans problème majeur, mais il y a beaucoup de messages où les adresses e-mail des utilisateurs apparaissent en raison des citations, des signatures, etc.
Je suis assez compétent avec la ligne de commande rake/rails, mais je peine à comprendre comment supprimer ces adresses e-mail. J’ai essayé diverses formes de cette commande (avec ou sans regex), mais elle ne trouve jamais aucun message :
Voici un petit script écrit pour nous par @pfaffman. Les parties approximatives sont celles que j’ai modifiées. Il comporte quelques fonctionnalités supplémentaires que vous n’avez peut-être pas besoin, par exemple une date de coupure pour qu’il ne supprime les adresses e-mail que des publications antérieures à cette date.
J’ai trouvé qu’il valait mieux remplacer les adresses par ‘email@removed.com’ plutôt que de les supprimer entièrement. Je ne me souviens plus pourquoi — je pense que cela fonctionnait mieux avec les parenthèses environnantes.
def remove_email_addresses
n=0
test_mode=false
dt=DateTime.new(2019, 1, 1, 0, 0, 0)
no_emails="email@removed."
Post.where("raw like '%@%'").find_each do |post|
sleep 0.1
if post.created_at < dt
post.raw.gsub!(/[a-z0-9+-_.]+@[a-z0-9+-]+[. ,;\\]/i,no_emails)
if test_mode
puts post.raw
sleep 10
end
post.save unless test_mode
post.rebake! unless test_mode
puts "saved"
n+=1
puts n.to_s
else
puts "nouvelle publication, laissée telle quelle"
end
end
nil
end
> remove_email_addresses