API-CPanel
view release on metacpan or search on metacpan
lib/API/CPanel.pm view on Meta::CPAN
# STATIC(STRING:input_string)
sub kill_start_end_slashes {
my $str = shift;
for ($str) {
s/^\/+//sgi;
s/\/+$//sgi;
}
return $str;
}
# Make full query string (with host, path and protocol)
# STATIC(HASHREF: params)
# params:
# host*
# path
# allow_http
# param1
# param2
# ...
sub mk_full_query_string {
my $params = shift;
return '' unless
$params &&
ref $params eq 'HASH' &&
%$params &&
$params->{host} &&
$params->{func};
my $host = delete $params->{host};
my $path = delete $params->{path} || '';
my $allow_http = delete $params->{allow_http} || '';
my $func = delete $params->{func};
unless ($path) {
$path = 'xml-api';
}
$path = kill_start_end_slashes( $path );
$host = kill_start_end_slashes( $host );
$func = kill_start_end_slashes( $func );
my $query_path = ( $allow_http ? 'http' : 'https' ) . "://$host:2087/$path/$func";
return %$params ? $query_path . '?' . mk_query_string( $params ) : $query_path;
}
# Make request to server and get answer
# STATIC (STRING: query_string)
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:
# STRING: answer
# HASHREF: xml_parser_params)
sub parse_answer {
my %params = @_;
my $answer_string =
$params{answer};
my $parser_params =
$params{parser_params} || { };
return '' unless $answer_string;
my $deparsed = XMLin( $answer_string, %$parser_params );
warn Dumper $deparsed if $DEBUG;
return $deparsed ? $deparsed : '';
}
# Get + deparse
# STATIC(STRING: query_string)
sub process_query {
my %params = @_;
my $auth_hash = $params{auth_hash};
my $query_string = $params{query_string};
my $xml_parser_params = $params{parser_params} || '';
my $fake_answer = $API::CPanel::FAKE_ANSWER || '';
return '' unless $query_string;
my $answer = $fake_answer ? $fake_answer : mk_query_to_server( $auth_hash, $query_string );
warn $answer if $answer && $DEBUG;
return $answer ?
parse_answer(
answer => $answer,
parser_params => $xml_parser_params
) : '';
}
# Filter hash
# STATIC(HASHREF: hash, ARRREF: allowed_keys)
# RETURN: hashref only with allowed keys
sub filter_hash {
my ($hash, $allowed_keys) = @_;
( run in 0.851 second using v1.01-cache-2.11-cpan-1edf4fed603 )