API-Plesk

 view release on metacpan or  search on metacpan

Changes  view on Meta::CPAN

2.00 2012-06-25

    - Improved is_connection_error function
    - Added user component (bgmilne)
    - Added mock module for testing without sending requests to real api
    - Fixed bug in service_plan->get method

2.00_3 2011-08-01

    - Added site-alias component
    - Fixed add and set webspace
    - Added tests
    - Fixed site component
    - Added sitebuilder component
    - Added ftp-user component
    - Fixed hosting ftp_password bug
    - Added dns component 
    - Added mail component
    - Fixed is_connection_error function
    - Added set and del opetations to service-plan
    - Added test of service-plan component
    - Reformated Changes
    - Fixed Pod

2.00_2 2011-05-16
    
    - Fixed xml renderer

2.00_1 20 Apr 2011 10:52:43

lib/API/Plesk.pm  view on Meta::CPAN


    my $ua = new LWP::UserAgent( parse_head => 0 );
    my $req = new HTTP::Request POST => $self->{url};

    if ($self->{secret_key}) {
        $req->push_header(':KEY',  $self->{secret_key});
    } else {
        $req->push_header(':HTTP_AUTH_LOGIN',  $self->{username});
        $req->push_header(':HTTP_AUTH_PASSWD', $self->{password});
    }
    $req->content_type('text/xml; charset=UTF-8');
    $req->content($xml);

    # LWP6 hack to prevent verification of hostname
    $ua->ssl_opts(verify_hostname => 0) if $ua->can('ssl_opts');

    warn $req->as_string   if defined $self->{debug}  &&  $self->{debug} > 1;

    my $res = eval {
        local $SIG{ALRM} = sub { die "connection timeout" };
        alarm $self->{timeout};

lib/API/Plesk/Component.pm  view on Meta::CPAN


API::Plesk::Component -  Base class for components.

=head1 SYNOPSIS

package API::Plesk::Customer;

use base 'API::Plesk::Component';

sub get { ... }
sub set { ... }

1;

=head1 DESCRIPTION

Base class for components.

=head1 METHODS

=over 3

lib/API/Plesk/Customer.pm  view on Meta::CPAN

    return $bulk_send ? $data : 
        $self->plesk->send('customer', 'add', $data);
}

sub get {
    my ($self, %filter) = @_;
    my $bulk_send = delete $filter{bulk_send};

    my $data = { 
        filter => @_ > 2 ? \%filter : '',
        dataset => [ {gen_info => ''}, {stat => ''} ]
    };

    return $bulk_send ? $data : 
        $self->plesk->send('customer', 'get', $data);
}

sub set {
    my ( $self, %params ) = @_;
    my $bulk_send = delete $params{bulk_send};
    my $filter    = $params{filter}   || '';
    my $gen_info  = $params{gen_info} || '';

    $gen_info || confess "Required gen_info or stat parameter!";

    my $data = {
        filter  => $filter,
        values => {
            gen_info => $gen_info,
        }
    };

    return $bulk_send ? $data :
        $self->plesk->send('customer', 'set', $data);
}

sub del {
    my ($self, %filter) = @_;
    my $bulk_send = delete $filter{bulk_send};

    my $data = {
        filter  => @_ > 2 ? \%filter : ''
    };

lib/API/Plesk/Customer.pm  view on Meta::CPAN


=head1 NAME

API::Plesk::Customer -  Managing customer accounts.

=head1 SYNOPSIS

    $api = API::Plesk->new(...);
    $response = $api->customer->add(..);
    $response = $api->customer->get(..);
    $response = $api->customer->set(..);
    $response = $api->customer->del(..);

=head1 DESCRIPTION

Module manage customer accounts.

=head1 METHODS

=over 3

lib/API/Plesk/Customer.pm  view on Meta::CPAN

    );

=item get(%params)

Method gets customer data.

    %params = (
        filter => {...}
    );

=item set(%params)

Method sets customer data.

    %params = (
        filter   => {...},
        gen_info => {...}
    );

=item del(%params)

Method deletes customer from Plesk Panel.

