You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
bulk-processor/lib/NGCP/BulkProcessor/Downloaders/EWS/Client.pm

121 lines
2.6 KiB

package EWS::Client;
use strict;
use warnings;
BEGIN {
$EWS::Client::VERSION = '1.300000';
}
use Moose;
with qw/
EWS::Client::Role::SOAP
EWS::Client::Role::GetItem
EWS::Client::Role::GetAttachment
EWS::Client::Role::FindItem
EWS::Client::Role::FindFolder
EWS::Client::Role::GetFolder
EWS::Client::Role::ExpandDL
EWS::Client::Role::GetUserAvailability
EWS::Client::Role::ResolveNames
/;
use EWS::Client::Contacts;
use EWS::Client::Calendar;
use EWS::Client::Folder;
use EWS::Client::DistributionList;
use URI::Escape ();
use Log::Report;
has username => (
is => 'rw',
isa => 'Maybe[Str]',
required => 0,
);
has password => (
is => 'rw',
isa => 'Maybe[Str]',
required => 0,
);
has server => (
is => 'ro',
isa => 'Str',
required => 1,
);
has contacts => (
is => 'ro',
isa => 'EWS::Client::Contacts',
lazy_build => 1,
);
sub _build_contacts {
my $self = shift;
return EWS::Client::Contacts->new({ client => $self });
}
has calendar => (
is => 'ro',
isa => 'EWS::Client::Calendar',
lazy_build => 1,
);
sub _build_calendar {
my $self = shift;
return EWS::Client::Calendar->new({ client => $self });
}
has folders => (
is => 'ro',
isa => 'EWS::Client::Folder',
lazy_build => 1,
);
sub _build_folders {
my $self = shift;
return EWS::Client::Folder->new({ client => $self });
}
has distribution_list => (
is => 'ro',
isa => 'EWS::Client::DistributionList',
lazy_build => 1,
);
sub _build_distribution_list {
my $self = shift;
return EWS::Client::DistributionList->new({ client => $self });
}
sub BUILDARGS {
my ($class, @rest) = @_;
my $params = (scalar @rest == 1 ? $rest[0] : {@rest});
# collect EWS password from environment as last resort
$params->{password} ||= $ENV{EWS_PASS};
return $params;
}
sub BUILD {
my ($self, $params) = @_;
if ($self->use_negotiated_auth) {
die "please install LWP::Authen::Ntlm"
unless eval { require LWP::Authen::Ntlm && $LWP::Authen::Ntlm::VERSION };
die "please install Authen::NTLM"
unless eval { require Authen::NTLM && $Authen::NTLM::VERSION };
# change email style username to win-domain style
if ($self->username =~ m/(.+)@(.+)/) {
$self->username( $2 .'\\'. $1 );
}
} else {
# URI escape the username and password
$self->password( URI::Escape::uri_escape($self->password) );
$self->username( URI::Escape::uri_escape($self->username) );
}
}
__PACKAGE__->meta->make_immutable;
no Moose;
1;