Skip to content
Snippets Groups Projects
update-metadata 4.16 KiB
#!/usr/bin/perl

use strict;
use warnings;

use Mojo::File qw(curfile);
use lib curfile()->dirname()->sibling('lib')->to_string;

use Config::Tiny;
use English qw(-no_match_vars);
use File::Temp;
use Getopt::Long qw(:config auto_help);
use List::MoreUtils qw(uniq);
use Mojo::UserAgent;
use Pod::Usage;
use Syntax::Keyword::Try;

use AccessCheck::Data::DB;
use AccessCheck::Data::Entity;
use AccessCheck::Metadata;

my %options;
GetOptions(
    \%options,
    'configuration=s',
    'verbose',
) or pod2usage(
    -message => "unknown option, aborting\n",
    -verbose => 0
);

my $configuration_file = $ENV{ACCESS_CHECK_CONFIG} || 'conf/manager.conf';
my $configuration = Config::Tiny->read($configuration_file);
if (!$configuration) {
    die Config::Tiny->errstr() . "\n";
}

die "no database defined in configuration, aborting\n"
    if !$configuration->{database};

die "no federation defined in configuration, aborting\n"
    if !$configuration->{federations};

AccessCheck::Data::DB->register_db(
    driver   => $configuration->{database}->{type},
    database => $configuration->{database}->{name},
    host     => $configuration->{database}->{host},
    password => $configuration->{database}->{password},
    username => $configuration->{database}->{username},
    options  => [
        $configuration->{database}->{options} ?
            split(/, */, $configuration->{database}->{options}) :
            ()
    ]
);

my $db = AccessCheck::Data::DB->new();

my $ua = Mojo::UserAgent->new(
    max_redirect => 3
);

$db->begin_work();

AccessCheck::Data::Entity->delete_entities(all => 1);

$db->dbh()->do('ALTER TABLE entities AUTO_INCREMENT = 1');

my %seen;
foreach my $id (keys %{$configuration->{federations}}) {