Skip to content
Snippets Groups Projects
account-manager-client.pl 3.01 KiB
Newer Older
#!/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::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'})) {
    my %args;
    if ($options{'sp_entityid'}) {
        $args{'filter_entity_id'} = $options{'sp_entityid'};
    }

    unless ($federation_metadata->parse(%args)) {
    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();
    }