API-Plesk

 view release on metacpan or  search on metacpan

Changes  view on Meta::CPAN

    - 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

1.04 2008-05-29

    - Added the ability to fine tuning the abstract_parser sub (for API::PleskExpand)

1.03 2008-05-25
    
    - Small bug fix

MANIFEST  view on Meta::CPAN

lib/API/Plesk/DNS.pm
lib/API/Plesk/Mail.pm
lib/API/Plesk/WebUser.pm
lib/API/Plesk/User.pm
Makefile.PL
MANIFEST			This list of files
META.yml
README
t/compoment.t
t/customer.t
t/database.t
t/plesk.t
t/mock.t
t/response.t
t/site.t
t/sitebuilder.t
t/site-alias.t
t/ftp_user.t
t/webuser.t
t/webspace.t
t/dns.t

README  view on Meta::CPAN

            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";
            }
        }
        else {
            print $res->error;
        }

DESCRIPTION
    At present the module provides interaction with Plesk 10.1 (API
    1.6.3.1). Distribution was completely rewritten and become more friendly

README  view on Meta::CPAN


METHODS
    new(%params)
       Create new class instance.

       Required params: username password url

       Additional params: api_version - default 1.6.3.1 debug - default 0
       timeout - default 30 sec.

    send($operator, $operation, $data, %params)
       This method prepare and sends request to Plesk API.

       Returns API::Plesk::Response object.

       $operator - name of operator XML section of Plesk API.

       $operation - mane of operation XML section of Plesk API.

       $data - data hash that is converted to XML and is sended to plesk
       server.

    xml_http_req( $xml )
       Internal method. it implements real request sending to Plesk API.

       Returns array ( $response_xml, $error ).

SEE ALSO
    Plesk XML RPC API http://www.parallels.com/en/products/plesk/docs/

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

    # new
    customer           => [['1.6.3.0', 'Customer']],
    webspace           => [['1.6.3.0', 'Webspace']],
    site               => [['1.6.3.0', 'Site']],
    subdomain          => [['1.6.3.0', 'Subdomain']],
    site_alias         => [['1.6.3.0', 'SiteAlias']],
    sitebuilder        => [['1.6.3.0', 'SiteBuilder']],
    ftp_user           => [['1.6.3.0', 'FTPUser']],
    service_plan       => [['1.6.3.0', 'ServicePlan']],
    service_plan_addon => [['1.6.3.0', 'ServicePlanAddon']],
    database           => [['1.6.3.0', 'Database']],
    webuser            => [['1.6.3.0', 'WebUser']],
    dns                => [['1.6.3.0', 'DNS']],
    mail               => [['1.6.3.0', 'Mail']],
    user               => [['1.6.3.0', 'User']],

    # old
    Accounts => [['1.5.0.0', 'Accounts']],
    Domains  => [['1.5.0.0', 'Domains']],
);

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

        confess "Required username!" unless $self->{username};
        confess "Required password!" unless $self->{password};
    }
    confess "Required url!"      unless $self->{url};

    return bless $self, $class;
}

# sends request to Plesk API
sub send {
    my ( $self, $operator, $operation, $data, %params ) = @_;

    confess "Wrong request data!" unless $data && ref $data;

    my $xml = { $operator => { $operation => $data } };

    $xml = $self->render_xml($xml);

    warn "REQUEST $operator => $operation\n$xml" if $self->{debug};

    my ($response, $error) = $self->xml_http_req($xml);

    warn "RESPONSE $operator => $operation => $error\n$response" if $self->{debug};

    unless ( $error ) {

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

        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";
        }
    }
    else {
        print $res->error;
    }

=head1 DESCRIPTION

At present the module provides interaction with Plesk 10.1 (API 1.6.3.1).

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

Required params:
username
password
url

Additional params:
api_version - default 1.6.3.1
debug       - default 0
timeout     - default 30 sec.

=item send($operator, $operation, $data, %params)

