view release on metacpan or search on metacpan
add_database.pl
add_mailbox.pl
add_www_domain.pl
Changes
lib/API/ISPManager.pm
lib/API/ISPManager/backup.pm
lib/API/ISPManager/db.pm
lib/API/ISPManager/diskpreset.pm
lib/API/ISPManager/dns.pm
lib/API/ISPManager/domain.pm
lib/API/ISPManager/file.pm
lib/API/ISPManager/vds.pm
lib/API/ISPManager/vdspreset.pm
Makefile.PL
MANIFEST This list of files
README
runtests.sh
t/01-test.t
t/02-files.t
upload_file.pl
vdsmanager.pl
META.yml Module meta-data (added by MakeMaker)
Makefile.PL view on Meta::CPAN
# 'XML::LibXML' => '0',
'Crypt::SSLeay' => '0',
# 'LWP::Protocol::https::Socket' => '0',
'XML::Simple' => '0',
'Getopt::Long' => '0',
},
($] >= 5.005 ? ## Add these new keywords supported since 5.005
(ABSTRACT_FROM => 'lib/API/ISPManager.pm', # retrieve abstract from module
'EXE_FILES' => [
'vdsmanager.pl',
'add_database.pl',
'add_www_domain.pl',
'add_mailbox.pl',
],
AUTHOR => 'nrg <nrg@cpan.org>') : ()),
);
add_database.pl view on Meta::CPAN
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use API::ISPManager;
#
# Script for add databases account to certain user account in ISPManager
#
die "Params required: host / username / password / db_name / db_user / db_password\n" unless scalar @ARGV == 6;
my $host = $ARGV[0];
my $login = $ARGV[1];
my $password = $ARGV[2];
my $db_name = $ARGV[3];
my $db_user = $ARGV[4];
my $db_pass = $ARGV[5];
lib/API/ISPManager.pm view on Meta::CPAN
# VDSManager
use API::ISPManager::vds;
use API::ISPManager::diskpreset;
use API::ISPManager::vdspreset;
# BillManager
use API::ISPManager::software;
use API::ISPManager::order;
our @EXPORT = qw/get_auth_id refs is_success get_data query_abstract is_ok get_error/;
our @EXPORT_OK = qw//;
our $VERSION = 0.07;
our $DEBUG = '';
=head1 NAME
API::ISPManager - interface to the ISPManager Hosting Panel API ( http://ispsystem.com )
=head1 SYNOPSIS
lib/API/ISPManager.pm view on Meta::CPAN
sub get_error {
my $answer = shift;
return '' if is_ok($answer); # ok == no error
return Dumper( $answer->{error} );
}
# Get data from @_
sub get_params {
my @params = @_;
if (scalar @params == 1 && ref $params[0] eq 'HASH' ) {
return { %{ $params[0] } };
} else {
return { @params };
}
}
lib/API/ISPManager.pm view on Meta::CPAN
# 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;
if ( ref $data_block eq 'HASH' && ! $data_block->{error} && $data_block->{data} ) {
return 1;
} else {
return '';
}
}
# Get data from server answer
# STATIC(data_block)
sub get_data {
my $data_block = shift;
unless ( is_success($data_block) ) {
return '';
}
return $data_block->{data};
}
# list all users
# all params derived from get_auth_id
sub query_abstract {
my %params = @_;
my $params_raw = $params{params};
my $func_name = $params{func};
my $fake_answer = $params{fake_answer} || '';
lib/API/ISPManager.pm view on Meta::CPAN
return process_query(
query_string => $query_string,
parser_params => $xml_parser_params,
fake_answer => $fake_answer,
);
#
# TODO add this check here
# if ( $server_answer && $server_answer->{elem} && ref $server_answer->{elem} eq 'HASH' ) {
# return { data => $server_answer->{elem} };
# }
#
} else {
warn "auth_id not found or func type not ftp" if $DEBUG;
return '';
}
}
1;
lib/API/ISPManager/db.pm view on Meta::CPAN
my $server_answer = API::ISPManager::query_abstract(
params => $params,
func => 'db',
fake_answer => shift,
);
if ( $server_answer &&
$server_answer->{elem} &&
ref $server_answer->{elem} eq 'HASH' ) {
return { data => $server_answer->{elem} };
}
return $server_answer;
}
sub create {
my $params = shift;
lib/API/ISPManager/db.pm view on Meta::CPAN
params => $params,
func => 'db.users',
allowed_fields => [ 'host', 'path', 'allow_http', 'elid' ],
fake_answer => shift,
);
if ( $server_answer &&
$server_answer->{elem} &&
ref $server_answer->{elem} eq 'HASH' ) {
return { data => $server_answer->{elem} };
}
return $server_answer;
}
1;
lib/API/ISPManager/dns.pm view on Meta::CPAN
sub list {
my $params = shift;
my $server_answer = API::ISPManager::query_abstract(
params => $params,
func => 'domain',
fake_answer => shift,
);
#if ( $server_answer && $server_answer->{elem} && ref $server_answer->{elem} eq 'HASH' ) {
# return { data => $server_answer->{elem} };
#}
return $server_answer;
}
sub get {
my $params = shift;
my $server_answer = API::ISPManager::query_abstract(
params => $params,
lib/API/ISPManager/domain.pm view on Meta::CPAN
$API::ISPManager::last_answer = $result;
if ($result && $result->{ok}) {
return 1;
} else {
return '';
}
}
# Edit domain data
sub edit {
}
# Delete domain from panel
sub delete {
}
package API::ISPManager::email_domain;
lib/API/ISPManager/domain.pm view on Meta::CPAN
params => $params,
func => 'emaildomain'
);
}
# Create domain
sub create {
}
# Edit domain data
sub edit {
}
# Delete domain from panel
sub delete {
}
1;
lib/API/ISPManager/file.pm view on Meta::CPAN
my $url = 'https://server8.hosting.reg.ru/mancgi/upload';
my $query_string = API::ISPManager::mk_full_query_string( {
( auth => $auth_id ),
func => $func_name,
%$params_raw,
} );
my $response = $ua->post(
'https://' . $params->{host} . '/mancgi/upload',
Content_Type => 'form-data',
Content => [
filename => [$params->{file}],
sok => 'ok',
auth => $auth_id,
plid => $params->{plid},
]
);
if ($response->is_success) {
lib/API/ISPManager/mailbox.pm view on Meta::CPAN
$API::ISPManager::last_answer = $result;
if ($result && $result->{ok}) {
return 1;
} else {
return '';
}
}
# Edit email data
sub edit {
}
# Delete email from panel
sub delete {
}
1;
lib/API/ISPManager/misc.pm view on Meta::CPAN
sub reload {
my $params = shift;
my $server_answer = API::ISPManager::query_abstract(
params => $params,
func => 'restart',
);
if ( $server_answer && $server_answer->{elem} && ref $server_answer->{elem} eq 'HASH' ) {
return { data => $server_answer->{elem} };
}
return $server_answer;
}
sub usrparam {
my $params = shift;
my $server_answer = API::ISPManager::query_abstract(
params => $params,
lib/API/ISPManager/services.pm view on Meta::CPAN
sub get {
my $params = shift;
my $server_answer = API::ISPManager::query_abstract(
params => $params,
func => 'services',
fake_answer => shift,
);
if ( $server_answer && $server_answer->{elem} && ref $server_answer->{elem} eq 'HASH' ) {
return { data => $server_answer->{elem} };
}
return $server_answer;
}
1;
lib/API/ISPManager/stat.pm view on Meta::CPAN
sub sysinfo {
my $params = shift;
my $server_answer = API::ISPManager::query_abstract(
params => $params,
fake_answer => shift,
func => shift || 'sysinfo', # TODO: stupid hack!
);
if ( $server_answer && $server_answer->{elem} && ref $server_answer->{elem} eq 'HASH' ) {
my $stat_data = { };
for (keys %{ $server_answer->{elem} } ) {
$stat_data->{$_} = $server_answer->{elem}->{$_}->{value};
}
return { data => $stat_data };
}
return $server_answer;
}
sub usagestat {
my $params = shift;
return sysinfo($params, shift || '', 'usagestat');
lib/API/ISPManager/user.pm view on Meta::CPAN
)
) {
return 1; # { success => 1 };
} else {
return ''; # { success => '', error => Dumper ($result->{error}) };
}
#https://ultrasam.ru/ispmanager/ispmgr?out=xml&auth=232143511
#&sok=yes&func=user.edit&name=nrgxxx&ip=78.47.76.69&passwd=qwerty&ftplimit=100&disklimit=200
}
# Edit user data
sub edit {
my $params = shift;
my $result = API::ISPManager::query_abstract(
params => $params,
func => 'user.edit',
allowed_fields => [ qw( host path allow_http sok elid name domain email preset ip passwd ftplimit disklimit ssl ssi phpmod safemode maillimit domainlimit webdomainlimit maildomainlimit baselimit baseuserlimit bandwidthlimit phpfcgi) ],
);
return $result;
lib/API/ISPManager/vds.pm view on Meta::CPAN
)
) {
return 1; # { success => 1 };
} else {
return ''; # { success => '', error => Dumper ($result->{error}) };
}
#https://ultrasam.ru/ispmanager/ispmgr?out=xml&auth=232143511
#&sok=yes&func=user.edit&name=nrgxxx&ip=78.47.76.69&passwd=qwerty&ftplimit=100&disklimit=200
}
# Edit user data
sub edit {
my $params = shift;
my $result = API::ISPManager::query_abstract(
params => $params,
func => 'vds.edit',
allowed_fields => [ qw( host path allow_http sok elid name domain email preset ip passwd ftplimit disklimit ssl ssi phpmod safemode maillimit domainlimit webdomainlimit maildomainlimit baselimit baseuserlimit bandwidthlimit) ],
);
return $result;
runtests.sh view on Meta::CPAN
#!/bin/bash
./add_database.pl server5.hosting.reg.ru user_0000434578 oBffquIb db_name111 db_usersss45555 pass
#./add_www_domain.pl server5.hosting.reg.ru user_0000434578 oBffquIb suxx777.us
#./add_mailbox.pl server5.hosting.reg.ru user_0000434578 oBffquIb t1est@server6-host1.regrutestuser.ru qqqq
exit 0
perl -Ilib ./vdsmanager.pl --host=127.0.0.1 --username=admin --password=qqqq \
--nodeid=1 --vpspassword=qwerty --owner=admin --preset=OVZ-1 --os=centos-5-x86_64 \
--name=mymegavps7.ru
t/01-test.t view on Meta::CPAN
is( refs( undef ), '', $a);
is( refs( {} ), 'HASH', $a );
is( refs( [] ), 'ARRAY', $a );
is( refs( sub {} ), 'CODE', $a );
is( refs( \$a ), 'SCALAR', $a );
$a = 'is_success';
ok(! is_success(), $a);
ok(! is_success( { error => {}, data => {} } ), $a);
ok( is_success( { data => {} } ), $a);
ok(! is_success( { } ), $a);
$a = 'get_data';
ok(! get_data(), $a);
ok(! get_data( { } ), $a);
ok(! get_data( { error => {}, data => {} } ), $a);
is_deeply( get_data( { data => { aaa => 'bbb' } } ), { aaa => 'bbb' }, $a);
$a = 'filter_hash';
is_deeply( API::ISPManager::filter_hash( { }, [ ]), {}, $a );
is_deeply( API::ISPManager::filter_hash( { aaa => 555, bbb => 111 }, [ 'aaa' ]), { aaa => 555 }, $a );
is_deeply( API::ISPManager::filter_hash( { aaa => 555, bbb => 111 }, [ ]), { }, $a );
is_deeply( API::ISPManager::filter_hash( { }, [ 'aaa' ]), { }, $a );
$a = 'mk_query_string';
is( API::ISPManager::mk_query_string( { } ), '', $a );
is( API::ISPManager::mk_query_string( '' ), '', $a );
t/01-test.t view on Meta::CPAN
);
### Services
my $fake_services = <<DOC;
<?xml version="1.0" encoding="UTF-8"?>
<doc><elem><name>HTTP</name><proc>apache2</proc><autostart/><count>33</count><active/></elem><elem><name>FTP</name><proc>proftpd</proc><autostart/><count>1</count><active/></elem><elem><name>DNS</name><proc>named</proc><autostart/><count>1</count><ac...
DOC
is_deeply( API::ISPManager::services::get( { %correct_params }, $fake_services ), {
'data' => {
'FTP' => {
'count' => '1',
'proc' => 'proftpd',
'autostart' => {},
'active' => {}
},
'HTTP' => {
'count' => '33',
'proc' => 'apache2',
'autostart' => {},
t/01-test.t view on Meta::CPAN
'services test'
);
### Services end
### Databases
my $fake_db = <<DOC;
<?xml version="1.0" encoding="UTF-8"?>
<doc><elem><dbkey>MySQL->bt</dbkey><dbtype>MySQL</dbtype><name>bt</name><dbuser>bt</dbuser><owner>bt</owner><size>0.055</size></elem><elem><dbkey>MySQL->howtouse</dbkey><dbtype>MySQL</dbtype><name>howtouse</name><dbuser>howtouse</dbuser><owner>...
DOC
is_deeply( API::ISPManager::db::list( { %correct_params } , $fake_db ), {
'data' => {
'kapella2' => {
'owner' => 'kolian',
'dbuser' => 'datakapella2',
'dbtype' => 'MySQL',
'dbkey' => 'MySQL->kapella2',
'size' => '1.276'
},
'howtouse' => {
'owner' => 'howtouse',
'dbuser' => 'howtouse',
'dbtype' => 'MySQL',
'dbkey' => 'MySQL->howtouse',
'size' => '0.642'
t/01-test.t view on Meta::CPAN
### DB users
my $fake_db_user = <<DOC;
<?xml version="1.0" encoding="UTF-8"?>
<doc><plid>MySQL->blog</plid><elem><name>blog</name><read/><write/><manage/></elem></doc>
DOC
is_deeply(
API::ISPManager::db_user::list( { %correct_params, elid => 'MySQL->blog' }, $fake_db_user ), {
'data' => {
'read' => {},
'name' => 'blog',
'manage' => {},
'write' => {}
}
},
'test db_user'
);
t/01-test.t view on Meta::CPAN
### Stats
my $fake_sysinfo = <<DOC;
<?xml version="1.0" encoding="UTF-8"?>
<doc><elem><name>cpu</name><value>AMD Athlon(tm) 64 Processor 3700+ 2199.744 Mhz X 2</value></elem><elem><name>mem</name><value>393364 kB</value></elem><elem><name>swap</name><value>999992 kB</value></elem><elem><name>disk</name><value>49385 Mb</valu...
DOC
is_deeply( API::ISPManager::stat::sysinfo( { %correct_params }, $fake_sysinfo ), {
'data' => {
'proc' => '88',
'disk' => '49385 Mb',
'cpu' => 'AMD Athlon(tm) 64 Processor 3700+ 2199.744 Mhz X 2',
'avg' => '1.39 0.96 0.89',
'uptime' => '55 days 14 hours 5 minutes',
'swap' => '999992 kB',
'mem' => '393364 kB',
}
},
'sysinfo test'
);
my $fake_usagestat = <<DOC;
<?xml version="1.0" encoding="UTF-8"?>
<doc><elem><name>disk</name><value used="1817" limit="4950"/></elem><elem><name>reseller</name><value used="1" limit="0"/></elem><elem><name>user</name><value used="20" limit="0"/></elem><elem><name>bandwidth</name><value used="8170" limit="170000000...
DOC
is_deeply( API::ISPManager::stat::usagestat( { %correct_params }, $fake_usagestat ), {
'data' => {
'ftpuser' => {
'used' => '20',
'limit' => '70220'
},
'disk' => {
'used' => '1817',
'limit' => '4950'
},
'maildomain' => {
'used' => '16',
'limit' => '80017'
},
'database' => {
'used' => '17',
'limit' => '70021'
},
'mailuser' => {
'used' => '4',
'limit' => '60140'
},
'domain' => {
'used' => '23',
'limit' => '70022'
},
'bandwidth' => {
'used' => '8170',
'limit' => '1700000000'
},
'databaseuser' => {
'used' => '17',
'limit' => '70026'
},
'user' => {
'used' => '20',
'limit' => '0'
},
'reseller' => {
'used' => '1',
'limit' => '0'