328 lines
9.5 KiB
Perl
Executable File
328 lines
9.5 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
# -*- indent-tabs-mode: nil; -*-
|
|
# vim:ft=perl:et:sw=4
|
|
# $Id$
|
|
|
|
# Sympa - SYsteme de Multi-Postage Automatique
|
|
#
|
|
# Copyright (c) 1997, 1998, 1999 Institut Pasteur & Christophe Wolfhugel
|
|
# Copyright (c) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
|
|
# 2006, 2007, 2008, 2009, 2010, 2011 Comite Reseau des Universites
|
|
# Copyright (c) 2011, 2012, 2013, 2014, 2015, 2016, 2017 GIP RENATER
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 2 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
use lib '/usr/share/sympa/lib';
|
|
use strict;
|
|
use warnings;
|
|
use Getopt::Long;
|
|
use HTTP::Cookies;
|
|
#use SOAP::Lite +trace;
|
|
use SOAP::Lite;
|
|
|
|
use Sympa::Tools::Data;
|
|
|
|
my ($reponse, @ret, $val, %fault);
|
|
|
|
my $usage =
|
|
"$0 is a perl soap client for Sympa for TEST ONLY. Use it to illustrate how to
|
|
code access to features of Sympa soap server. Authentication can be done via
|
|
user/password or user cookie or as a trusted remote application
|
|
|
|
Usage: $0 <with the following options:>
|
|
--soap_url=<soap sympa server url>
|
|
--service=<a sympa service>
|
|
--trusted_application=<app name>
|
|
--trusted_application_password=<password>
|
|
--proxy_vars=<id=value,id2=value2>
|
|
--service_parameters=<value1,value2,value3>
|
|
|
|
|
|
OR usage: $0 <with the following options:>
|
|
--soap_url=<soap sympa server url>
|
|
--user_email=<email>
|
|
--user_password=<password>
|
|
--session_id=<sessionid>
|
|
--service=<a sympa service>
|
|
--service_parameters=<value1,value2,value3>
|
|
|
|
|
|
OR usage: $0 <with the following options:>
|
|
--soap_url=<soap sympa server url>
|
|
--cookie=<sympauser cookie string>
|
|
|
|
Example:
|
|
$0 --soap_url=<soap sympa server url> --cookie=sympauser=someone\@cru.fr
|
|
";
|
|
|
|
my %options;
|
|
unless (
|
|
GetOptions(
|
|
\%main::options, 'soap_url=s',
|
|
'service=s', 'trusted_application=s',
|
|
'trusted_application_password=s', 'user_email=s',
|
|
'user_password=s', 'cookie=s',
|
|
'proxy_vars=s', 'service_parameters=s',
|
|
'session_id=s'
|
|
)
|
|
) {
|
|
printf "";
|
|
}
|
|
|
|
my $soap_url = $main::options{'soap_url'};
|
|
unless (defined $soap_url) {
|
|
printf "error : missing soap_url parameter\n";
|
|
printf $usage;
|
|
exit 1;
|
|
}
|
|
|
|
my $user_email = $main::options{'user_email'};
|
|
my $user_password = $main::options{'user_password'};
|
|
my $session_id = $main::options{'session_id'};
|
|
my $trusted_application = $main::options{'trusted_application'};
|
|
my $trusted_application_password =
|
|
$main::options{'trusted_application_password'};
|
|
my $proxy_vars = $main::options{'proxy_vars'};
|
|
my $service = $main::options{'service'};
|
|
my $service_parameters = $main::options{'service_parameters'};
|
|
my $cookie = $main::options{'cookie'};
|
|
|
|
if (defined $trusted_application) {
|
|
unless (defined $trusted_application_password) {
|
|
printf "error : missing trusted_application_password parameter\n";
|
|
printf $usage;
|
|
exit 1;
|
|
}
|
|
unless (defined $service) {
|
|
printf "error : missing service parameter\n";
|
|
printf $usage;
|
|
exit 1;
|
|
}
|
|
unless (defined $proxy_vars) {
|
|
printf "error : missing proxy_vars parameter\n";
|
|
printf $usage;
|
|
exit 1;
|
|
}
|
|
|
|
play_soap_as_trusted($soap_url, $trusted_application,
|
|
$trusted_application_password, $service, $proxy_vars,
|
|
$service_parameters);
|
|
} elsif ($service eq 'getUserEmailByCookie') {
|
|
play_soap(
|
|
soap_url => $soap_url,
|
|
session_id => $session_id,
|
|
service => $service
|
|
);
|
|
|
|
} elsif (defined $cookie) {
|
|
printf "error : get_email_cookie\n";
|
|
get_email($soap_url, $cookie);
|
|
exit 1;
|
|
} else {
|
|
unless (defined $session_id
|
|
|| (defined $user_email && defined $user_password)) {
|
|
printf
|
|
"error : missing session_id OR user_email+user_passwors parameters\n";
|
|
printf $usage;
|
|
exit 1;
|
|
}
|
|
|
|
play_soap(
|
|
soap_url => $soap_url,
|
|
user_email => $user_email,
|
|
user_password => $user_password,
|
|
session_id => $session_id,
|
|
service => $service,
|
|
service_parameters => $service_parameters
|
|
);
|
|
}
|
|
|
|
sub play_soap_as_trusted {
|
|
my $soap_url = shift;
|
|
my $trusted_application = shift;
|
|
my $trusted_application_password = shift;
|
|
my $service = shift;
|
|
my $proxy_vars = shift;
|
|
my $service_parameters = shift;
|
|
|
|
my $soap = SOAP::Lite->new();
|
|
$soap->uri('urn:sympasoap');
|
|
$soap->proxy($soap_url);
|
|
|
|
my @parameters;
|
|
if (defined $service_parameters) {
|
|
@parameters = split /,/, $service_parameters;
|
|
} else {
|
|
@parameters = ();
|
|
}
|
|
my $p = join(',', @parameters);
|
|
printf
|
|
"calling authenticateRemoteAppAndRun( $trusted_application, $trusted_application_password, $proxy_vars,$service,$p)\n";
|
|
|
|
my $reponse =
|
|
$soap->authenticateRemoteAppAndRun($trusted_application,
|
|
$trusted_application_password, $proxy_vars, $service, \@parameters);
|
|
print_result($reponse);
|
|
}
|
|
|
|
sub get_email {
|
|
my $soap_url = shift;
|
|
my $cookie = shift;
|
|
|
|
my ($service, $reponse, @ret, $val, %fault);
|
|
|
|
## Cookies management
|
|
# my $uri = URI->new($soap_url);
|
|
|
|
# my $cookies = HTTP::Cookies->new(ignore_discard => 1,
|
|
# file => '/tmp/my_cookies' );
|
|
# $cookies->load();
|
|
printf "cookie : %s\n", $cookie;
|
|
|
|
my $soap = SOAP::Lite->new();
|
|
#$soap->on_debug(sub{print@_});
|
|
$soap->uri('urn:sympasoap');
|
|
$soap->proxy($soap_url);
|
|
#, cookie_jar =>$cookies);
|
|
|
|
print "\n\ngetEmailUserByCookie....\n";
|
|
$reponse = $soap->getUserEmailByCookie($cookie);
|
|
print_result($reponse);
|
|
exit;
|
|
|
|
}
|
|
|
|
sub play_soap {
|
|
my %param = @_;
|
|
|
|
my $soap_url = $param{'soap_url'};
|
|
my $user_email = $param{'user_email'};
|
|
my $user_password = $param{'user_password'};
|
|
my $session_id = $param{'session_id'};
|
|
my $service = $param{'service'};
|
|
my $service_parameters = $param{'service_parameters'};
|
|
|
|
my ($reponse, @ret, $val, %fault);
|
|
|
|
## Cookies management
|
|
# my $uri = URI->new($soap_url);
|
|
|
|
my $cookies = HTTP::Cookies->new(
|
|
ignore_discard => 1,
|
|
file => '/tmp/my_cookies'
|
|
);
|
|
$cookies->load();
|
|
printf "cookie : %s\n", $cookies->as_string();
|
|
|
|
my @parameters;
|
|
@parameters = split(/,/, $service_parameters)
|
|
if (defined $service_parameters);
|
|
my $p = join(',', @parameters);
|
|
foreach my $tmpParam (@parameters) {
|
|
printf "param: %s\n", $tmpParam;
|
|
}
|
|
|
|
# Change to the path of Sympa.wsdl
|
|
#$service = SOAP::Lite->service($soap_url);
|
|
#$reponse = $service->login($user_email,$user_password);
|
|
#my $soap = SOAP::Lite->service($soap_url);
|
|
|
|
my $soap = SOAP::Lite->new() || die;
|
|
#$soap->on_debug(sub{print@_});
|
|
$soap->uri('urn:sympasoap');
|
|
$soap->proxy($soap_url, cookie_jar => $cookies);
|
|
|
|
## Do the login unless a session_id is provided
|
|
if ($session_id) {
|
|
print "Using Session_id $session_id\n";
|
|
|
|
} else {
|
|
print "LOGIN....\n";
|
|
|
|
#$reponse = $soap->casLogin($soap_url);
|
|
$reponse = $soap->login($user_email, $user_password);
|
|
$cookies->save;
|
|
print_result($reponse);
|
|
$session_id = $reponse->result;
|
|
}
|
|
|
|
## Don't use authenticateAndRun for lists command
|
|
|
|
## Split parameters
|
|
if ($service_parameters && $service_parameters ne '') {
|
|
@parameters = split /,/, $service_parameters;
|
|
}
|
|
|
|
if ($service eq 'lists') {
|
|
printf "\n\nlists....\n";
|
|
$reponse = $soap->lists();
|
|
|
|
} elsif ($service eq 'subscribe') {
|
|
printf "\n\n$service....\n";
|
|
$reponse = $soap->subscribe(@parameters);
|
|
|
|
} elsif ($service eq 'signoff') {
|
|
printf "\n\n$service....\n";
|
|
$reponse = $soap->signoff(@parameters);
|
|
|
|
} elsif ($service eq 'add') {
|
|
printf "\n\n$service....\n";
|
|
$reponse = $soap->add(@parameters);
|
|
|
|
} elsif ($service eq 'del') {
|
|
printf "\n\n$service....\n";
|
|
$reponse = $soap->del(@parameters);
|
|
|
|
} elsif ($service eq 'getUserEmailByCookie') {
|
|
printf "\n\n$service....\n";
|
|
$reponse = $soap->getUserEmailByCookie($session_id);
|
|
|
|
} else {
|
|
printf "\n\nAuthenticateAndRun service=%s;(session_id=%s)....\n",
|
|
$service, $session_id;
|
|
$reponse =
|
|
$soap->authenticateAndRun($user_email, $session_id, $service,
|
|
\@parameters);
|
|
}
|
|
|
|
print_result($reponse);
|
|
|
|
}
|
|
|
|
sub print_result {
|
|
my $r = shift;
|
|
|
|
# If we get a fault
|
|
if (defined $r && $r->fault) {
|
|
print "Soap error :\n";
|
|
my %fault = %{$r->fault};
|
|
foreach $val (keys %fault) {
|
|
print "$val = $fault{$val}\n";
|
|
}
|
|
} else {
|
|
if (ref($r->result) =~ /^ARRAY/) {
|
|
#printf "R: $r->result\n";
|
|
@ret = @{$r->result};
|
|
} elsif (ref $r->result) {
|
|
print "Pb " . ($r->result) . "\n";
|
|
return undef;
|
|
} else {
|
|
@ret = $r->result;
|
|
}
|
|
Sympa::Tools::Data::dump_var(\@ret, 0, \*STDOUT);
|
|
}
|
|
|
|
return 1;
|
|
}
|