This method prepare and sends request to Plesk API.

Returns API::Plesk::Response object.

$operator - name of operator XML section of Plesk API.

$operation - mane of operation XML section of Plesk API.

$data - data hash that is converted to XML and is sended to plesk server.

=item xml_http_req( $xml )

Internal method. it implements real request sending to Plesk API.

Returns array ( $response_xml, $error ).

=back

=head1 SEE ALSO

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

    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 {
    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 : ''
    };

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

1;

__END__

=head1 NAME

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

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

        gen_info => {
            pname => 'Mike',
            login => 'mike',
            passwd => '12345',
            ...            
        }
    );

=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/DNS.pm  view on Meta::CPAN

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

    my $data = [
        { filter  => @_ > 2 ? \%filter : '' },
        ( $template ? {template => $template} : () ),
    ];

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

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

    my $data = [
        { filter  => $self->prepare_filter(\%filter) },
        ( $template ? {template => $template} : () ),
    ];

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

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

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

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

1;

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


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 = {
        filter  => @_ > 2 ? \%filter : ''
    };

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

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

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

1;

__END__

=head1 NAME

API::Plesk::Database -  Managing databases.

=head1 SYNOPSIS

    $api = API::Plesk->new(...);
    $response = $api->database->add_db(..);
    $response = $api->database->del_db(..);
    $response = $api->database->add_db_user(..);
    $response = $api->database->del_db_user(..);

=head1 DESCRIPTION

Module manage databases and database users.

=head1 METHODS

=over 3

=item add_db(%params)

=item del_db(%params)

=item add_db_user(%params)

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

        [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};
    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 : ''
    };

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

1;

__END__

=head1 NAME

API::Plesk::Site -  Managing sites (domains).

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

    };

    return bless $self, $class;
}

sub is_success { $_[0]->{is_success} }

sub id   { $_[0]->{results}->[0]->{id} }
sub guid { $_[0]->{results}->[0]->{guid} }

sub data {
    my ( $self ) = @_;
    return [] unless $self->is_success;
    return [ map { $_->{data} || () } @{$self->{results}} ];
}

sub results {
    my ( $self ) = @_;
    return   unless $self->is_success;
    return $self->{results} || [];
}

sub error_code { $_[0]->error_codes->[0]; }
sub error_text { $_[0]->error_texts->[0]; }

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

    $res->is_connection_error;

    # get errors
    $res->error_code;
    $res->error_codes->[0];
    $res->error_text;
    $res->error_texts->[0];
    $res->error;
    $res->errors->[0];

    # get data sections
    $res->data->[0];

    # get result sections
    $res->results->[0];

    # get id and guid
    $res->id;
    $res->guid;


=head1 DESCRIPTION

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

Create response object.

=item is_success()

Returns true if all results have no errors.

=item is_connection_error()

Returns true if connection error happened.

=item data()

    $response->data;
    $response->data->[0];

=item results()

    $response->results;
    $response->results->[0];

=item error_code()

    $response->error_code;

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

    name
);

my @main_fields = ( @header_fields, @other_fields );

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

    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 : ''
    };

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

1;

__END__

=head1 NAME

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

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

my @main_fields = qw/
    owner-id
    owner-login
/;

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

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

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

1;

__END__

=head1 NAME

API::Plesk::ServicePlanAddon -  Managing add-on plans.

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

    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 : ''
    };

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

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

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

1;

__END__

=head1 NAME

API::Plesk::Site -  Managing sites (domains).

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

    $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 = { 
        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 : ''
    };

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

1;

__END__

=head1 NAME

API::Plesk::SiteAlias -  Managing site aliases.

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

);

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

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 : ''
    };

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

1;

__END__

