Blame src/convert-mozilla-cookies

Packit 8f70b4
#!/usr/bin/perl
Packit 8f70b4
# Copyright (c) 2001,2005,2007,2010 Alexander V. Lukyanov <lav@yars.free.net>
Packit 8f70b4
# See COPYING file (GNU GPL) for complete license.
Packit 8f70b4
Packit 8f70b4
# This script converts mozilla-style cookies to lftp set commands.
Packit 8f70b4
Packit 8f70b4
use strict;
Packit 8f70b4
use DBI;
Packit 8f70b4
Packit 8f70b4
my $file=$ARGV[0] if defined $ARGV[0];
Packit 8f70b4
$file=qx{
Packit 8f70b4
	ls -t \$HOME/.netscape/cookies \\
Packit 8f70b4
	      `find \$HOME/.mozilla -name cookies.txt -or -name cookies.sqlite` | head -1
Packit 8f70b4
},chomp $file if !defined $file;
Packit 8f70b4
Packit 8f70b4
print "# converted from $file\n";
Packit 8f70b4
my %cookie;
Packit 8f70b4
sub add_cookie($$$$$) {
Packit 8f70b4
   my ($domain,$path,$secure_bool,$name,$value)=@_;
Packit 8f70b4
   for($domain,$path,$name,$value) { s/"/\\"/g; s/'/\\'/g; s/ /%20/g; }
Packit 8f70b4
   my $secure='';
Packit 8f70b4
   $secure=';secure' if $secure_bool eq 'TRUE' || $secure_bool eq '1';
Packit 8f70b4
   $domain="*$domain" if $domain =~ /^\./;
Packit 8f70b4
   $path='' if $path eq '/';
Packit 8f70b4
   $path=";path=$path" if $path ne '';
Packit 8f70b4
   $value="=$value" if $name ne '';
Packit 8f70b4
   $cookie{"$domain$path$secure"}.=" $name$value";
Packit 8f70b4
}
Packit 8f70b4
if($file=~/\.sqlite$/) {
Packit 8f70b4
   my $file1="$file.$$.tmp";
Packit 8f70b4
   $SIG{__DIE__}=sub { unlink $file1 };
Packit 8f70b4
   system('cp',$file,$file1);
Packit 8f70b4
   my $dbh=DBI->connect("dbi:SQLite:dbname=$file1",'','');
Packit 8f70b4
   unlink $file1;
Packit 8f70b4
   my $q=$dbh->prepare("select host,path,isSecure,name,value from moz_cookies");
Packit 8f70b4
   $q->execute;
Packit 8f70b4
   $q->bind_columns(\my($domain,$path,$secure_bool,$name,$value));
Packit 8f70b4
   while($q->fetch) {
Packit 8f70b4
      add_cookie($domain,$path,$secure_bool,$name,$value);
Packit 8f70b4
   }
Packit 8f70b4
} else {
Packit 8f70b4
   open COOKIES,'<',$file or die "open($file): $!";
Packit 8f70b4
   while(<COOKIES>)
Packit 8f70b4
   {
Packit 8f70b4
      chomp;
Packit 8f70b4
      next if /^#/ or /^$/;
Packit 8f70b4
      my ($domain,undef,$path,$secure_bool,$expires,$name,$value)=split /\t/;
Packit 8f70b4
      add_cookie($domain,$path,$secure_bool,$name,$value);
Packit 8f70b4
   }
Packit 8f70b4
}
Packit 8f70b4
foreach(sort keys %cookie)
Packit 8f70b4
{
Packit 8f70b4
   $cookie{$_}=~s/^ //;
Packit 8f70b4
   my $c=($_=~/;/?qq{"$_"}:$_);
Packit 8f70b4
   print qq{set http:cookie/$c "$cookie{$_}"\n};
Packit 8f70b4
}