lib/API/Plesk/FTPUser.pm  view on Meta::CPAN

    my ($self, %filter) = @_;
    my $bulk_send = delete $filter{bulk_send};
    my $data = { 
        filter  => @_ > 2 ? \%filter : '',
    };

    return $bulk_send ? $data : 
        $self->plesk->send('ftp-user', 'get', $data);
}

sub set {
    my ( $self, %params ) = @_;
    my $bulk_send = delete $params{bulk_send}; 
    my $filter    = delete $params{filter} || '';
   
     my @sort_fields = (
        'name',
        'password',
        'home',
        'create_non_existent',
        'quota',
        'permissions',
    );

    my $data = {
        filter  => $filter,
        values  => $self->sort_params(\%params, @sort_fields),
    };

    return $bulk_send ? $data : 
        $self->plesk->send('ftp-user', 'set', $data);
}

sub del {
    my ($self, %filter) = @_;
    my $bulk_send = delete $filter{bulk_send}; 

    my $data = {
        filter  => @_ > 2 ? \%filter : ''
    };

lib/API/Plesk/FTPUser.pm  view on Meta::CPAN

Module manage sites (domains).

=head1 METHODS

=over 3

=item add(%params)

=item get(%params)

=item set(%params)

=item del(%params)

=item get_physical_hosting_descriptor(%params)

=back

=head1 AUTHOR

Ivan Sokolov <lt>ivsokolov@cpan.org<gt>

lib/API/Plesk/ServicePlan.pm  view on Meta::CPAN

    my $filter = delete $params{filter} || '';
    my $data = [
        { filter => $filter },
        @{ $self->sort_params( \%params, @main_fields ) },
    ];

    return $bulk_send ? $data : 
        $self->plesk->send('service-plan', 'get', $data);
}

sub set {
    my ( $self, %params ) = @_;
    my $bulk_send = delete $params{bulk_send}; 
    my $filter    = delete $params{filter} || '';
    
    $self->check_hosting(\%params);

    my $data = [
        { filter  => $filter },
        @{$self->sort_params(\%params, @main_fields)},
    ];

    return $bulk_send ? $data : 
        $self->plesk->send('service-plan', 'set', $data);
}

sub del {
    my ($self, %filter) = @_;
    my $bulk_send = delete $filter{bulk_send}; 

    my $data = {
        filter  => @_ > 2 ? \%filter : ''
    };

lib/API/Plesk/ServicePlan.pm  view on Meta::CPAN

__END__

=head1 NAME

API::Plesk::ServicePlan -  Managing service plans.

=head1 SYNOPSIS

    $api = API::Plesk->new(...);
    $response = $api->service_plan->get(...);
    $response = $api->service_plan->set(...);
    $response = $api->service_plan->del(...);

=head1 DESCRIPTION

Module manage service plans.

=head1 METHODS

=over 3

=item get(%params)

=item setarams)

=item del(%params)

=back

=head1 AUTHOR

Ivan Sokolov <lt>ivsokolov@cpan.org<gt>

=cut

lib/API/Plesk/Site.pm  view on Meta::CPAN


use Carp;
use Data::Dumper;

use base 'API::Plesk::Component';

#TODO
sub add {
    my ( $self, %params ) = @_;
    my $bulk_send = delete $params{bulk_send};
    my $gen_setup = $params{gen_setup} || confess "Required gen_setup parameter!";

    my @fields = (
        'name',
        [qw(webspace-name webspace-id webspace-guid)]
    );

    $self->check_required_params($gen_setup, @fields);
    $self->check_hosting(\%params);

    $params{gen_setup} = $self->sort_params($gen_setup, @fields);
    
    my $data = $self->sort_params(\%params, qw(gen_setup hosting prefs));

    return $bulk_send ? $data : 
        $self->plesk->send('site', 'add', $data);
}

sub get {
    my ($self, %filter) = @_;
    my $bulk_send = delete $filter{bulk_send};
    my $dataset   = {gen_info => ''};
    
    if ( my $add = delete $filter{dataset} ) {
        $dataset = { map { ( $_ => '' ) } ref $add ? @$add : ($add) };
        $dataset->{gen_info} = '';
    }

    my $data = { 
        filter  => @_ > 2 ? \%filter : '',
        dataset => $dataset,
    };

    return $bulk_send ? $data : 
        $self->plesk->send('site', 'get', $data);
}

sub set {
    my ( $self, %params ) = @_;
    my $bulk_send = delete $params{bulk_send}; 
    my $filter    = delete $params{filter} || '';
    
    $self->check_hosting(\%params);


    my $data = {
        filter  => $filter,
        values  => $self->sort_params(\%params, qw(gen_setup prefs hosting disk_usage)),
    };

    return $bulk_send ? $data : 
        $self->plesk->send('site', 'set', $data);
}

sub del {
    my ($self, %filter) = @_;
    my $bulk_send = delete $filter{bulk_send}; 

    my $data = {
        filter  => @_ > 2 ? \%filter : ''
    };

lib/API/Plesk/Site.pm  view on Meta::CPAN

Module manage sites (domains).

=head1 METHODS

=over 3

=item add(%params)

=item get(%params)

=item set(%params)

=item del(%params)

=item get_physical_hosting_descriptor(%params)

=back

=head1 AUTHOR

Ivan Sokolov <lt>ivsokolov@cpan.org<gt>

lib/API/Plesk/SiteAlias.pm  view on Meta::CPAN

    my $bulk_send = delete $filter{bulk_send};

    my $data = { 
        filter  => @_ > 2 ? \%filter : '',
    };

    return $bulk_send ? $data : 
        $self->plesk->send('site-alias', 'get', $data);
}

sub set {
    my ( $self, %params ) = @_;
    my $bulk_send = delete $params{bulk_send}; 
    
    return $bulk_send ? \%params : 
        $self->plesk->send('site-alias', 'set', \%params);
}

sub del {
    my ($self, %filter) = @_;
    my $bulk_send = delete $filter{bulk_send}; 

    my $data = {
        filter  => @_ > 2 ? \%filter : ''
    };

lib/API/Plesk/SiteAlias.pm  view on Meta::CPAN

Module manage sites (domains).

=head1 METHODS

=over 3

=item create(%params)

=item get(%params)

=item set(%params)

=item del(%params)

=back

=head1 AUTHOR

Ivan Sokolov <lt>ivsokolov@cpan.org<gt>

=cut

lib/API/Plesk/User.pm  view on Meta::CPAN

    return $bulk_send ? $data : 
        $self->plesk->send('user', 'add', $data);
}

sub get {
    my ($self, %filter) = @_;
    my $bulk_send = delete $filter{bulk_send};

    my $data = { 
        filter => @_ > 2 ? \%filter : '',
        dataset => [ {'gen-info' => ''}, {roles => ''} ]
    };

    return $bulk_send ? $data : 
        $self->plesk->send('user', 'get', $data);
}

sub set {
    my ( $self, %params ) = @_;
    my $bulk_send = delete $params{bulk_send};
    my $filter    = $params{filter}   || '';
    my $gen_info  = $params{gen_info} || '';

    $gen_info || confess "Required gen_info or stat parameter!";

    my $data = {
        filter  => $filter,
        values => {
            gen_info => $gen_info,
        }
    };

    return $bulk_send ? $data :
        $self->plesk->send('user', 'set', $data);
}

sub del {
    my ($self, %filter) = @_;
    my $bulk_send = delete $filter{bulk_send};

    my $data = {
        filter  => @_ > 2 ? \%filter : ''
    };

lib/API/Plesk/User.pm  view on Meta::CPAN


=head1 NAME

API::Plesk::Customer -  Managing user (e.g. auxiliary) accounts.

=head1 SYNOPSIS

    $api = API::Plesk->new(...);
    $response = $api->user->add(..);
    $response = $api->user->get(..);
    $response = $api->user->set(..);
    $response = $api->user->del(..);

=head1 DESCRIPTION

Module manage user (e.g. auxiliary) accounts.

Filters used by get,del etc. are as follows:
%filter => {
        guid => xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
        # or

lib/API/Plesk/User.pm  view on Meta::CPAN

            name => 'WebMaster',
            ...
    );

=item get(%params)

Method gets user data.

    %params = ( %filter );

=item set(%params)

Method sets user data.

    %params = (
        filter   => {...},
        gen_info => {...}
    );

=item del(%params)

Method deletes user from Plesk Panel.

lib/API/Plesk/WebUser.pm  view on Meta::CPAN

    my $bulk_send = delete $filter{bulk_send};

    my $data = { 
        filter  => @_ > 2 ? \%filter : '',
    };

    return $bulk_send ? $data : 
        $self->plesk->send('webuser', 'get-prefs', $data);
}

