package DeWeave::Storage;
use Moose;
use namespace::autoclean;
use MooseX::Types::Moose qw(Str);
use LWP::UserAgent;
use MooseX::Types::URI qw(Uri);
use URI::QueryParam;
has username => (
isa => Str,
required => 1,
is => 'ro',
);
has password => (
isa => Str,
required => 1,
is => 'ro',
);
has server_uri => (
isa => Uri,
coerce => 1,
is => 'ro',
default => 'https://weave.thenautilus.net/',
);
has version => (
isa => Str,
required => 1,
is => 'ro',
default => '1.1',
);
has basicauth_realm => (
isa => Str,
required => 1,
is => 'ro',
default => 'Sync',
);
has _useragent => (
init_arg => undef,
is => 'ro',
lazy_build => 1,
);
sub _build__useragent {
my ($self) = @_;
my $ua = LWP::UserAgent->new(
ssl_opts => { SSL_verify_mode => 0, verify_hostname => 0 },
);
$ua->env_proxy;
$ua->credentials($self->server_uri->host_port,
$self->basicauth_realm,
$self->username,
$self->password);
$ua->protocols_allowed(['https']);
return $ua;
}
sub get_item {
my ($self,$path) = @_;
my $relative = sprintf '%s/%s/%s',
$self->version,
$self->username,$path;
my $uri = URI->new_abs($relative,$self->server_uri);
$uri->query_param(full => 1);
my $response = $self->_useragent->get($uri);
if ($response->is_success) {
return $response->decoded_content;
}
else {
die "($uri) ".$response->status_line;
}
}
1;