forked from ess/plBake
-
Notifications
You must be signed in to change notification settings - Fork 0
/
plBake-cPanel-API
69 lines (63 loc) · 2.26 KB
/
plBake-cPanel-API
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#!/usr/bin/perl
###
# plBake AUTHOR: Scott Sullivan ([email protected])
# LWBake AUTHOR: Dennis Walters
#
# DESCRIPTION: Provides methods that can be used to access
# the cPanel API inside of recipes.
use JSON;
use LWP::UserAgent;
use Encode;
## Example usage from a recipe:
##
## my $resp = call("http://127.0.0.1:2086/json-api/passwd?user=$users->{user}&pass=$pass");
## if ( $resp->{passwd}[0]{statusmsg} =~ m/Password changed for user/ ) {
## print color 'bold blue'; print "Set $users->{user} password to: $pass \n\n"; print color 'reset';
## $count++;
## }
my $cPanelChk = has_cpanel();
if ( $cPanelChk ne 'yes' ) {
die_log("You're trying to use plBake-cPanel-API on a non cPanel machine! That's bad...");
}
sub getAuth {
my $silent = $_[0];
if ( $silent ne 'yes' ) {
print "Generating hash...";
}
system("QUERY_STRING=\\\"regen=1\\\" /usr/local/cpanel/whostmgr/bin/whostmgr ./setrhash &> /dev/null");
my $hashfile = '/root/.accesshash';
if (! -e $hashfile) {
die_log("ERROR: Failed to automatically generate hash! Please try logging into WHM and click `Setup Remote Access Key` and then re-run this script.");
}
my $hash = `cat /root/.accesshash`;
if ( $silent ne 'yes' ) {
print "success!\n";
}
$hash =~ s/\n//g;
my $auth = "WHM root:" . $hash;
return $auth;
}
sub call {
my $url = $_[0];
my $params = $_[1] || {};
my $auth = getAuth('yes');
my $json = new JSON;
my $ua = LWP::UserAgent->new;
$ua->agent("rndCpPw");
$ua->env_proxy();
my $request = HTTP::Request->new(POST => $url);
$request->header( Authorization => $auth );
$request->content_type('application/jsonrequest');
$request->content("$params");
my $response = $ua->request($request);
my $rawResponse = $response->content;
my $result = encode("UTF-8", $rawResponse);
my $decoded;
eval {
$decoded = $json->allow_nonref->utf8->relaxed->decode($result);
};
if ($@) {
die_log("ERROR: Didn't receive a valid JSON response from cPanel API. \n Got Error: $@");
}
return $decoded;
}