NAME
API::DirectAdmin - interface to the DirectAdmin Hosting Panel API ( http://www.directadmin.com )
SYNOPSIS
use
API::DirectAdmin;
my
%auth
= (
auth_user
=>
'admin_name'
,
auth_passwd
=>
'admin_passwd'
,
host
=>
'11.22.33.44'
,
);
# init
my
$da
= API::DirectAdmin->new(
%auth
);
### Get all panel IP
my
$ip_list
=
$da
->ip->list();
unless
(
$ip_list
&&
ref
$ip_list
eq
'ARRAY'
&&
scalar
@$ip_list
) {
die
'Cannot get ip list from DirectAdmin'
;
}
my
$ip
=
$ip_list
->[0];
my
$dname
=
'reg.ru'
;
my
$user_name
=
'user1'
;
my
=
'user1@example.com'
;
my
$package
=
'newpackage'
;
my
$client_creation_result
=
$da
->user->create( {
username
=>
$user_name
,
passwd
=>
'user_password'
,
passwd2
=>
'user_password'
,
domain
=>
$dname
,
=>
,
package
=>
$package
,
ip
=>
$ip
,
});
# Switch off account:
my
$suspend_result
=
$da
->user->disable( {
select0
=>
$user_name
,
} );
if
(
$suspend_result
->{error} == 1 ) {
die
"Cannot suspend account $suspend_result->{text}"
;
}
# Switch on account
my
$resume_result
=
$da
->user->enable( {
select0
=>
$user_name
,
} );
if
(
$resume_result
->{error} == 1 ) {
die
"Cannot Resume account $resume_result->{text}"
;
}
# Delete account
my
$delete_result
=
$da
->user->
delete
( {
select0
=>
$user_name
,
} );
if
(
$delete_result
->{error} == 1 ) {
die
"Cannot delete account $delete_result->{text}"
;
}
# Custom request
my
%params
= (
action
=>
'package'
,
package
=>
'package_name'
,
user
=>
'username'
,
);
my
$responce
=
$da
->query(
command
=>
'CMD_API_MODIFY_USER'
,
method
=>
'POST'
,
params
=> \
%params
,
allowed_fields
=> 'action
package
user',
);
PUBLIC METHODS
API::DirectAdmin::User
- list
-
Return list of users in array ref.
Example:
my
$users_list
=
$da
->users->list();
- create
-
Create a new user in DirectAdmin panel.
Example:
my
$result
=
$da
->user->create( {
username
=>
'username'
,
passwd
=>
'user_password'
,
passwd2
=>
'user_password'
,
domain
=>
'example.com'
,
email
=>
'email@example.com'
,
package
=>
'package_name'
,
ip
=>
'IP.ADD.RE.SS'
,
});
- delete
-
Delete DirectAdmin user and all user's data
Note: Some DirectAdmin's API methods required parameter "select0" for choose value from list. Like list of users, databases, ip, etc.
Example:
my
$result
=
$da
->user->
delete
( {
select0
=>
'username'
,
} );
- disable/enable
-
Two different methods for disable and enable users with same params.
Example:
my
$disable_result
=
$da
->user->disable( {
select0
=>
'username'
,
} );
my
$enable_result
=
$da
->user->enable( {
select0
=>
'username'
,
} );
- change_password
-
Change password for user
Example:
my
$result
=
$da
->user->change_password( {
username
=>
'username'
,
passwd
=>
'new_password'
,
passwd2
=>
'new_password'
,
} );
- change_package
-
Change package (tariff plan) for user
Example:
my
$result
=
$da
->user->change_package( {
username
=>
'username'
,
package
=>
'new_package'
,
} );
- show_packages
-
Return list of available packages.
Note: If you created packages through administrator user - you must use admin's login and password for authorisation. Obviously, if packages was created by reseller user - use reseller authorisation.
Example:
my
$packages
=
$da
->user->show_packages();
- show_user_config
-
Return all user settings.
Example:
my
$user_config
=
$da
->user->show_user_config({
user
=>
'username'
});
API::DirectAdmin::Domain
- list
-
Return list of domains on server.
Example:
my
$domains
=
$da
->domain->list();
- add
-
Add new domain to user through you connect to server.
Note: For adding domains for customers and you don't khow their password use: auth_user = 'admin_name|customer_name' in auth hash.
Example:
my
%auth
= (
auth_user
=>
'admin_name|customer_name'
,
auth_passwd
=>
'admin_passwd'
,
host
=>
'11.22.33.44'
,
);
# init
my
$da
= API::DirectAdmin->new(
%auth
);
$result
=
$da
->domain->add({
domain
=>
'newdomain.com'
,
php
=>
'ON'
,
cgi
=>
'ON'
,
});
API::DirectAdmin::Mysql
Control users mysql databases
- list
-
List of databases from user. Return empty array if databases not found.
Example:
print
$da
->mysql->list();
- adddb
-
Add database to user. Prefix "username_" will be added to 'name' and 'user';
Example:
my
%auth
= (
auth_user
=>
'admin_name|customer'
,
auth_passwd
=>
'admin_passwd'
,
host
=>
'11.22.33.44'
,
);
# init
my
$da
= API::DirectAdmin->new(
%auth
);
my
$result
=
$da
->mysql->adddb( {
name
=>
'default'
,
# will be 'customer_default'
user
=>
'default'
,
# will be 'customer_default'
passwd
=>
'password'
,
passwd2
=>
'password'
,
} );
- deldb
-
Delete selected database from user.
Example:
my
$result
=
$da
->mysql->deldb({
select0
=>
'database_name'
});
API::DirectAdmin::Ip
- list
-
Return array reference of list ip adresses;
Example:
my
$ip_list
=
$da
->ip->list();
- add
-
Add IP address to server config
Example:
my
$result
=
$da
->ip->add({
ip
=>
'123.234.123.234'
,
status
=>
'server'
,
});
- remove
-
Remove ip from server
Example:
my
$result
=
$da
->ip->remove({
select0
=>
'123.234.123.234'
,
});
API::DirectAdmin::DNS
Show zones, add and remove records.
- dumpzone
-
Return zone structure for domain
Example:
$da
->dns->dumpzone( {
domain
=>
'domain.com'
} );
- add_record
-
Add zone record to dns for domain. Available types of records: A, AAAA, NS, MX, TXT, PTR, CNAME, SRV
Example:
my
$result
=
$da
->dns->add_record({
domain
=>
'domain.com'
,
type
=>
'A'
,
name
=>
'subdomain'
,
# will be "subdomain.domain.com." in record
value
=>
'127.127.127.127'
,
});
Example with MX record:
my
$result
=
$da
->dns->add_record( {
domain
=>
'domain.com'
,
type
=>
'MX'
,
name
=>
'mx1'
,
value
=> 10,
} );
- remove_record
-
Remove record from domain zone
Example:
my
$result
=
$da
->dns->remove_record({
domain
=>
'domain.com'
,
type
=>
'A'
,
name
=>
'subdomain'
,
value
=>
'127.127.127.127'
,
});
Example with MX record:
my
$result
=
$da
->dns->remove_record({
domain
=>
'domain.com'
,
type
=>
'mx'
,
name
=>
'mx1'
,
value
=> 10,
});
INSTALLATION
To install this module type the following:
perl Makefile.PL
make
make test
make install
DEPENDENCIES
This module requires these other modules and libraries: Modern::Perl LWP::UserAgent HTTP::Request URI Carp Data::Dumper
COPYRIGHT AND LICENCE
Copyright (C) 2012-2013 by Andrey "Chips" Kuzmin <chipsoid@cpan.org>
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.