=head1 NAME

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

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

            ...    
        }
        # required
        roles => {
            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


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

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

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

sub get_prefs {
    my ($self, %filter) = @_;
    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 : ''
    };

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

1;

__END__

=head1 NAME

API::Plesk::WebUser -  Managing webusers.

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

    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 : ''
    };

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

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

    my $name = $params{name} || confess "Required name field!";    
    my $data = {
        filter      => $filter,
        'plan-item' => { name => $name },
    };

    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;

__END__

=head1 NAME

API::Plesk::Webspace -  Managing subscriptions (webspaces).

t/TestData.pm  view on Meta::CPAN

package TestData;

use Test::More;
use API::Plesk;

#
# Support sub`s and data for tests
#

our @EXPORT = qw(
    delete_all_accounts
    create_unique_user_data
    _compare
    gen_passwd
    iterate
    check_input_data
    create_work_logins
);

# ONLINE configs

my $online_plesk_url = 'https://127.0.0.1:8443/enterprise/control/agent.php';

our $online_manual_created_template_name = $ENV{'template_name'};
our $online_manual_created_template_id  = $ENV{'template_id'};
our $online_new_tariff_name = $ENV{'new_tariff'};

t/TestData.pm  view on Meta::CPAN

our %online_plesk_valid_params = (
    api_version   => $ENV{'plesk_api_version'}  || '1.5.0.0',
    username      => $ENV{'plesk_username'}     || 'admin',
    password      => $ENV{'plesk_password'}     || 'qwerty',
    url           => $ENV{'plesk_url'}          || $online_plesk_url,
    debug         => '',
);

# END online  configs

our $test_user_data =  { 
    pname   => 'pavel', 
    login   => 'pav_perl',
    passwd  => 'password',
    phone   => '8 555 1111111',
    email   => 'nrg@nrg.name',
    country => 'RU'                 # optional field
};


