#!/usr/bin/perl ## 18/07/2014, Olivier Salaün ## Command-line client for the Test IdP Account Manager use strict; use utf8; use lib "/opt/testidp/IdPAccountManager/lib"; use lib "/opt/testidp/IdPAccountManager/conf"; use Getopt::Long; use POSIX; use IdPAccountManager::TestAccount; use IdPAccountManager::SAMLMetadata; use IdPAccountManager::ServiceProvider; my %options; unless (&GetOptions(\%options, 'help', 'create_test_account', 'account_profile=s', 'sp_entityid=s', 'list_test_accounts', 'parse_federation_metadata', 'list_service_providers')) { die "Unknown options."; } if ($options{'help'}) { printf "$0 --create_test_account --account_profile=<profile_id> --sp_entityid=<entityid>\n"; } if ($options{'create_test_account'}) { unless ($options{'account_profile'}) { die "Missing account_profile option"; } unless ($options{'sp_entityid'}) { die "Missing sp_entityid option"; } my $test_account = new IdPAccountManager::TestAccount(account_profile => $options{'account_profile'}, sp_entityid => $options{'sp_entityid'}); unless (defined $test_account) { IdPAccountManager::Tools::do_log('error',"Failed to create test account"); exit -1; } unless ($test_account->save()) { IdPAccountManager::Tools::do_log('error',"Failed to create test account"); exit -1; } printf "Account created:\n\tuserid: user%d\n\tpassword: %s\n", $test_account->get('id'), $test_account->get('user_password'); }elsif ($options{'list_test_accounts'}) { my %args; if ($options{'sp_entityid'}) { push @{$args{'query'}}, 'sp_entityid' => $options{'sp_entityid'}; } if ($options{'account_profile'}) { push @{$args{'query'}}, 'account_profile' => $options{'account_profile'}; } my $all = IdPAccountManager::TestAccount::list_test_accounts(%args); foreach my $test_account (@$all) { $test_account->print(); } }elsif ($options{'parse_federation_metadata'}) { my $federation_metadata = new IdPAccountManager::SAMLMetadata; unless ($federation_metadata->load(federation_metadata_file_path => $Conf::global{'federation_metadata_file_path'})) { die; } my %args; if ($options{'sp_entityid'}) { $args{'filter_entity_id'} = $options{'sp_entityid'}; } unless ($federation_metadata->parse(%args)) { die; } printf "Document %s parsed\n", $Conf::global{'federation_metadata_file_path'}; ## List SAML entities printf "Hashref representing the metadata:\n"; &IdPAccountManager::Tools::dump_var($federation_metadata->{'federation_metadata_as_hashref'}, 0, \*STDOUT); }elsif ($options{'list_service_providers'}) { my %args; my $all = IdPAccountManager::ServiceProvider::list_service_providers(%args); foreach my $service_provider (@$all) { $service_provider->print(); } }else { die "Missing arguments"; }