#!/usr/bin/env perl
package Mojo::UserAgent::CookieJar::Role::Persistent;
use Mojo::Base 'Mojo::UserAgent::CookieJar';
use Mojo::Cookie::Response;
use Mojo::File;
has file => sub { Mojo::File->new('cookies.txt') };
has expires_in => sub { sub {time + 60} };
sub load {
my $self = shift;
foreach my $cookie (map {[split /\t/]} split /\R/, $self->file->slurp) {
next if $#$cookie != 6;
my %cookie;
@cookie{qw[domain flag path secure expires name value]} = @{$cookie};
delete $cookie{flag};
$cookie{secure} = $cookie{secure} eq 'TRUE' ? 1 : 0;
$self->add(Mojo::Cookie::Response->new(%cookie));
}
return $self;
}
sub save {
my ($self, $session) = @_;
my @cookies;
foreach my $cookie (@{$self->all}) {
push @cookies, [
$cookie->domain // ($session ? $cookie->origin : next),
($session) ? 'TRUE' : 'FALSE',
$cookie->path,
($cookie->secure) ? 'TRUE' : 'FALSE',
$cookie->expires // ($session ? $self->expires_in->() : next),
$cookie->name,
$cookie->value,
];
}
$self->file->spurt(join "\n", map { join "\t", @{$_} } @cookies);
return $self;
}