our $stress_test_data = {
    pname => [ # 1 .. 60 symbols 
        'pavel',
        '2342134123412',
        'dasdf_dasdsa_ADdssd__DASsd',
        # '____', error
        (join '', 'x' x 60),
        'add_(efewf)_(sdfsd)',
    ],
    login => [ # 1 .. 20 symbols, 
        'pav_perl',

t/TestData.pm  view on Meta::CPAN

my $manual_created_template_name = $ENV{'template_name'} || 'name';
my $manual_created_template_id = $ENV{'template_id'} || 1;


sub iterate {
    my $hash = shift;
    my $plesk_client = shift;

    my $result_hash = { };

    # initial data
    for (keys %$hash) {
        $result_hash->{$_} = $hash->{$_}->[0];
    }

    check_input_data($result_hash, $plesk_client);

    foreach my $key (keys %$hash) {
        my $old_value = $result_hash->{$key}; # rewrite 

        for my $index (1 .. scalar @{$hash->{$key}} - 1){
            $result_hash->{$key} = $hash->{$key}->[$index];
            check_input_data($result_hash, $plesk_client);
            # warn Dumper $result_hash;
        }
        $result_hash->{$key} = $old_value;
    }

    return $result_hash;
}


sub check_input_data {
    my $params = shift;
    my $plesk_client = shift;

    my $general_info = {
        pname   => $params->{pname},  # utf8 string 
        login   => $params->{login},
        passwd  => $params->{passwd},
        phone   => $params->{phone},
        email   => $params->{email},
        country => $params->{country}, # optional field

t/TestData.pm  view on Meta::CPAN

    my $result_add_by_id = $plesk_client->Accounts->create( 
        general_info    => $general_info,
        'template-name' => $manual_created_template_name 
    );

    delete_all_accounts($plesk_client);
    # warn Dumper($general_info) . "\n" . $result_add_by_id->get_error_string unless
    unless (like( 
        $result_add_by_id->get_id,
        qr/^\d+$/,
        'Create account input data check'
    )) {
        warn $result_add_by_id->get_error_string . "\n" .
             Dumper $general_info;
    }
}


sub gen_passwd {
    my $passwd='';
    for (my $i=0; $i<8; $i++) {

t/TestData.pm  view on Meta::CPAN

      $client->Accounts->delete( all => 1)->is_success,
      1,
      'Delete all accounts'
    );
}


# Sub for create accounts online test
sub create_work_logins {
    my $plesk_client = shift;
    my $data_accumulator_for_online_tests = shift;

    my $result_add_by_id = $plesk_client->Accounts->create( 
        general_info    => create_unique_user_data('crby_login'),
        'template-name' => $manual_created_template_name 
    );

    like(
        $data_accumulator_for_online_tests->{user_id_from_create_with_tmpl_name} = 
        $result_add_by_id->get_id,

        qr/^\d+$/,
        'Create account with template name'
    );

    like(
        $data_accumulator_for_online_tests->{user_id_from_create_with_tmpl_id} = 
            
        $plesk_client->Accounts->create( 
            general_info  => create_unique_user_data('createby_id'),
            'template-id' => $manual_created_template_id
        )->get_id,

        qr/^\d+$/,
        'Create account with template id'
    );
}


sub create_unique_user_data {
    my $unique_id = shift;
    my %result_user_data = %{$test_user_data};

    $result_user_data{'pname'} = $result_user_data{'login'} = "testuser_$unique_id";
    return \%result_user_data;
}


# "Compare" two hashrefs
# Sub for get info online tests
sub _compare {
    my $checked = shift;
    my $template = shift;

    return '' unless ref $checked eq 'HASH' &&  ref $template eq 'HASH';

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/database.t  view on Meta::CPAN

use lib qw(lib t);
use TestData;

BEGIN { 
    plan tests => 6;
    use_ok('API::Plesk::Database'); 
}

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

isa_ok($api->database, 'API::Plesk::Database');

is_deeply(
    $api->database->add_db(
        'webspace-id' => 1,
        name => 'test_db',
        type => 'MySQL',
        bulk_send => 1
    ),
    { 
        'webspace-id' => 1,
        name => 'test_db',
        type => 'MySQL',
    },
    'add_db'
);

is_deeply(
    $api->database->del_db(
        name => 'test_db',
        bulk_send => 1
    ),
    { 
        filter => {name => 'test_db'},
    },
    'del_db'
);
is_deeply(
    $api->database->add_db_user(
        'db-id'   => 1,
        login     => 'test_db_user',
        password  => '12345',
        bulk_send => 1
    ),
    [ 
        {'db-id'   => 1},
        {login     => 'test_db_user'},
        {password  => '12345'},
    ],
    'add_db_user'
);
 is_deeply(
    $api->database->del_db_user(
        'db-id' => 1,
        bulk_send => 1
    ),
    {
        filter => {'db-id' => 1} 
    },
    'del_db_user'
);
 

t/response.t  view on Meta::CPAN

        operation => 'get',
        response  => xml2hash('
<?xml version="1.0" encoding="utf-8"?>
<packet>
    <customer>
        <get>
            <result>
                <status>ok</status>
                <id>123</id>
                <guid>123456</guid>
                <data>
                    <test>qwerty</test>
                </data>
            </result>
        </get>
    </customer>
</packet>', array => ['get', 'result'])
);
ok($res->is_success);
is($res->id, 123);
is($res->guid, 123456);
is($res->results->[0]->{status}, 'ok');
is($res->data->[0]->{test}, 'qwerty');

$res = API::Plesk::Response->new(
        operator  => 'webspace',
        operation => 'add',
        response  => xml2hash(q|
<?xml version="1.0" encoding="UTF-8"?>
<packet version="1.6.3.1"><webspace><add><result><status>error</status><errcode>1018</errcode><errtext>Unable to create hosting on ip 12.34.56.78. Ip address does not exist in client's pool</errtext></result></add></webspace></packet>
|, array => ['add', 'result'])
);
ok(!$res->is_success);

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



( run in 0.489 second using v1.01-cache-2.11-cpan-496ff517765 )