view release on metacpan or search on metacpan
- 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
1.02 2008-03-22
- Fixed errors in pod documentation
- Fixed bug with keys sorting in Methods.pm (thanks to CPAN testers)
1.01 2008-03-20
- Fixed errors in pod documentation
- Fixed bug in Tariff Plan Change sub (Complex.pm)
1.00 2008-03-18
- The first public release
lib/API/Plesk.pm view on Meta::CPAN
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']],
);
# constructor
sub new {
my $class = shift;
$class = ref ($class) || $class;
my $self = {
username => '',
password => '',
secret_key => '',
url => '',
api_version => '1.6.3.1',
debug => 0,
lib/API/Plesk.pm view on Meta::CPAN
if (!$self->{secret_key}) {
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};
lib/API/Plesk.pm view on Meta::CPAN
}
return API::Plesk::Response->new(
operator => $operator,
operation => $operation,
response => $response,
error => $error,
);
}
sub bulk_send { confess "Not implemented!" }
# Send xml request to plesk api
sub xml_http_req {
my ($self, $xml) = @_;
# HTTP::Request undestends only bytes
utf8::encode($xml) if utf8::is_utf8($xml);
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});
lib/API/Plesk.pm view on Meta::CPAN
}
$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};
$ua->request($req);
};
alarm 0;
warn $res->as_string if defined $self->{debug} && $self->{debug} > 1;
return ('', 'connection timeout')
if !$res || $@ || ref $res && $res->status_line =~ /connection timeout/;
return $res->is_success() ?
($res->content(), '') :
('', $res->status_line);
}
# renders xml packet for request
sub render_xml {
my ($self, $hash) = @_;
my $xml = _render_xml($hash);
$xml = qq|<?xml version="1.0" encoding="UTF-8"?><packet version="$self->{api_version}">$xml</packet>|;
$xml;
}
# renders xml from hash
sub _render_xml {
my ( $hash ) = @_;
return $hash unless ref $hash;
my $xml = '';
for my $tag ( keys %$hash ) {
my $value = $hash->{$tag};
if ( ref $value eq 'HASH' ) {
$value = _render_xml($value);
lib/API/Plesk.pm view on Meta::CPAN
else {
$xml .= "<$tag>$value</$tag>";
}
}
$xml;
}
# initialize components
sub init_components {
my ( %c ) = @_;
my $caller = caller;
for my $alias ( keys %c ) {
my $classes = $c{$alias};
my $sub = sub {
my( $self ) = @_;
$self->{"_$alias"} ||= $self->load_component($classes);
return $self->{"_$alias"} || confess "Not implemented!";
};
no strict 'refs';
*{"$caller\::$alias"} = $sub;
}
}
# loads component package and creates object
sub load_component {
my ( $self, $classes ) = @_;
my $version = version->parse($self->{api_version});
for my $item ( @$classes ) {
# select compitable version of component
if ( $version >= $item->[0] ) {
my $pkg = 'API::Plesk::' . $item->[1];
lib/API/Plesk/Component.pm view on Meta::CPAN
package API::Plesk::Component;
use strict;
use warnings;
use Carp;
sub new {
my ( $class, %attrs ) = @_;
$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};
}
}
}
# sort params in right order
sub sort_params {
my ( $self, $params, @fields ) = @_;
my @sorted;
for my $key ( @fields ) {
if ( ref $key ) {
($key) = grep { exists $params->{$_} } @$key
}
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};
lib/API/Plesk/Component.pm view on Meta::CPAN
return;
}
elsif ( $type eq 'none' ) {
$hosting->{$type} = '';
return;
}
confess "Unknown hosting type!";
}
sub prepare_filter {
my ( $self, $filter, %opts ) = @_;
my @filter;
my $sort = $opts{sort_keys} || [keys %$filter];
for my $key ( @$sort ) {
if ( ref $filter->{$key} eq 'ARRAY' ) {
for my $value ( @{$filter->{$key}} ) {
push @filter, { $key => $value };
}
lib/API/Plesk/Component.pm view on Meta::CPAN
=head1 NAME
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
fax
email
address
city
state
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 {
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);
}
lib/API/Plesk/DNS.pm view on Meta::CPAN
package API::Plesk::DNS;
use strict;
use warnings;
use Carp;
use base 'API::Plesk::Component';
sub add_rec {
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};
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);
}
lib/API/Plesk/Database.pm view on Meta::CPAN
package API::Plesk::Database;
use strict;
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 = {
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);
}
lib/API/Plesk/FTPUser.pm view on Meta::CPAN
use strict;
use warnings;
use Carp;
use Data::Dumper;
use base 'API::Plesk::Component';
#TODO
sub add {
my ( $self, %params ) = @_;
my $bulk_send = delete $params{bulk_send};
my @sort_fields = (
'name',
'password',
'home',
'create_non_existent',
'quota',
'permissions',
lib/API/Plesk/FTPUser.pm view on Meta::CPAN
);
$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',
lib/API/Plesk/FTPUser.pm view on Meta::CPAN
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);
}
lib/API/Plesk/Mail.pm view on Meta::CPAN
package API::Plesk::Mail;
use strict;
use warnings;
use Carp;
use Data::Dumper;
use base 'API::Plesk::Component';
sub enable {
my ($self, %filter) = @_;
my $bulk_send = delete $filter{bulk_send};
return $bulk_send ? \%filter :
$self->plesk->send('mail', 'enable', \%filter);
}
sub disable {
my ($self, %filter) = @_;
my $bulk_send = delete $filter{bulk_send};
return $bulk_send ? \%filter :
$self->plesk->send('mail', 'disable', \%filter);
}
1;
lib/API/Plesk/Mock.pm view on Meta::CPAN
package API::Plesk::Mock;
use strict;
use warnings;
use base 'API::Plesk';
sub mock_response {
$_[0]->{mock_response} = $_[1] if @_ > 1;
$_[0]->{mock_response};
}
sub mock_error {
$_[0]->{mock_error} = $_[1] if @_ > 1;
$_[0]->{mock_error};
}
sub xml_http_req { ($_[0]->{mock_response}, $_[0]->{mock_error}) }
1;
__END__
=head1 NAME
API::Plesk::Mock - Module for testing API::Plesk without sending real requests to Plesk API.
=head1 SYNOPSIS
lib/API/Plesk/Response.pm view on Meta::CPAN
package API::Plesk::Response;
use strict;
use warnings;
use Data::Dumper;
sub new {
my ( $class, %attrs) = @_;
$class = ref $class || $class;
my $operator = $attrs{operator};
my $operation = $attrs{operation};
my $response = $attrs{response};
my $results = [];
my $is_success = 1;
# internal API::Plesk error
lib/API/Plesk/Response.pm view on Meta::CPAN
my $self = {
results => $results,
operator => $operator,
operation => $operation,
is_success => $is_success,
};
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]; }
sub error {
my ( $self ) = @_;
return ($self->{results}->[0]->{errcode} || '0') . ': ' . $self->{results}->[0]->{errtext};
}
sub error_codes {
my ( $self ) = @_;
return [] if $self->is_success;
return [ map { $_->{errcode} || () } @{$self->{results}} ];
}
sub error_texts {
my ( $self ) = @_;
return [] if $self->is_success;
return [ map { $_->{errtext} || () } @{$self->{results}} ];
}
sub errors {
my ( $self ) = @_;
return [] if $self->is_success;
my @errors;
for ( @{$self->{results}} ) {
my $error = ($_->{errcode} || '0') . ': ' . $_->{errtext};
push @errors, $error;
}
return \@errors;
}
sub is_connection_error {
my ( $self ) = @_;
return
$self->error_text =~ /connection failed/ ||
$self->error_text =~ /connection timeout/ ||
$self->error_text =~ /500\s+/
? 1 : 0;
}
1;
lib/API/Plesk/ServicePlan.pm view on Meta::CPAN
preferences
hosting
performance
permissions
external-id
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);
}
lib/API/Plesk/ServicePlanAddon.pm view on Meta::CPAN
use Carp;
use base 'API::Plesk::Component';
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 :
lib/API/Plesk/Site.pm view on Meta::CPAN
use strict;
use warnings;
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 : ''
};
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',
lib/API/Plesk/SiteAlias.pm view on Meta::CPAN
package API::Plesk::SiteAlias;
use strict;
use warnings;
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 = {
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);
}
lib/API/Plesk/SiteBuilder.pm view on Meta::CPAN
use strict;
use warnings;
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;
lib/API/Plesk/User.pm view on Meta::CPAN
login
passwd
owner-guid
owner-external-id
name
contact-info
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);
}
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);
}
lib/API/Plesk/WebUser.pm view on Meta::CPAN
use strict;
use warnings;
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};
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);
}
lib/API/Plesk/Webspace.pm view on Meta::CPAN
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 : ''
};
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 :
t/TestData.pm view on Meta::CPAN
password => 'qwerty',
url => $plesk_url,
debug => 0,
);
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];
}
t/TestData.pm view on Meta::CPAN
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
$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++) {
$passwd .= chr(rand( 0x3E ));
}
$passwd =~ tr/\x00-\x3D/A-Za-z0-9/;
return $passwd;
}
# Delete all accounts
# STATIC(plesk_client)
sub delete_all_accounts {
my $client = shift;
is_deeply(
$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} =
t/TestData.pm view on Meta::CPAN
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';
foreach my $key (keys %$template) {
my $key_name_from; # field name in response from Plesk
my $key_name_to; # field name
# in request to Plesk field named "passwd"
t/TestData.pm view on Meta::CPAN
return '';
}
}
return 1;
}
# Light weight Exporter
sub import {
no strict 'refs';
my $called_from = caller;
foreach my $package_sub (@EXPORT) {
# importing our sub into caller`s namespace
*{$called_from . '::' . $package_sub} = \&$package_sub;
}
}
1;
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 => [