Sophie

Sophie

distrib > Mageia > 5 > i586 > media > core-release > by-pkgid > 3947d33ac7116f5a5709f826f368f8ff > files > 1

cups2freefax-201205092342-6.mga5.i586.rpm

#!/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);
    }
}