diff --git a/bin/update-metadata.in b/bin/update-metadata.in index 95d818231602a4b1d0ea70b2a1e2daa22b399ab1..840e48680f7a689c0f370c0f13b325efa0b61ebc 100755 --- a/bin/update-metadata.in +++ b/bin/update-metadata.in @@ -86,25 +86,35 @@ foreach my $id (split(/, */, $configuration->{groups}->{list})) { } foreach my $entry (@$entities) { - # skip duplicates - next if $seen{$entry->{entityid}}++; - # skip entities different from SP or IdP next if !$entry->{type}; - my $entity = AccountManager::Entity->new( - db => $db, - type => $entry->{type}, - entityid => $entry->{entityid}, - displayname => $entry->{display_name}, - information_url => $entry->{information_url}, - organization_url => $entry->{organization_url}, - ); - - $entity->contacts(uniq map { $_->{EmailAddress} } @{$entry->{contacts}}) - if $entry->{contacts}; + my $entity; + if ($seen{$entry->{entityid}}++) { + $entity = AccountManager::Entity->new( + db => $db, + entityid => $entry->{entityid}, + ); + $entity->load(); + $entity->federations( + $entity->federations(), $id + ); + $entity->update(); + } else { + $entity = AccountManager::Entity->new( + db => $db, + type => $entry->{type}, + entityid => $entry->{entityid}, + displayname => $entry->{display_name}, + information_url => $entry->{information_url}, + organization_url => $entry->{organization_url}, + ); + $entity->contacts(uniq map { $_->{EmailAddress} } @{$entry->{contacts}}) + if $entry->{contacts}; + $entity->federations($id); + $entity->save(); + } - $entity->save(); } } diff --git a/conf/manager.sql b/conf/manager.sql index b9b5c13c59b2e48c5c3e3af8ce8e57642a421174..61a576d18ea54823b49554b1731dced177dd48ea 100644 --- a/conf/manager.sql +++ b/conf/manager.sql @@ -19,8 +19,9 @@ CREATE TABLE entities ( organization_url varchar(200) DEFAULT NULL, displayname varchar(500) DEFAULT NULL, contacts varchar(2000) DEFAULT NULL, + federations varchar(50) DEFAULT NULL, PRIMARY KEY (id), - UNIQUE KEY entityid (entityid) + KEY entityid (entityid) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ; CREATE TABLE accounts ( diff --git a/lib/AccountManager/Entity.pm b/lib/AccountManager/Entity.pm index 2b05788249538de2431fa3275540d833f0b004a1..6e219f1310766cb785eec92e8c0d443bc6fde745 100644 --- a/lib/AccountManager/Entity.pm +++ b/lib/AccountManager/Entity.pm @@ -19,6 +19,7 @@ __PACKAGE__->meta->setup( information_url => { type => 'varchar', length => 200 }, organization_url => { type => 'varchar', length => 200 }, contacts => { type => 'array' }, + federations => { type => 'array' }, ], primary_key_columns => [ 'id' ],