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 }, ); $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;