Net-Respite
view release on metacpan or search on metacpan
lib/Net/Respite/Client.pm view on Meta::CPAN
sub service_name { $_[0]->{'service_name'} || $_[0]->{'service'} || throw "Missing service_name" }
sub run_method {
my $self = shift;
my $name = $self->service_name;
my $method = shift || throw "Missing $name service method", undef, 1;
my $args = shift || {};
throw "Invalid $name service args", {method => $method, args => $args}, 1 if ref($args) ne 'HASH';
local $args->{'_i'} = $self->{'remote_ip'} || $ENV{'REMOTE_ADDR'} || (($ENV{'REALUSER'} || $ENV{'SUDO_USER'}) ? 'sudo' : 'cmdline');
local $args->{'_w'} = $self->{'remote_user'} || $ENV{'REALUSER'} || $ENV{'SUDO_USER'} || $ENV{'REMOTE_USER'} || $ENV{'USER'} || (getpwuid($<))[0] || '-unknown-';
local $args->{'_t'} = $self->{'token'} if !$args->{'_t'} && $self->{'token'};
local $args->{'_c'} = do {my $i = my $c = 0; $c = [(caller $i++)[0..3]] while !$i || $c->[0]->isa(__PACKAGE__); join '; ', @$c} if ! $self->config(no_trace => undef, $name);
local $self->{'flat'} = exists($args->{'_flat'}) ? delete($args->{'_flat'}) : $self->config(flat => undef, $name);
return $self->_remote_call($method, $args) if $self->_needs_remote($method);
return $self->_local_call( $method, $args);
}
sub _needs_remote {
my ($self, $method) = @_;
return $method !~ /(^local_|_local$)/;
lib/Net/Respite/CommandLine.pm view on Meta::CPAN
return $self->_run_method($obj, $method, $args);
}
sub _run_method {
my ($self, $obj, $method, $args, $extra) = @_;
local $args->{'_c'} = ['commandline'] if $obj->can('config') ? !$obj->config(no_trace => undef) : 1;
local $obj->{'remote_ip'} = local $obj->{'api_ip'} = ($ENV{'REALUSER'} || $ENV{'SUDO_USER'}) ? 'sudo' : 'cmdline';
local $obj->{'api_brand'} = $ENV{'BRAND'} || $ENV{'PROV'} if $obj->isa('Net::Respite::Base') && ($ENV{'BRAND'} || $ENV{'PROV'});
local $obj->{'remote_user'} = $ENV{'REALUSER'} || $ENV{'SUDO_USER'} || $ENV{'REMOTE_USER'} || $ENV{'USER'} || (getpwuid($<))[0] || '-unknown-';
local $obj->{'token'} = $self->{'token'} || $ENV{'ADMIN_Respite_TOKEN'} if $self->{'token'} || $ENV{'ADMIN_Respite_TOKEN'};
local $obj->{'transport'} = 'cmdline';
$obj->commandline_init($method, $args, $self) if $obj->can('commandline_init');
my $run = sub {
my $data = eval { $obj->can('run_method') ? $obj->run_method(@_) : $obj->$method($args, ($extra ? $extra : ())) };
$data = $@ if ! ref $data;
return !ref($data) ? {error => 'Commandline failed', msg => $data} : (blessed($data) && $data->can('data')) ? $data->data : $data;
};
my $ref = $run->($method, $args, $extra);
( run in 0.410 second using v1.01-cache-2.11-cpan-4ee56698ea0 )