sub set {
    my ( $self, %params ) = @_;
    my $bulk_send = delete $params{bulk_send}; 
    my $filter    = delete $params{filter} || '';
    
    my $data = {
        filter  => $filter,
        values  => $self->sort_params(\%params, qw(password password-type ftp-quota services)),
    };

    return $bulk_send ? $data : 
        $self->plesk->send('webuser', 'set', $data);
}

sub del {
    my ($self, %filter) = @_;
    my $bulk_send = delete $filter{bulk_send}; 

    my $data = {
        filter  => @_ > 2 ? \%filter : ''
    };

lib/API/Plesk/WebUser.pm  view on Meta::CPAN

=head1 METHODS

=over 3

=item add(%params)

=item get(%params)

=item get_prefs(%params)

=item set(%params)

=item del(%params)

=back

=head1 AUTHOR

Ivan Sokolov <lt>ivsokolov@cpan.org<gt>

=cut

lib/API/Plesk/Webspace.pm  view on Meta::CPAN

package API::Plesk::Webspace;

use strict;
use warnings;

use Carp;
use Data::Dumper;

use base 'API::Plesk::Component';

my @gen_setup_fields = qw(
    name
    owner-id
    owner-login
    owner-guid
    owner-external-id
    htype
    ip_address
    status
    external-id
);

my @main_fields = qw(
    gen_setup
    hosting    
    limits     
    prefs      
    performance
    permissions
    plan-id
    plan-name
    plan-guid
    plan-external-id
);

sub add {
    my ( $self, %params ) = @_;
    my $bulk_send = delete $params{bulk_send};
    my $gen_setup = $params{gen_setup} || confess "Required gen_setup parameter!";

    $self->check_hosting(\%params);

    $self->check_required_params(\%params, [qw(plan-id plan-name plan-guid plan-external-id)]);
    $self->check_required_params($gen_setup, qw(name ip_address));

    $params{gen_setup} = $self->sort_params($gen_setup, @gen_setup_fields);
    
    my $data = $self->sort_params(\%params, @main_fields);

    return $bulk_send ? $data :
        $self->plesk->send('webspace', 'add', $data);
}

sub get {
    my ($self, %filter) = @_;
    my $bulk_send = delete $filter{bulk_send};
    my $dataset   = {gen_info => ''};
    
    if ( my $add = delete $filter{dataset} ) {
        $dataset = { map { ( $_ => '' ) } ref $add ? @$add : ($add) };
        $dataset->{gen_info} = '';
    }

    my $data = { 
        filter  => @_ > 2 ? \%filter : '',
        dataset => $dataset,
    };

    return $bulk_send ? $data : 
        $self->plesk->send('webspace', 'get', $data);
}

sub set {
    my ( $self, %params ) = @_;
    my $bulk_send = delete $params{bulk_send}; 
    my $filter    = delete $params{filter} || '';
    my $gen_setup = $params{gen_setup};
    
    $params{gen_setup} = $self->sort_params($gen_setup, @gen_setup_fields) if $gen_setup;
    $self->check_hosting(\%params);

    my $data = [
        { filter  => $filter },
        { values  => $self->sort_params(\%params, @main_fields) },
    ];

    return $bulk_send ? $data : 
        $self->plesk->send('webspace', 'set', $data);
}

sub del {
    my ($self, %filter) = @_;
    my $bulk_send = delete $filter{bulk_send}; 

    my $data = {
        filter  => @_ > 2 ? \%filter : ''
    };

lib/API/Plesk/Webspace.pm  view on Meta::CPAN

Module manage subscriptions (webspaces).

=head1 METHODS

=over 3

=item add(%params)

=item get(%params)

=item set(%params)

=item del(%params)

=item add_plan_item(%params)

=item add_subscription(%params)

=item remove_subscription(%params)

=item switch_subscription(%params)

t/customer.t  view on Meta::CPAN

my $api = API::Plesk->new( %TestData::plesk_valid_params );

my $customers = API::Plesk::Customer->new( plesk => $api );

isa_ok($customers, 'API::Plesk::Customer');

is_deeply(
    $customers->get(id => 1, bulk_send => 1),
    { 
        filter => {id => 1},
        dataset => [ {gen_info => ''}, {stat => ''} ]
    },
    'get'
);
    

t/plesk.t  view on Meta::CPAN

my $yet_another_api = $api->new( %TestData::plesk_valid_params );

isa_ok( $api, 'API::Plesk', 'INSTANCE call new' );
isnt( $api, $yet_another_api, 'object compare' );

# render_xml

is($api->render_xml({
    webspace => {
        add => [
            { gen_setup => [
                { qq => sub { 'ddd' } },
                { name => 'sample.com' },
                { ddd => sub { {lll => 1234567} } },
            ]},
            { hosting => {
                name => '123',
                value => 'erty'
            }}
        ]
    }
}), '<?xml version="1.0" encoding="UTF-8"?><packet version="1.6.3.0"><webspace><add><gen_setup><qq>ddd</qq><name>sample.com</name><ddd><lll>1234567</lll></ddd></gen_setup><hosting><value>erty</value><name>123</name></hosting></add></webspace></packet...

is ( $api->render_xml({ prop => [
    {value1 => '0'},
    {value2 => ''},
    {value3 => undef},
]}), '<?xml version="1.0" encoding="UTF-8"?><packet version="1.6.3.0"><prop><value1>0</value1><value2/><value3/></prop></packet>', 'render_xml');
# compoments

$api = API::Plesk->new(
    api_version   => '1.6.3.1',

t/service-plan.t  view on Meta::CPAN

BEGIN { 
    plan tests => 5;
    use_ok('API::Plesk::ServicePlan'); 
}

my $api = API::Plesk->new( %TestData::plesk_valid_params );

isa_ok($api->service_plan, 'API::Plesk::ServicePlan');

is_deeply(
    $api->service_plan->set(
        filter => { name => '123' },
        hosting     => {
            type       => 'vrt_hst',
            ftp_login  => '123',
            ftp_password => '123',
            ip_address => '123',
        },
        limits => '',
        bulk_send   => 1,
    ),

t/service-plan.t  view on Meta::CPAN

        {
            hosting     => {
                vrt_hst => [
                    { property => [ {name => 'ftp_login'}, {value  => '123'} ] },
                    { property => [ {name => 'ftp_password'}, {value => '123'} ] },
                    { ip_address => '123' },
                ]
            },
        },
    ],
    'set'
);

is_deeply(
    $api->service_plan->del(
        name      => 'test.ru',
        bulk_send => 1
    ),
    { 
        filter => {name => 'test.ru'},
    },

t/site-alias.t  view on Meta::CPAN

        bulk_send => 1
    ),
    { 
        'site-id' => 12345,
         name     => 'www.ru',
    },
    'create'
);

is_deeply(
    $api->site_alias->set(
        filter    => {'site-id' => 'test.ru'},
        settings  => { status => 1 },
        bulk_send => 1
    ),
    {
        filter   => {'site-id' => 'test.ru'},
        settings => { status => 1 },
    },
    'set'
);

is_deeply(
    $api->site_alias->del(
        'site-id' => 123,
        bulk_send => 1
    ),
    { 
        filter => {'site-id' => 123},
    },

t/site.t  view on Meta::CPAN

    plan tests => 5;
    use_ok('API::Plesk::Site'); 
}

my $api = API::Plesk->new( %TestData::plesk_valid_params );

isa_ok($api->site, 'API::Plesk::Site');

is_deeply(
    $api->site->add(
        gen_setup => {
            name => 'test.ru',
            'webspace-name' => 'main.ru',
        },
        hosting => {
            type => 'std_fwd',
            ip_address => '12.34.56.78',
            dest_url => 'fwd.ru',
        },
        bulk_send => 1
    ),
    [ 
        {gen_setup => [
            {name => 'test.ru'},
            {'webspace-name' => 'main.ru'},
        ]},
        {hosting => {
            std_fwd => {
                dest_url => 'fwd.ru',
                ip_address => '12.34.56.78',
            }
        }}

    ],
    'add'
);

is_deeply(
    $api->site->set(
        filter => {name => 'test.ru'},
        gen_setup => {
            name => 'test.ru',
        },
        hosting => {
            type => 'vrt_hst',
            ip_address => '12.34.56.78',
            ftp_login => 'qwerty',
            ftp_password => '12345',
            ip_address => '12.34.56.78',
        },
        bulk_send => 1
    ),
    {
        filter => {name => 'test.ru'},
        values => [
            {gen_setup => {
                name => 'test.ru',
            }},
            {hosting => {
                vrt_hst => [
                    { property => [
                        {name => 'ftp_login'},
                        {value => 'qwerty'}
                    ]},
                    { property => [
                        {name => 'ftp_password'},
                        {value => '12345'}
                    ]},
                    {ip_address => '12.34.56.78'},
                ]
            }}
        ]

    },
    'set'
);

is_deeply(
    $api->site->del(
        name      => 'test.ru',
        bulk_send => 1
    ),
    { 
        filter => {name => 'test.ru'},
    },

t/user.t  view on Meta::CPAN

my $api = API::Plesk->new( %TestData::plesk_valid_params );

my $users = $api->user;

isa_ok($users, 'API::Plesk::User');

is_deeply(
    $users->get(guid => 1, bulk_send => 1),
    { 
        filter => {guid => 1},
        dataset => [ {'gen-info' => ''}, {roles => ''} ]
    },
    'get'
);
    

t/webspace.t  view on Meta::CPAN

    use_ok('API::Plesk::Webspace'); 
}

my $api = API::Plesk->new( %TestData::plesk_valid_params );

isa_ok($api->webspace, 'API::Plesk::Webspace');

is_deeply(
    $api->webspace->add(
        'plan-name' => '123',
        gen_setup   => {
            name          => '123',
            ip_address    => '123',
            'owner-login' => '123',
        },
        hosting     => {
            type       => 'vrt_hst',
            ftp_login  => '123',
            ftp_password => '123',
            ip_address => '123',
        },
        prefs => { www => 'true' },
        bulk_send   => 1,
    ),
    [
        {
            gen_setup   => [
                {name          => '123'},
                {'owner-login' => '123'},
                {ip_address    => '123'},
            ],
        },
        {
            hosting     => {
                vrt_hst => [
                    { property => [ {name => 'ftp_login'}, {value  => '123'} ] },
                    { property => [ {name => 'ftp_password'}, {value => '123'} ] },

t/webspace.t  view on Meta::CPAN

                ]
            },
        },
        {   prefs => { www => 'true' } },
        { 'plan-name' => '123' },
    ],
    'add'
);

is_deeply(
    $api->webspace->set(
        filter => { name => '123' },
        gen_setup   => {
            name          => '123',
            ip_address    => '123',
            'owner-login' => '123',
        },
        hosting     => {
            type       => 'vrt_hst',
            ftp_login  => '123',
            ftp_password => '123',
            ip_address => '123',
        },
        prefs => { www => 'true' },
        bulk_send   => 1,
    ),
    [
        { filter => { name => '123' } },
        { values => [
            {
                gen_setup   => [
                    {name          => '123'},
                    {'owner-login' => '123'},
                    {ip_address    => '123'},
                ],
            },
            {
                hosting     => {
                    vrt_hst => [
                        { property => [ {name => 'ftp_login'}, {value  => '123'} ] },
                        { property => [ {name => 'ftp_password'}, {value => '123'} ] },
                        { ip_address => '123' },
                    ]
                },
            },
            { prefs => { www => 'true' } },
       ]},
    ],
    'set'
);


is_deeply(
    $api->webspace->add_subscription(
        'plan-guid' => 'wervqwef',
        bulk_send   => 1
    ),
    [
        {'plan-guid' => 'wervqwef'},



( run in 2.842 seconds using v1.01-cache-2.11-cpan-26ccb49234f )