Hi Alexander,sorry for responding you privately. This was not my intention; I just recognized that my mail program has two reply buttons (replay and reply to mailing list).
I've played a bit around with your code and implemented a small Perl module and a test script. They both work in my environment, however I'm still not happy with them.
What I don't like is... 1st, I need to provide my client version2nd, I get the message 'truncated' => bless( do{\(my $o = 0)}, 'JSON::PP::Boolean' ) from the user_find API 3rd, I do not know what the id is used for and so I'm unsure if I could automatically handle it in my Perl module
However they should be a help for others who wants use Perl-script to access IPA-API.
Anyway thanks for your help. This was what I need to get on the track. Oliver Am 10.11.2015 um 09:14 schrieb Alexander Bokovoy:
On Mon, 09 Nov 2015, Natxo Asenjo wrote:hi,On Mon, Nov 9, 2015 at 6:58 PM, Oliver Dörr <[email protected]> wrote:Hi, I'm completly new to this list and the product behind it. I'm trying touse perl to get a list from my IPA installation of all users that are onthe server.unfortunately I cannot help you right now, but have you taken a look at this blog post: https://vda.li/en/posts/2015/05/28/talking-to-freeipa-api-with-sessions/ It could give you some pointers. Share your code if you get it to work :-)The code in my response (see other mail) works fine, Oliver contacted me privately. Oliver, please respond to the list. :)
package freeipa;
use strict;
use REST::Client;
use JSON;
use Data::Dumper;
our $VERSION="0.0.1";
BEGIN {
};
sub new
# Constructor of the class freeipa
{ my ($Class)=@_;
my $self= {};
bless($self,$Class);
$self->{'id'}=0;
return $self;
} # sub news
sub set
# Setter of the class freeipa. At this moment only usuable or scalar values
{ my $ipaObj=shift;
my $scalar=shift;
my $value=shift;
$ipaObj->{$scalar}=$value;
} # sub set
sub connect
# Connects to the specified IPA server
{ my $ipaObj=shift;
my $headers = {
'Accept' => 'text/plain',
'Content-Type' => 'application/x-www-form-urlencoded',
'Referer' => $ipaObj->{'baseUrl'}
}; # my $headers
my $client=REST::Client->new();
my $params = $client->buildQuery({'user' => $ipaObj->{'user'},
'password' => $ipaObj->{'password'} });
$client->setHost($ipaObj->{'baseUrl'});
$client->POST("/ipa/session/login_password", substr($params,1),
$headers);
$ipaObj->{'authCookie'} = $client->responseHeader('Set-Cookie');
$ipaObj->{'restClient'}=$client;
} # sub connect
sub ipaMethod
# Calls an API method against the IPA connection
{ my $ipaObj=shift;
my $hashRef=shift;
my $data = {
'id'=>$ipaObj->{'id'},
'params' => [
[],
{ 'version' =>
$ipaObj->{'version'} }
]
}; # my $data
$ipaObj->{'id'}++;
my $headers = {
'Accept' => 'text/plain',
'Content-Type' => 'application/json',
'Cookie' => $ipaObj->{'authCookie'},
'Referer' => $ipaObj->{'baseUrl'}."/ipa/session/json"
};
# Copy the specified part of the method over the default data defined
in $data
foreach my $var (keys (%{$hashRef})) { $data->{$var}=$hashRef->{$var}; }
# Format the method and data to json and make a REST request against
the IPA server
my $jsonMethod = to_json($data);
$ipaObj->{'restClient'}->POST("/ipa/session/json", $jsonMethod,
$headers);
# bring the JSON-formed response into perl objects...
my $restRet=from_json($ipaObj->{'restClient'}->responseContent());
# ... and return ist
return $restRet;
} # sub ipaMethod
testConnection.pl
Description: Perl program
-- Manage your subscription for the Freeipa-users mailing list: https://www.redhat.com/mailman/listinfo/freeipa-users Go to http://freeipa.org for more info on the project
