#!/usr/bin/env perl # ------------------------------------------------------------------ # made by sputnick in da FreAkY lAb (c) 2009-2011 # gilles.quenot <AT> gmail <DOT> com # # This program is free software; you can redistribute it and/or # modify it under the terms of version 2 of the GNU General Public # License published by the Free Software Foundation. # ------------------------------------------------------------------ # ,,_ # o" )@ # '''' # ------------------------------------------------------------------ # # 2012-04-05 22:55:04.0 +0200 / sputnick <gilles <DOT> quenot <AT> gmail> # Partie récupération des documenst envoyés my $loginURL = "https://subscribe.free.fr/login/login.pl"; # URL de login console Free my $temporisation = 3; # secondes d'attente entre chaque essai de téléchargement des archives use encoding qw[ utf8 ]; use strict; use warnings; use Env qw/HOME DISPLAY/; use WWW::Mechanize; $| = 1; my ($message, $num, $currentMsgId, $currentFichier, $currentFichierNew, @newUrl, @docArr, @arrPresent, %h); my $dieMessage = $0 . "requiert que le fichier ~/.config/cups2freefax/cups2freefaxrc ou /etc/cups2freefax/cups2freefaxrc soit renseigné avec les logins et password de l'interface Free."; my $BDD = "$HOME/.config/cups2freefax/docs.db"; my $url = "placeholder"; # Si on est en interactif, on est donc en CLI. # Si c'est bien le cas, on affiche sur la sortie standard, # sinon via zenity. use constant IS_TERMINAL => -t STDIN; sub printdie { if (IS_TERMINAL) { print STDERR "@_\n"; exit(1); } else { $message = "@_"; `DISPLAY=$DISPLAY zenity --error --title fax4free --text "$message"`; exit(1); } } sub printout { if (IS_TERMINAL) { print "@_\n"; } else { $message = "@_"; `DISPLAY=$DISPLAY echo "message:$message" | zenity --notification --listen 2>/dev/null`; } } printdie("$dieMessage\n") unless -s "$HOME/.config/cups2freefax/cups2freefaxrc" || -s "/etc/cups2freefax/cups2freefaxrc"; my @arr = `cat /etc/cups2freefax/cups2freefaxrc $HOME/.config/cups2freefax/cups2freefaxrc`; my (%c2ff, $a, $b); for (@arr) { if (/=/ and !/(^#|^$)/) { chomp; ($a, $b) = split /=/; $c2ff{$a}=$b; } } exit(0) if $c2ff{'cups2freefax_faxs_store'} == 0; printdie($dieMessage) unless $c2ff{'password'} && $c2ff{'login'}; $c2ff{'cups2freefax_hide_fax_number'} = 'Y' if $c2ff{'cups2freefax_hide_fax_number'} eq 'yes'; $c2ff{'cups2freefax_hide_fax_number'} = 'off' if $c2ff{'cups2freefax_hide_fax_number'} eq 'no'; $c2ff{'cups2freefax_email_confirmation'} = 1 if $c2ff{'cups2freefax_email_confirmation'} eq 'yes'; $c2ff{'cups2freefax_email_confirmation'} = 'off' if $c2ff{'cups2freefax_email_confirmation'} eq 'no'; mkdir("$HOME/.config/cups2freefax/envoyes"); sleep($temporisation*2); my $m = WWW::Mechanize->new( autocheck => 1 ); $m->agent_alias( 'Linux Mozilla' ); $m->get($loginURL); $m->submit_form( fields => { login => $c2ff{'login'}, pass => $c2ff{'password'}, ok => "Connexion" } ); my $authreply = $m->content( format => 'text' ); printdie("Authentification erronée\n") if $authreply =~ /Identifiant incorrect/i; $m->follow_link( url_regex => qr/menu_telephonie\.pl/i ); $m->follow_link( url_regex => qr/tel_fax\.pl/i ); @newUrl = $m->find_all_links( url_regex => qr/tel_dlfax\.pl\?id=\w+\&idt=\w+\&fichier=.*\&msg=\w+&type=tx/ ); foreach my $urls (@newUrl) { $url = $urls->url_abs; for (split(/&/, $url)) { if ($_ =~ /^fichier=/) { ($_, $currentFichier) = split(/=/); } if ($_ =~ /^msg=/) { ($_, $currentMsgId) = split(/=/); } } # On utilise une BDD à plat pour y stocker les couples id/noms # afin de ne pas ecraser un fichier deja présent et afin # d'etre sur de recupérer le bon fichier au bon moment # Lecture BDD if (-s $BDD) { open my $openHandle, "<", $BDD or die "$0: $BDD: [$!]\n"; @arrPresent = <$openHandle>; foreach (@arrPresent) { ($a, $b) = split; $h{$a} = $b; } close($openHandle); } # Ecriture BDD if (defined($h{$currentMsgId})) { printout("$currentFichier déjà récupéré"); } else { # Si le fichier existe déjà, on incremente # le nom de fichier avec .N (comme wget) if (-s "$HOME/.config/cups2freefax/envoyes/$currentFichier") { @docArr = glob("$HOME/.config/cups2freefax/envoyes/$currentFichier*"); ($num = $docArr[-1]) =~ s/.*\.//; if ($#docArr > 0 && $num =~ /^[0-9]+/) { $num =~ s/.*\.//; $currentFichierNew = $currentFichier . "." . ++$num; } else { $currentFichierNew = $currentFichier . ".1"; } } else { $currentFichierNew = $currentFichier; } $m->get( $url, ':content_file' => "$HOME/.config/cups2freefax/envoyes/$currentFichierNew" ) or printdie("Il n'a pas été possible de récupérer $currentFichier dans l'interface web de Free...\n"); open my $writeHandle, ">>", $BDD or die "$0: $BDD: [$!]\n"; print $writeHandle "$currentMsgId $currentFichier\n"; close($writeHandle); if (-s "$HOME/.config/cups2freefax/envoyes/$currentFichierNew") { printout("$currentFichier récupéré\n"); } sleep($temporisation); } }