cPanel-PublicAPI
view release on metacpan or search on metacpan
lib/cPanel/PublicAPI.pm view on Meta::CPAN
'plaintext' => 2086,
},
'cpanel' => {
'ssl' => 2083,
'plaintext' => 2082,
},
'webmail' => {
'ssl' => 2096,
'plaintext' => 2095,
},
);
sub _create_http_tiny {
return HTTP::Tiny->new(@_);
}
sub new {
my ( $class, %OPTS ) = @_;
my $self = {};
bless( $self, $class );
$self->{'debug'} = $OPTS{'debug'} || 0;
$self->{'timeout'} = $OPTS{'timeout'} || 300;
$self->{'usessl'} = exists $OPTS{'usessl'} ? $OPTS{'usessl'} : 1;
if ( exists $OPTS{'ip'} ) {
$self->{'ip'} = $OPTS{'ip'};
}
elsif ( exists $OPTS{'host'} ) {
$self->{'host'} = $OPTS{'host'};
}
else {
$self->{'ip'} = '127.0.0.1';
}
my $ua_creator = $OPTS{'http_tiny_creator'} || \&_create_http_tiny;
$self->{'ua'} = $ua_creator->(
agent => "cPanel::PublicAPI/$VERSION ",
verify_SSL => ( exists $OPTS{'ssl_verify_mode'} ? $OPTS{'ssl_verify_mode'} : 1 ),
keep_alive => ( exists $OPTS{'keepalive'} ? int $OPTS{'keepalive'} : 0 ),
timeout => $self->{'timeout'},
);
if ( exists $OPTS{'error_log'} && $OPTS{'error_log'} ne 'STDERR' ) {
if ( !open( $self->{'error_fh'}, '>>', $OPTS{'error_log'} ) ) {
print STDERR "Unable to open $OPTS{'error_log'} for writing, defaulting to STDERR for error logging: $@\n";
$self->{'error_fh'} = \*STDERR;
}
}
else {
$self->{'error_fh'} = \*STDERR;
}
if ( $OPTS{'user'} ) {
$self->{'user'} = $OPTS{'user'};
$self->debug("Using user param from object creation") if $self->{'debug'};
}
else {
$self->{'user'} = exists $INC{'Cpanel/PwCache.pm'} ? ( Cpanel::PwCache::getpwuid($>) )[0] : ( getpwuid($>) )[0];
$self->debug("Setting user based on current uid ($>)") if $self->{'debug'};
}
if ( exists $OPTS{'api_token'} && exists $OPTS{'accesshash'} ) {
$self->error('You cannot specify both an accesshash and an API token');
die $self->{'error'};
}
# Allow the user to specify an api_token instead of an accesshash.
# Though, it will just act as a synonym.
$OPTS{'accesshash'} = $OPTS{'api_token'} if $OPTS{'api_token'};
if ( ( !exists( $OPTS{'pass'} ) || $OPTS{'pass'} eq '' ) && ( !exists $OPTS{'accesshash'} || $OPTS{'accesshash'} eq '' ) ) {
my $homedir = exists $INC{'Cpanel/PwCache.pm'} ? ( Cpanel::PwCache::getpwuid($>) )[7] : ( getpwuid($>) )[7];
$self->debug("Attempting to detect correct authentication credentials") if $self->{'debug'};
if ( -e $homedir . '/.accesshash' ) {
local $/;
if ( open( my $hash_fh, '<', $homedir . '/.accesshash' ) ) {
$self->{'accesshash'} = readline($hash_fh);
$self->{'accesshash'} =~ s/[\r\n]+//g;
close($hash_fh);
$self->debug("Got accesshash from $homedir/.accesshash") if $self->{'debug'};
}
else {
$self->debug("Failed to fetch accesshash from $homedir/.accesshash") if $self->{'debug'};
}
}
elsif ( exists $ENV{'REMOTE_PASSWORD'} && $ENV{'REMOTE_PASSWORD'} && $ENV{'REMOTE_PASSWORD'} ne '__HIDDEN__' && exists $ENV{'SERVER_SOFTWARE'} && $ENV{'SERVER_SOFTWARE'} =~ /^cpsrvd/ ) {
$self->debug("Got user password from the REMOTE_PASSWORD environment variables.") if $self->{'debug'};
$self->{'pass'} = $ENV{'REMOTE_PASSWORD'};
}
else {
Carp::confess('pass, accesshash, or api_token is a required parameter');
}
}
elsif ( $OPTS{'pass'} ) {
$self->{'pass'} = $OPTS{'pass'};
$self->debug("Using pass param from object creation") if $self->{'debug'};
}
else {
$OPTS{'accesshash'} =~ s/[\r\n]//;
$self->{'accesshash'} = $OPTS{'accesshash'};
$self->debug("Using accesshash param from object creation") if $self->{'debug'};
}
$self->_update_operating_mode();
return $self;
}
sub set_debug {
my $self = shift;
$self->{'debug'} = int shift;
}
sub user {
my $self = shift;
$self->{'user'} = shift;
}
sub pass {
my $self = shift;
$self->{'pass'} = shift;
delete $self->{'accesshash'};
$self->_update_operating_mode();
}
sub accesshash {
my $self = shift;
$self->{'accesshash'} = shift;
delete $self->{'pass'};
$self->_update_operating_mode();
}
( run in 3.415 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )