API-Plesk

 view release on metacpan or  search on metacpan

Changes  view on Meta::CPAN

1.09 2009-07-28

    - Add Mail/DB/DBUsers/Domains export from Plesk

1.08 2009-07-23

    - Patch from Nikolay Shulyakovskiy

1.07 2008-07-31

    - Fixed Build.PL (Test::LongString not in prereqs_build  list but required )
    - Add URI.pm as required module for test stage

1.06 2008-07-13
    
    - More improvements in tests
    - Get user domains list by login or client id

1.05 2008-06-15

    - Added full support operations with databases and db users
    - Fixed errors in pod documentation

README  view on Meta::CPAN

NAME
    API::Plesk - OO interface to the Plesk XML API
    (http://www.parallels.com/en/products/plesk/).

SYNOPSIS
        use API::Plesk;

        my $api = API::Plesk->new(
            username    => 'user', # required
            password    => 'pass', # required
            url         => 'https://127.0.0.1:8443/enterprise/control/agent.php', # required
            api_version => '1.6.3.1',
            debug       => 0,
            timeout     => 30,
        );

        my $res = $api->customer->get();

        if ($res->is_success) {
            for ( @{$res->data} ) {
                print "login: $_->{login}\n";

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


=head1 NAME

API::Plesk - OO interface to the Plesk XML API (http://www.parallels.com/en/products/plesk/).

=head1 SYNOPSIS

    use API::Plesk;

    my $api = API::Plesk->new(
        username    => 'user', # required
        password    => 'pass', # required
        url         => 'https://127.0.0.1:8443/enterprise/control/agent.php', # required
        api_version => '1.6.3.1',
        debug       => 0,
        timeout     => 30,
    );

    my $res = $api->customer->get();

    if ($res->is_success) {
        for ( @{$res->data} ) {
            print "login: $_->{login}\n";

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

    $class = ref $class || $class;

    confess "Required API::Plesk object!" unless $attrs{plesk};

    return bless \%attrs, $class;
}

# API::Plesk object
sub plesk { $_[0]->{plesk} }

sub check_required_params {
    my ( $self, $hash, @fields ) = @_;
    
    for my $key ( @fields ) {
        if ( ref $key ) {
            confess "Required any of this fields: " . join( ", ", @$key) . "!"
                unless grep { $hash->{$_} } @$key;
        } else {
            confess "Required field $key!" unless exists $hash->{$key};
        }
    }

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

        push @sorted, {$key => $params->{$key}}
            if exists $params->{$key};

    }

    return \@sorted;
}

# check hosting xml section
sub check_hosting {
    my ( $self, $params, $required ) = @_;

    unless ( $params->{hosting} ) {
        confess "Required hosting!" if $required;
        return;
    }

    my $hosting = $params->{hosting};
    my $type = delete $hosting->{type};
    my $ip = delete $hosting->{ip_address};
    
    #confess "Required ip_address" unless $ip;
    
    if ( $type eq 'vrt_hst' ) {

        $self->check_required_params($hosting, qw(ftp_login ftp_password));

        my @properties;
        for my $key ( sort keys %$hosting ) {
            push @properties, { property => [
                {name => $key}, 
                {value => $hosting->{$key}} 
            ]};
            delete $hosting->{$key};
        }
        push(@properties, { ip_address => $ip }) if $ip;

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

    pcode
    country 
    owner-id
);

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

    $self->check_required_params($gen_info, qw(pname login passwd));
    
    my $data = {
        gen_info => $self->sort_params($params{gen_info}, @gen_info_fields)
    };

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

sub get {

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


=head1 METHODS

=over 3

=item add(%params)

Method adds customer to Plesk Panel.

    %params = (
        # required
        gen_info => {
            pname => 'Mike',
            login => 'mike',
            passwd => '12345',
            ...            
        }
    );

=item get(%params)

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

    my ( $self, %params ) = @_;
    my $bulk_send = delete $params{bulk_send};

    my @fields = (
        [qw(site-id site-alias-id)],
        'type',
        'host',
        'value'
    );

    $self->check_required_params(\%params, @fields);
    my $data = $self->sort_params(\%params, @fields, 'opt');

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

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

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

use warnings;

use Carp;

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

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

    $self->check_required_params(\%params, qw(webspace-id name type));
     
    return $bulk_send ? \%params : 
        $self->plesk->send('database', 'add-db', \%params);
}

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

    my $data = {

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

    };

    return $bulk_send ? $data : 
        $self->plesk->send('database', 'del-db', $data);
}

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

    $self->check_required_params(\%params, qw(db-id login password));

    my $data = $self->sort_params(\%params, qw(db-id login password));
 
    return $bulk_send ? $data : 
        $self->plesk->send('database', 'add-db-user', $data);
}

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

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


    my @sort_fields = (
        'name',
        'password',
        'home',
        'create_non_existent',
        'quota',
        'permissions',
        [qw(site-id site-name)],        
    );
    my @required_fields = (
        'name',
        'password',
        [qw(site-id site-name)],        
    );

    $self->check_required_params(\%params, @required_fields);
    
    my $data = $self->sort_params(\%params, @sort_fields);

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

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

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


=head1 NAME

API::Plesk::Mock - Module for testing API::Plesk without sending real requests to Plesk API.

=head1 SYNOPSIS

    use API::Plesk::Mock;

    my $api = API::Plesk::Mock->new(
        username    => 'user', # required
        password    => 'pass', # required
        url         => 'https://127.0.0.1:8443/enterprise/control/agent.php', # required
        api_version => '1.6.3.1',
        debug       => 0,
        timeout     => 30,
    );
    $api->mock_response($some_response_xml);
    $api->mock_error($some_error_text);

=head1 DESCRIPTION

Module for testing API::Plesk without sending real requests to Plesk API.

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

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

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


use Carp;

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

#TODO
sub create {
    my ( $self, %params ) = @_;
    my $bulk_send = delete $params{bulk_send};

    $self->check_required_params(\%params, [qw(site-id name)]);

    return $bulk_send ? \%params : 
        $self->plesk->send('site-alias', 'create', \%params);
}

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

    my $data = { 

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

use Carp;
use Data::Dumper;

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

#TODO
sub assign_trial_site {
    my ( $self, %params ) = @_;
    my $bulk_send = delete $params{bulk_send};

    $self->check_required_params(\%params, qw(pp-site-guid sb-site-uuid));
    
    return $bulk_send ? \%params : 
        $self->plesk->send('sitebuilder', 'assign-trial-site', \%params);
}

1;

__END__

=head1 NAME

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

    status
    external-id
);

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

    $self->check_required_params($gen_info, qw(name login passwd));
    
    my $unsorteddata = {
        'gen-info' => $self->sort_params($params{gen_info}, @gen_info_fields),
        roles => $roles,
    };
    my $data = $self->sort_params($unsorteddata, qw(gen-info roles));

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

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


=head1 METHODS

=over 3

=item add(%params)

Method adds users to Plesk Panel.

    %params = (
        # required
        gen_info => {
            login => 'mike', # required
            passwd => '12345', # required
            name => 'Mike', # required
            owner-guid => # one of this or
            owner-external-id => # this required
            ...    
        }
        # required
        roles => {
            name => 'WebMaster',
            ...
    );

=item get(%params)

Method gets user data.

    %params = ( %filter );

lib/API/Plesk/WebUser.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};

    $self->check_required_params(\%params, qw(site-id login));

    my $data = $self->sort_params(\%params, qw(site-id login password password-type ftp-quota services));

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

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

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

    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 {

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

    };

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

sub add_subscription {
    my ($self, %params) = @_;
    my $bulk_send = delete $params{bulk_send}; 
    
    $self->check_required_params(\%params, [qw(plan-guid plan-external-id)]);

    my $data = $self->sort_params(\%params, 'filter', [qw(plan-guid plan-external-id)]);

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

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

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

    my $data = $self->sort_params(\%params, 'filter', [qw(plan-guid plan-external-id)]);

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

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

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

    my $data = $self->sort_params(\%params, 'filter', [qw(plan-guid plan-external-id no-plan)]);

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


1;

t/compoment.t  view on Meta::CPAN

BEGIN {
    plan tests => 10;
    use_ok( 'API::Plesk::Component' );
}

my $c = API::Plesk::Component->new(
    plesk => API::Plesk->new(%TestData::plesk_valid_params)
);

eval {
    $c->check_required_params({ test => 123}, qw(test));
};
ok(!$@);

eval {
    $c->check_required_params({ test => 123, test2 => 123}, [qw(test ddd)]);
};
ok(!$@);

eval {
    $c->check_required_params({ test => 123}, qw(qqq));
};
like($@, qr/Required field qqq!/);

eval {
    $c->check_required_params({ test => 123}, [qw(qqq ff)]);
};
like($@, qr/Required any of this fields: qqq, ff!/);

is_deeply(
    $c->sort_params({key => 1, key2 => 2, key3 => 3, key4 => 4}, [qw(key3 key2)], 'key'),
    [
        {key3 => 3},
        {key  => 1},
    ]
);



( run in 1.134 second using v1.01-cache-2.11-cpan-0a6323c29d9 )