view release on metacpan or search on metacpan
--- #YAML:1.0
name: API-CPanel
version: 0.09
abstract: interface to the CPanel Hosting Panel API ( http://cpanel.net )
author:
- Konstantin Vlasov <knvlasov@reg.ru>
license: unknown
distribution_type: module
configure_requires:
ExtUtils::MakeMaker: 0
build_requires:
ExtUtils::MakeMaker: 0
requires:
Data::Dumper: 0
Exporter::Lite: 0
Getopt::Long: 0
LWP::UserAgent: 0
XML::Simple: 0
no_index:
directory:
- t
- inc
generated_by: ExtUtils::MakeMaker version 6.56
To install this module type the following:
perl Makefile.PL
make
make test
make install
DEPENDENCIES
This module requires these other modules and libraries:
COPYRIGHT AND LICENCE
Put the correct copyright and licence information here.
Copyright (C) 2010 by Vlasov Konstantin
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself, either Perl version 5.10.1 or,
at your option, any later version of Perl 5 you may have available.
lib/API/CPanel.pm view on Meta::CPAN
my $ip_list = API::CPanel::ip::list( $connection_params );
unless ($ip_list && ref $ip_list eq 'ARRAY' && scalar @$ip_list) {
die 'Cannot get ip list from CPanel';
}
my $ip = $ip_list->[0];
my $dname = 'perlaround.ru';
my $user_name = 'user1';
my $client_creation_result = API::CPanel::user::create( {
%{ $connection_params },
username => $user_name,
password => 'user_password',
domain => $dname,
});
# Switch off account:
my $suspend_result = API::CPanel::user::disable( {
%{ $connection_params },
user => $user_name,
} );
unless ( $suspend_result ) {
die "Cannot suspend account";
}
# Switch on account
my $resume_result = API::CPanel::user::enable( {
%{ $connection_params },
user => $user_name,
} );
unless ( $resume_result ) {
die "Cannot resumeaccount";
}
# Delete account
my $delete_result = API::CPanel::user::delete( {
%{ $connection_params },
user => $user_name,
} );
unless ( $delete_result ) {
die "Cannot delete account";
}
=cut
# Last raw answer from server
our $last_answer = '';
# Public!
lib/API/CPanel.pm view on Meta::CPAN
}
# Make query string
# STATIC(HASHREF: params)
sub mk_query_string {
my $params = shift;
return '' unless $params &&
ref $params eq 'HASH' && %$params ;
my $result = join '&', map { "$_=$params->{$_}" } sort keys %$params;
warn $result if $DEBUG;
return $result;
}
# Kill slashes at start / end string
# STATIC(STRING:input_string)
sub kill_start_end_slashes {
my $str = shift;
for ($str) {
s/^\/+//sgi;
s/\/+$//sgi;
lib/API/CPanel.pm view on Meta::CPAN
sub mk_query_to_server {
my $auth_hash = shift;
my $query_string = shift;
return '' unless ( $query_string && $auth_hash );
warn "Auth hash: $auth_hash\nQuery string: $query_string\n" if $DEBUG;
my $ua = LWP::UserAgent->new;
my $request = HTTP::Request->new( GET => $query_string );
$request->header( Authorization => $auth_hash );
my $response = $ua->request( $request );
my $content = $response->content;
if ($response->header('content-type') eq 'text/xml') {
warn $content if $DEBUG;
return $content;
} else {
return '';
}
}
# Parse answer
# STATIC(HASHREF: params)
# params:
lib/API/CPanel.pm view on Meta::CPAN
# Possible very stupid sub :)
# STATIC(REF: our_ref)
sub refs {
my $ref = shift;
return '' unless $ref;
return ref $ref;
}
# INTERNAL!!! Check server answer result
# STATIC(data_block)
sub is_success {
my $data_block = shift;
my $want_hash = shift;
if ( $data_block &&
ref $data_block eq 'HASH' &&
(( $data_block->{status} &&
$data_block->{status} eq '1' ) ||
( $data_block->{result} &&
$data_block->{result} eq '1' ))
) {
return 1;
} else {
return $want_hash ? {} : '';
}
}
# all params derived from get_auth_hash
sub query_abstract {
my %params = @_;
lib/API/CPanel.pm view on Meta::CPAN
$API::CPanel::last_answer = 'auth_hash not found';
warn "auth_hash not found" if $DEBUG;
return '';
}
}
# Abstract sub for action methods
sub action_abstract {
my %params = @_;
my $result = query_abstract(
params => $params{params},
func => $params{func},
container => $params{container},
allowed_fields => $params{allowed_fields},
);
return $params{want_hash} && is_success( $result, $params{want_hash} ) ? $result : is_success( $result );
}
# Abstract sub for fetch arrays
sub fetch_array_abstract {
my %params = @_;
my $result_field = $params{result_field} || '';
my $result_list = [ ];
my $result = query_abstract(
params => $params{params},
func => $params{func},
container => $params{container},
allowed_fields => $params{allowed_fields},
);
return $result_list unless $result;
$result = [ $result ] if ref $result ne 'ARRAY';
foreach my $elem ( @{ $result } ) {
push @$result_list, $result_field ? $elem->{$result_field} : $elem;
};
return $result_list;
}
# Abstract sub for fetch hash
sub fetch_hash_abstract {
my %params = @_;
my $result = query_abstract(
params => $params{params},
func => $params{func},
container => $params{container},
allowed_fields => $params{allowed_fields},
);
my $result_hash = {};
return $result_hash unless $params{key_field};
my $key_field = $params{key_field};
foreach my $each ( @$result ) {
$result_hash->{$each->{$key_field}} = $each;
}
return $result_hash;
}
1;
lib/API/CPanel/Domain.pm view on Meta::CPAN
our $VERSION = 0.09;
# Âîçâðàùàåò ñïèñîê äîìåíîâ
sub list {
my $params = shift;
return API::CPanel::action_abstract(
params => $params,
func => 'listaccts',
container => 'acct',
result_field => 'domain',
want_hash => '1',
);
}
# Èçìåíÿåò îñíîâíîé èï ñàéòà
sub change_site_ip {
my $params = shift;
return API::CPanel::action_abstract(
params => $params,
func => 'setsiteip',
container => 'result',
allowed_fields => 'ip user domain',
);
}
# Äîáàâèòü äîïîëíèòåëüíûé äîìåí
# IN:
# - dir - The path that will serve as the addon domain's home directory.
# - newdomain - The domain name of the addon domain you wish to create. (e.g. sub.example.com).
# - pass - Password to access and edit the addon domain's files.
# - subdomain - This value is the subdomain and FTP username corresponding to the new addon domain.
# http://docs.cpanel.net/twiki/bin/view/ApiDocs/Api2/ApiAddonDomain
sub add_addon_domain {
my $params = shift;
$params->{'cpanel_xmlapi_apiversion'} = 2;
$params->{'user'} = delete $params->{'do_as_user'};
$params->{'cpanel_xmlapi_module'} = 'AddonDomain';
$params->{'cpanel_xmlapi_func'} = 'addaddondomain';
return unless $params->{'user'} &&
$params->{'dir'} &&
$params->{'newdomain'} &&
$params->{'pass'} &&
$params->{'subdomain'};
my $result = API::CPanel::action_abstract(
params => $params,
func => 'cpanel',
want_hash => '1',
allowed_fields => '
user
cpanel_xmlapi_module
cpanel_xmlapi_func
cpanel_xmlapi_apiversion
dir
newdomain
pass
subdomain',
);
return $result;
}
1;
lib/API/CPanel/Ip.pm view on Meta::CPAN
our $VERSION = 0.07;
# Âîçâðàùàåò ñïèñîê ip àäðåñîâ
sub list {
my $params = shift;
return API::CPanel::fetch_array_abstract(
params => $params,
func => 'listips',
container => 'result',
result_field => 'ip',
);
}
# Äîáàâèòü ip
sub add {
my $params = shift;
return API::CPanel::action_abstract(
params => $params,
func => 'addip',
lib/API/CPanel/Misc.pm view on Meta::CPAN
use Data::Dumper;
our $VERSION = 0.07;
# Ïåðåãðóæàåì CPanel
sub reload {
my $params = shift;
return API::CPanel::action_abstract(
params => $params,
func => 'restartservice',
container => 'restart',
allowed_fields => 'service',
);
}
1;
lib/API/CPanel/Mysql.pm view on Meta::CPAN
$params->{'cpanel_xmlapi_module'} = 'Mysql';
$params->{'cpanel_xmlapi_func'} = 'adduser';
$params->{'arg-0'} = delete $params->{'username'};
$params->{'arg-1'} = delete $params->{'password'};
return unless $params->{'user'} &&
$params->{'arg-0'} &&
$params->{'arg-1'};
my $result = API::CPanel::action_abstract(
params => $params,
func => 'cpanel',
want_hash => '1',
allowed_fields => '
user
cpanel_xmlapi_module
cpanel_xmlapi_func
cpanel_xmlapi_apiversion
arg-0
arg-1',
);
return $result->{event}->{result};
}
# Äîáàâëÿåò áàçó mysql
# IN:
# - do_as_user - cPanel ïîëüçîâàòåëü äëÿ êîòîðîãî ñîçäàåòñÿ mysql-áàçà
# - dbname - Èìÿ áä äëÿ ñîçäàíèÿ
# (ôàêòè÷åñêè áóäåò ñîçäàíà áä ñ èìåíåì: <do_as_user>_<dbname>).
sub adddb {
my $params = shift;
lib/API/CPanel/Mysql.pm view on Meta::CPAN
$params->{'cpanel_xmlapi_module'} = 'Mysql';
$params->{'cpanel_xmlapi_func'} = 'adddb';
$params->{'arg-0'} = delete $params->{'dbname'};
return unless $params->{'user'} &&
$params->{'arg-0'};
my $result = API::CPanel::action_abstract(
params => $params,
func => 'cpanel',
want_hash => '1',
allowed_fields => '
user
cpanel_xmlapi_module
cpanel_xmlapi_func
cpanel_xmlapi_apiversion
arg-0',
);
return $result->{event}->{result};
}
# Óñòàíàâëèâàåò ðàçðåøåíèÿ ê áàçå
# IN:
# - do_as_user - cPanel ïîëüçîâàòåëü äëÿ êîòîðîãî ñîçäàåòñÿ mysql-áàçà
# - dbname - Èìÿ áä
# - dbuser - Èìÿ ïîëüçîâàòåëÿ
# - perms_list - Ñïèñîê ðàçðåøåíèé:
# alter => ALTER
# temporary => CREATE TEMPORARY TABLES
lib/API/CPanel/Mysql.pm view on Meta::CPAN
$params->{'arg-0'} = delete $params->{'dbname'};
$params->{'arg-1'} = delete $params->{'dbuser'};
$params->{'arg-2'} = delete $params->{'perms_list'};
return unless $params->{'user'} &&
$params->{'arg-0'} &&
$params->{'arg-1'} &&
$params->{'arg-2'};
my $result = API::CPanel::action_abstract(
params => $params,
func => 'cpanel',
want_hash => '1',
allowed_fields => '
user
cpanel_xmlapi_module
cpanel_xmlapi_func
cpanel_xmlapi_apiversion
arg-0
arg-1
arg-2',
);
return $result->{event}->{result};
}
1;
lib/API/CPanel/Package.pm view on Meta::CPAN
use API::CPanel;
use Data::Dumper;
our $VERSION = 0.07;
# Äîáàâèòü ïàêåò
# name* (string) -- Name of package.
# featurelist (string) -- Name of the feature list to be used when creating a new package.
# quota (integer) -- Disk space quota in Megabytes.
# ip (string) -- Whether or not the domain has a dedicated IP address.
# cgi (boolean) -- Whether or not the domain has CGI access.
# frontpage (boolean) -- Whether or not the domain has FrontPage extensions installed.
# cpmod (string) -- cPanel theme name.
# language (string) -- Language to use in the account's cPanel interface.
# maxftp (string) -- Maximum number of FTP accounts the user can create.
# maxsql (string) -- Maximum number of SQL databases the user can create.
# maxpop (string) -- Maximum number of email accounts the user can create.
# maxlst (string) -- Maximum number of mailing lists the user can create.
# maxsub (string) -- Maximum number of subdomains the user can create.
# maxpark (string) -- Maximum number of parked domains the user can create.
lib/API/CPanel/Package.pm view on Meta::CPAN
# hasshell (boolean) -- Whether or not the domain has shell/SSH access.
# bwlimit (string) -- Bandiwdth limit in Megabytes.
# According to http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/AddPackage
sub add {
my $params = shift;
return API::CPanel::action_abstract(
params => $params,
func => 'addpkg',
container => 'result',
allowed_fields =>
'name
featurelist
quota
ip
cgi
frontpage
cpmod
language
maxftp
lib/API/CPanel/Package.pm view on Meta::CPAN
maxaddon
hasshell
bwlimit',
);
}
# Ðåäàêòèðîâàòü ïàêåò
# name* (string) -- Name of package.
# featurelist (string) -- Name of the feature list to be used when creating a new package.
# quota (integer) -- Disk space quota in Megabytes.
# ip (string) -- Whether or not the domain has a dedicated IP address.
# cgi (boolean) -- Whether or not the domain has CGI access.
# frontpage (boolean) -- Whether or not the domain has FrontPage extensions installed.
# cpmod (string) -- cPanel theme name.
# language (string) -- Language to use in the account's cPanel interface.
# maxftp (string) -- Maximum number of FTP accounts the user can create.
# maxsql (string) -- Maximum number of SQL databases the user can create.
# maxpop (string) -- Maximum number of email accounts the user can create.
# maxlst (string) -- Maximum number of mailing lists the user can create.
# maxsub (string) -- Maximum number of subdomains the user can create.
# maxpark (string) -- Maximum number of parked domains the user can create.
lib/API/CPanel/Package.pm view on Meta::CPAN
# hasshell (boolean) -- Whether or not the domain has shell/SSH access.
# bwlimit (string) -- Bandiwdth limit in Megabytes.
# According to http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/EditPackage
sub edit {
my $params = shift;
return API::CPanel::action_abstract(
params => $params,
func => 'editpkg',
container => 'result',
allowed_fields =>
'name
featurelist
quota
ip
cgi
frontpage
cpmod
language
maxftp
lib/API/CPanel/Package.pm view on Meta::CPAN
# Óäàëèòü ïàêåò
# pkg* (string) -- Name of package.
# According to http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/DeletePackage
sub remove {
my $params = shift;
return API::CPanel::action_abstract(
params => $params,
func => 'killpkg',
container => 'result',
allowed_fields => 'pkg',
);
}
#
sub list {
my $params = shift;
return API::CPanel::action_abstract(
params => $params,
lib/API/CPanel/User.pm view on Meta::CPAN
}
# Âîçâðàùàåò ñïèñîê ïîëüçîâàòåëåé (âîçâðàùàåò ìàññèâ, òîëüêî èìåíà ïîëüçîâàòåëåé)
sub list_simple {
my $params = shift;
return API::CPanel::fetch_array_abstract(
params => $params,
func => 'listaccts',
container => 'acct',
result_field => 'user',
);
}
# Âîçâðàùàåò ÷èñëî àêòèâíûõ ïîëüçîâàòåëåé
sub active_user_count {
my $params = shift;
my $result = API::CPanel::fetch_array_abstract(
params => $params,
func => 'listaccts',
container => 'acct',
result_field => 'suspendtime',
);
my $count = 0;
foreach my $elem ( @$result ) {
$count++ if ref $elem eq "HASH";
};
return $count;
}
# Ñîçäàòü ïîëüçîâàòåëÿ
# username* (string) -- User name.
# domain* (string) -- Domain name.
# plan (string) -- Package to use for account creation.
# pkgname (string) -- Name of a new package to be created based on the settings used.
# savepkg (bool) -- Save the settings used as a new package.
# featurelist (string) -- Name of the feature list to be used when creating a new package.
# quota (integer) -- Disk space quota in Megabytes.
# password (string) -- Password for accessing cPanel.
# ip (string) -- Whether or not the domain has a dedicated IP address.
# cgi (boolean) -- Whether or not the domain has CGI access.
# frontpage (boolean) -- Whether or not the domain has FrontPage extensions installed.
# hasshell (boolean) -- Whether or not the domain has shell/SSH access.
# contactemail (string) -- Contact email address for the account.
# cpmod (string) -- cPanel theme name.
# maxftp (string) -- Maximum number of FTP accounts the user can create.
# maxsql (string) -- Maximum number of SQL databases the user can create.
# maxpop (string) -- Maximum number of email accounts the user can create.
# maxlst (string) -- Maximum number of mailing lists the user can create.
# maxsub (string) -- Maximum number of subdomains the user can create.
# maxpark (string) -- Maximum number of parked domains the user can create.
# maxaddon (string) -- Maximum number of addon domains the user can create.
# bwlimit (string) -- Bandiwdth limit in Megabytes.
# customip (string) -- Specific IP address for the site.
# language (string) -- Language to use in the account's cPanel interface.
# useregns (boolean) -- Use the registered nameservers for the domain instead of the ones configured on the server.
# hasuseregns (boolean) -- Set to 1 if you are using the above option.
# reseller (boolean) -- Give reseller privileges to the account.
# forcedns (boolean) -- Overwrite current DNS Zone if a DNS Zone already exists.
# mxcheck (enum) -- Determines how the server will handle incoming mail for this domain.
# According to http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/CreateAccount
sub create {
my $params = shift;
return API::CPanel::action_abstract(
params => $params,
func => 'createacct',
container => 'result',
want_hash => $params->{want_hash},
allowed_fields =>
'username
domain
plan
pkgname
savepkg
featurelist
quota
password
lib/API/CPanel/User.pm view on Meta::CPAN
maxpop
maxlst
maxsub
maxpark
maxaddon
bwlimit
customip
language
useregns
hasuseregns
reseller
forcedns
mxcheck',
);
}
# Edit user data
# user* (string) -- User name of the account.
# domain (string) -- Domain name.
# newuser (string) -- Used when changing the username of an account. This will be the new username.
# owner (string) -- Change the owner of the account to the specified owner.
lib/API/CPanel/User.pm view on Meta::CPAN
# maxaddon (string) -- Maximum number of addon domains the user can create.
# shell (boolean) -- Whether or not the domain has shell/SSH access.
# According to http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AutomationIntegration/ModifyAccount
sub edit {
my $params = shift;
return API::CPanel::action_abstract(
params => $params,
func => 'modifyacct',
container => 'result',
allowed_fields =>
'user
domain
newuser
owner
CPTHEME
HASCGI
LANG
LOCALE
MAXFTP
lib/API/CPanel/User.pm view on Meta::CPAN
}
# Delete user from panel
# user* -- user name
sub delete {
my $params = shift;
return API::CPanel::action_abstract(
params => $params,
func => 'removeacct',
container => 'result',
allowed_fields => 'user',
);
}
# Switch on user account
# user* -- user name
sub enable {
my $params = shift;
return API::CPanel::action_abstract(
params => $params,
func => 'unsuspendacct',
container => 'result',
allowed_fields => 'user',
);
}
# Switch off user account
# user* -- user name
# reason -- reason of suspend
sub disable {
my $params = shift;
return API::CPanel::action_abstract(
params => $params,
func => 'suspendacct',
container => 'result',
allowed_fields => 'user reason',
);
}
# This function changes the hosting package associated with a cPanel account.
# user* -- user name
# pkg -- Name of the package that the account should use.
sub change_package {
my $params = shift;
return API::CPanel::action_abstract(
params => $params,
func => 'changepackage',
container => 'result',
allowed_fields => 'user pkg',
);
}
# This function changes the password of a domain owner (cPanel) or reseller (WHM) account
# user* -- user name
# pass* -- New password for the user.
sub change_account_password {
my $params = shift;
return API::CPanel::action_abstract(
params => $params,
func => 'passwd',
container => 'passwd',
allowed_fields => 'user pass',
t/01-test.t view on Meta::CPAN
use strict;
use warnings;
use lib qw( ./lib );
use Data::Dumper;
our $ONLINE;
BEGIN {
#$ENV{auth_user} = 'restest';
#$ENV{auth_passwd} = '123';
#$ENV{host} = '192.168.123.1';
$ONLINE = $ENV{auth_user} && $ENV{auth_passwd} && $ENV{host};
}
my $manipulate_user = 'zsezse';
use Test::More tests => $ONLINE ? 61 : 61;
my $test_host = $ENV{host} || '127.0.0.1';
t/01-test.t view on Meta::CPAN
auth_passwd => $ENV{auth_passwd} || 'fake_pass',
host => $test_host,
);
$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<listips>
<result>
<active>1</active>
<dedicated>0</dedicated>
<if>eth0</if>
<ip>192.168.123.208</ip>
<mainaddr>1</mainaddr>
<netmask>255.255.255.0</netmask>
<network>192.168.123.0</network>
<removable>0</removable>
<used>1</used>
</result>
<result>
<active>1</active>
<dedicated>1</dedicated>
<if>eth0:1</if>
<ip>192.168.123.222</ip>
<mainaddr>0</mainaddr>
<netmask>255.255.255.0</netmask>
<network>192.168.123.0</network>
<removable>1</removable>
<used>0</used>
</result>
<result>
<active>1</active>
<dedicated>1</dedicated>
<if>virbr0</if>
<ip>192.168.122.1</ip>
<mainaddr>0</mainaddr>
<netmask>255.255.255.0</netmask>
<network>192.168.122.0</network>
<removable>1</removable>
<used>0</used>
</result>
</listips>
THEEND
#$API::CPanel::DEBUG=1;
my $ip_list = API::CPanel::Ip::list(
{
%correct_params,
}
);
my $main_shared_ip = $ip_list->[0];
#diag "Get ips from panel: " . Dumper( $ip_list ) . scalar @$ip_list;
ok($ip_list && ref $ip_list eq 'ARRAY' && scalar @$ip_list, 'API::CPanel::Ip::list');
#$API::CPanel::DEBUG=0;
$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<createacct>
<result>
<options>
<ip>192.168.123.208</ip>
<nameserver>ns1.centostest.ru</nameserver>
<nameserver2>ns2.centostest.ru</nameserver2>
<nameserver3></nameserver3>
<nameserver4></nameserver4>
<nameservera></nameservera>
<nameservera2></nameservera2>
<nameservera3></nameservera3>
<nameservera4></nameservera4>
<nameserverentry></nameserverentry>
<nameserverentry2></nameserverentry2>
<nameserverentry3></nameserverentry3>
<nameserverentry4></nameserverentry4>
<package>default</package>
</options>
<rawout>
</rawout>
<status>1</status>
<statusmsg>Account Creation Ok</statusmsg>
</result>
</createacct>
THEEND
my $result = API::CPanel::User::create(
{
%correct_params,
username => $manipulate_user,
domain => 'zse1.ru',
password => 'sdfdsGdhd',
maxsql => 11,
}
);
is( $result, 1, 'API::CPanel::User::create' );
$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<createacct>
<result>
<options></options>
<rawout></rawout>
<status>0</status>
<statusmsg>Sorry, a group for that username already exists.</statusmsg>
</result>
</createacct>
THEEND
$result = API::CPanel::User::create(
{
%correct_params,
username => $manipulate_user,
password => 'sdfdsGdhd',
domain => 'zse1.ru',
}
);
is( $result, '', 'API::CPanel::User::create repeat');
$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<passwd>
<passwd>
<rawout>Changing password for zsezse
Password for zsezse has been changed
Updating ftp passwords for zsezse
Ftp password files updated.
Ftp vhost passwords synced
</rawout>
t/01-test.t view on Meta::CPAN
<services>
<app>mySQL</app>
</services>
<status>1</status>
<statusmsg>Password changed for user zsezse</statusmsg>
</passwd>
</passwd>
THEEND
$result = API::CPanel::User::change_account_password(
{
%correct_params,
user => $manipulate_user,
pass => 'sdfdsfsdfhsdfj',
}
);
is( $result, 1, 'API::CPanel::User::change_account_password');
$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<modifyacct>
<result>
<newcfg>
<cpuser>
<BWLIMIT>unlimited</BWLIMIT>
<CONTACTEMAIL></CONTACTEMAIL>
<CONTACTEMAIL2></CONTACTEMAIL2>
<DEMO>0</DEMO>
<DOMAIN>zse1.ru</DOMAIN>
<FEATURELIST>default</FEATURELIST>
<HASCGI>1</HASCGI>
<IP>192.168.123.208</IP>
t/01-test.t view on Meta::CPAN
<RS>x</RS>
<STARTDATE>1269406518</STARTDATE>
<USER>zseasd</USER>
</cpuser>
<domain>zse1.ru</domain>
<setshell>unmodified</setshell>
<user>zseasd</user>
</newcfg>
<status>1</status>
<statusmsg>Account Modified</statusmsg>
</result>
</modifyacct>
THEEND
$result = API::CPanel::User::edit(
{
%correct_params,
user => $manipulate_user,
maxsql => 14,
locale => 'ru',
cptheme => 'x',
}
);
is( $result, 1, 'API::CPanel::User::edit');
$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<listaccts>
<acct>
<disklimit>unlimited</disklimit>
<diskused>0M</diskused>
<domain>qewqe.ru</domain>
<email>*unknown*</email>
<ip>192.168.123.208</ip>
<maxaddons>*unknown*</maxaddons>
t/01-test.t view on Meta::CPAN
<status>1</status>
<statusmsg>Ok</statusmsg>
</listaccts>
THEEND
my $active_count = API::CPanel::User::active_user_count(
{
%correct_params,
}
);
ok( $result =~ /^\d+$/ , 'API::CPanel::User::active_user_count');
$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<suspendacct>
<result>
<status>1</status>
<statusmsg><script>if (self[]) { clear_ui_status(); }</script>
Changing Shell to /bin/false...Changing shell for zseasd.
Warning: "/bin/false" is not listed in /etc/shells
Shell changed.
Done
Locking Password...Locking password for user zseasd.
passwd: Success
Done
Suspending mysql users
Notification => root\@localhost via EMAIL [level => 3]
Using Quota v3 Support
Suspended document root /home/zseasd/public_html
Using Quota v3 Support
Suspending FTP accounts...
Updating ftp passwords for zseasd
Ftp password files updated.
Ftp vhost passwords synced
zseasds account has been suspended
</statusmsg>
</result>
</suspendacct>
THEEND
$result = API::CPanel::User::disable(
{
%correct_params,
user => $manipulate_user,
reason => 'test reason1',
}
);
is( $result, 1, 'API::CPanel::User::disable');
$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<listaccts>
<acct>
<disklimit>unlimited</disklimit>
<diskused>0M</diskused>
<domain>qewqe.ru</domain>
<email>*unknown*</email>
<ip>192.168.123.208</ip>
<maxaddons>*unknown*</maxaddons>
t/01-test.t view on Meta::CPAN
<suspendtime></suspendtime>
<theme>x3</theme>
<unix_startdate>1269249671</unix_startdate>
<user>zseru</user>
</acct>
<status>1</status>
<statusmsg>Ok</statusmsg>
</listaccts>
THEEND
$result = API::CPanel::User::active_user_count(
{
%correct_params,
}
);
is( $result, $active_count - 1, 'API::CPanel::User::active_user_count');
$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<suspendacct>
<result>
<status>1</status>
<statusmsg><script>if (self['clear_ui_status']) { clear_ui_status(); }</script>
Changing Shell to /bin/false...Changing shell for zseasd.
Warning: "/bin/false" is not listed in /etc/shells
Shell not changed.
Done
Locking Password...Locking password for user zseasd.
passwd: Success
Done
Suspending mysql users
Notification => root\@localhost via EMAIL [level => 3]
Account Already Suspended
</statusmsg>
</result>
</suspendacct>
THEEND
$result = API::CPanel::User::disable(
{
%correct_params,
user => $manipulate_user,
reason => 'test reason2',
}
);
is( $result, 1, 'API::CPanel::User::disable repeat');
$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<unsuspendacct>
<result>
<status>1</status>
<statusmsg><script>if (self['clear_ui_status']) { clear_ui_status(); }</script>
Changing shell for zseasd.
Shell changed.
Unlocking password for user zseasd.
passwd: Success.
Unsuspending FTP accounts...
Updating ftp passwords for zseasd
Ftp password files updated.
Ftp vhost passwords synced
zseasds account is now active
Unsuspending mysql users
Notification => root\@localhost via EMAIL [level => 3]
</statusmsg>
</result>
</unsuspendacct>
THEEND
$result = API::CPanel::User::enable(
{
%correct_params,
user => $manipulate_user,
}
);
is( $result, 1, 'API::CPanel::User::enable');
$result = API::CPanel::User::enable(
{
%correct_params,
user => $manipulate_user,
}
);
is( $result, 1, 'API::CPanel::User::enable repeat');
$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<listaccts>
<acct>
<disklimit>unlimited</disklimit>
<diskused>0M</diskused>
<domain>qewqe.ru</domain>
<email>*unknown*</email>
<ip>192.168.123.208</ip>
<maxaddons>*unknown*</maxaddons>
t/01-test.t view on Meta::CPAN
<suspendtime></suspendtime>
<theme>x3</theme>
<unix_startdate>1269249671</unix_startdate>
<user>zseru</user>
</acct>
<status>1</status>
<statusmsg>Ok</statusmsg>
</listaccts>
THEEND
$result = API::CPanel::User::list(
{
%correct_params,
}
);
ok( ref $result eq 'HASH' && scalar %$result, 'API::CPanel::User::list');
$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<listaccts>
<acct>
<disklimit>unlimited</disklimit>
<diskused>0M</diskused>
<domain>qewqe.ru</domain>
<email>*unknown*</email>
<ip>192.168.123.208</ip>
t/01-test.t view on Meta::CPAN
<suspendtime></suspendtime>
<theme>x3</theme>
<unix_startdate>1269249522</unix_startdate>
<user>qewqeru</user>
</acct>
<status>1</status>
<statusmsg>Ok</statusmsg>
</listaccts>
THEEND
$result = API::CPanel::User::list_simple(
{
%correct_params,
}
);
ok( ref $result eq 'ARRAY' && scalar @$result, 'API::CPanel::User::list_simple');
$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<restartservice>
<restart>
<rawout>Apache successfully restarted.</rawout>
<result>1</result>
<service>httpd</service>
<servicename>Apache Web Server</servicename>
</restart>
</restartservice>
THEEND
$result = API::CPanel::Misc::reload(
{
%correct_params,
service => 'httpd',
}
);
is( $result, 1, 'API::CPanel::Misc::reload');
$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<addpkg>
<result>
<pkg>Host-3</pkg>
<status>1</status>
<statusmsg>Created the package Host-343</statusmsg>
</result>
</addpkg>
THEEND
$result = API::CPanel::Package::add(
{
%correct_params,
name => 'Host-343',
quota => 110,
frontpage => 1,
maxlsts => 15,
maxsql => 99,
}
);
is( $result, 1, 'API::CPanel::Package::add');
$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<changepackage>
<result>
<rawout><pre>
Changing bwlimit to unlimited Meg
Changing Feature List to default
Changing max pop accounts from unlimited to unlimited
Changing max sql accounts from 14 to 99
Changing max ftp accounts from unlimited to unlimited
Changing max lists from unlimited to unlimited
Changing max sub domains from unlimited to unlimited
Changing language from ru to en
Changing max parked domains from 0 to 0
Changing max addon domains from 0 to 0
Shell Access Set Correctly (noshell)
Changing cPanel theme from x to
Changing plan from default to Host-343
Resetting QUOTA....
Using Quota v3 Support
Bandwidth limit (0) is lower than (unlimited) (all limits removed)<br /><blockquote><div style='float:left;'>Enabling...</div><div style='float:left;'>...zse1.ru...</div><div style='float:left;'>Done</div&...
</rawout>
<status>1</status>
<statusmsg>Account Upgrade/Downgrade Complete for zsezse</statusmsg>
</result>
</changepackage>
THEEND
$result = API::CPanel::User::change_package(
{
%correct_params,
user => $manipulate_user,
pkg => 'Host-343',
}
);
is( $result, 1, 'API::CPanel::User::change_package');
$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<editpkg>
<result>
<pkg>Host-3</pkg>
<status>1</status>
<statusmsg>Modified the package Host-343</statusmsg>
</result>
</editpkg>
THEEND
$result = API::CPanel::Package::edit(
{
%correct_params,
name => 'Host-343',
quota => 100,
frontpage => 0,
maxlsts => 45,
}
);
is( $result, 1, 'API::CPanel::Package::edit');
$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<listpkgs>
<package>
<name>Host-1</name>
<BWLIMIT>100</BWLIMIT>
<CGI>y</CGI>
<CPMOD>x3</CPMOD>
<FEATURELIST>default</FEATURELIST>
<FRONTPAGE>n</FRONTPAGE>
t/01-test.t view on Meta::CPAN
<MAXPOP>unlimited</MAXPOP>
<MAXSQL>unlimited</MAXSQL>
<MAXSUB>unlimited</MAXSUB>
<QUOTA>100</QUOTA>
</package>
</listpkgs>
THEEND
#$API::CPanel::DEBUG=1;
$result = API::CPanel::Package::list(
{
%correct_params,
}
);
ok( $result && ref $result eq 'HASH' , 'API::CPanel::Package::list');
#warn Dumper $result;
$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<killpkg>
<result>
<status>1</status>
<statusmsg>The package was successfully deleted.</statusmsg>
</result>
</killpkg>
THEEND
$result = API::CPanel::Package::remove(
{
%correct_params,
pkg => 'Host-343',
}
);
is( $result, 1, 'API::CPanel::Package::remove');
# òåñò äîáàâëåíèÿ IP è ñìåíû îñí. IP ñàéòà
$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<addip>
<addip>
<msgs>eth0:4 is now up. 192.168.123.150/255.255.255.0 broadcast 192.168.123.255 has been added
System has 1 free ip.</msgs>
<status>1</status>
<statusmsg>Success</statusmsg>
</addip>
</addip>
THEEND
$result = API::CPanel::Ip::add(
{
%correct_params,
ip => '192.168.123.150',
netmask => '255.255.255.0',
}
);
is( $result, 1, 'API::CPanel::Ip::add');
$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<setsiteip>
<result>
<status>1</status>
<statusmsg></statusmsg>
</result>
</setsiteip>
THEEND
$result = API::CPanel::Domain::change_site_ip(
{
%correct_params,
ip => '192.168.123.150',
user => $manipulate_user,
}
);
is( $result, 1, 'API::CPanel::Domain::change_site_ip');
$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<setsiteip>
<result>
<status>1</status>
<statusmsg></statusmsg>
</result>
</setsiteip>
THEEND
$result = API::CPanel::Domain::change_site_ip(
{
%correct_params,
ip => $main_shared_ip,
user => $manipulate_user,
}
);
is( $result, 1, 'API::CPanel::Domain::change_site_ip to main_shared_ip');
$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<delip>
<delip>
<status>1</status>
<statusmsg>eth0:4 is now down, 192.168.123.150 has been removed</statusmsg>
</delip>
</delip>
THEEND
$result = API::CPanel::Ip::remove(
{
%correct_params,
ip => '192.168.123.150',
}
);
is( $result, 1, 'API::CPanel::Ip::remove');
$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<removeacct>
<result>
<rawout>Running pre removal script (/scripts/prekillacct)......DoneCollecting Domain Name and IP...User: zseasd
Domain: zse1.ru
...DoneKilling all processes owned by user......DoneCleaning passwd,shadow,group......DoneRemoving User from Group..........DoneRemoving Web Logs......DoneRemoving Bandwidth Files......DoneRemoving Crontab......DoneRemoving Virtual Hosts...Removed zs...
Removed Entry from httpd.conf
...DoneRemoving MySQL databases and users......DoneRemoving PostgreSQL databases and users......DoneRemoving System User......DoneRemoving Group......DoneRemoving DNS Entries...zse1.ru => deleted from www.
...DoneRemoving Email Setup...Removing /etc/valiases/zse1.ru
...DoneRemoving mailman lists......DoneUpdating Databases......DoneRemoving Counter Data......DoneAdding ip back to the ip address pool...System has 2 free ips.
...DoneRemoving users cPanel Databases & Updating......DoneReloading Services......DoneRemoving mail and service configs...
...DoneSending Contacts......DoneUpdating internal databases...Updating ftp passwords for zseasd
Purging ftp user zseasd
Ftp password files updated.
Ftp vhost passwords synced
...DoneRunning post removal scripts (/scripts/legacypostkillacct, /scripts/postkillacct)......DoneAccount Removal Complete!!!...zseasd account removed...Done</rawout>
<status>1</status>
<statusmsg>zseasd account removed</statusmsg>
</result>
</removeacct>
THEEND
$result = API::CPanel::User::delete(
{
%correct_params,
user => $manipulate_user,
}
);
is( $result, 1, 'API::CPanel::User::delete');
$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<removeacct>
<result>
<rawout></rawout>
<status>0</status>
<statusmsg>Warning!.. system user zseasd does not exist!
</statusmsg>
</result>
</removeacct>
THEEND
$result = API::CPanel::User::delete(
{
%correct_params,
user => $manipulate_user,
}
);
is( $result, '', 'API::CPanel::User::delete repeat');
#diag Dumper( $result );
# Mysql òåñòû
$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<?xml version="1.0" ?>
<cpanelresult>
<module>Mysql</module>
<func>adduser</func>
<type>event</type>
<source>internal</source>
<apiversion>1</apiversion>
<data>
<result></result>
</data>
<event>
<result>1</result>
</event>
</cpanelresult>
THEEND
$result = API::CPanel::Mysql::adduser(
{
%correct_params,
do_as_user => 'zsezse5',
username => 'test13',
password => 'test13pass',
}
);
is( $result, 1, 'API::CPanel::Mysql::adduser');
$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<?xml version="1.0" ?>
<cpanelresult>
<module>Mysql</module>
<func>adddb</func>
<type>event</type>
<source>internal</source>
<apiversion>1</apiversion>
<data>
<result></result>
</data>
<event>
<result>1</result>
</event>
</cpanelresult>
THEEND
$result = API::CPanel::Mysql::adddb(
{
%correct_params,
do_as_user => 'zsezse5',
dbname => 'default',
}
);
is( $result, 1, 'API::CPanel::Mysql::adddb');
$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<?xml version="1.0" ?>
<cpanelresult>
<module>Mysql</module>
<func>adduserdb</func>
<type>event</type>
<source>internal</source>
<apiversion>1</apiversion>
<data>
<result></result>
</data>
<event>
<result>1</result>
</event>
</cpanelresult>
THEEND
$result = API::CPanel::Mysql::grant_perms(
{
%correct_params,
do_as_user => 'zsezse5',
dbname => 'zsezse5_default',
dbuser => 'zsezse5_test13',
perms_list => 'all',
}
);
is( $result, 1, 'API::CPanel::Mysql::grant_perms');
$API::CPanel::FAKE_ANSWER = ! $ONLINE ? <<THEEND : undef;
<?xml version="1.0" ?>
<cpanelresult>
<apiversion>2</apiversion>
<data>
<reason>
aaaaa.asdasd.ru was successfully parked on top of aaaaa.x
</reason>
<result>1</result>
</data>
<event>
<result>1</result>
</event>
<func>addaddondomain</func>
<module>AddonDomain</module>
</cpanelresult>
THEEND
my $addondomain = 'ssssss.ru';
my $subdomain = 'ssssss';
$result = API::CPanel::Domain::add_addon_domain(
{
%correct_params,
do_as_user => 'zsezse5',
dir => "public_html/$addondomain",
newdomain => $addondomain,
pass => 'asdsadasdsad',
subdomain => $subdomain,
}
);
is( $result->{data}->{result}, 1 , 'API::CPanel::Domain::add_addon_domain');