diff --git a/conf/manager.conf.in b/conf/manager.conf.in index 8b8941af0a4db5fe49253648c835b9179c41b137..8575761b6bca243a837e61d83ff10c8511c5fc0a 100644 --- a/conf/manager.conf.in +++ b/conf/manager.conf.in @@ -4,7 +4,6 @@ support_email = support@my.fqdn [setup] # templates directory templates_dir = @templatesdir@ -federation_metadata_file = /var/lib/access-check/edugain.xml accounts_file = /var/lib/access-check/accounts.php [logger] @@ -25,6 +24,9 @@ username = idpadmin password = secret options = mysql_enable_utf8 +[federations] +edugain = /var/lib/access-check/edugain.xml + [idp] scope = my.fqdn entityid = https://my.fqdn/simplesaml/saml2/idp/metadata.php diff --git a/lib/AccountManager/App.pm b/lib/AccountManager/App.pm index 24075d79f2e75c782a2f6bf47493b9fbed4068df..0cfd1e915bcea57bd3bdffc2ac7527dc67ad7419 100644 --- a/lib/AccountManager/App.pm +++ b/lib/AccountManager/App.pm @@ -33,6 +33,7 @@ my $entity_id_pattern = qr{ my %actions = ( home => 'req_home', + select_federation => 'req_select_federation', select_sp => 'req_select_sp', select_email => 'req_select_email', complete_challenge => 'req_complete_challenge', @@ -89,6 +90,18 @@ sub new { ); } + if (!$self->{configuration}->{federations}) { + $self->{logger}->fatal( + "No federations defined in configuration, aborting" + ); + $self->respond( + template => 'errors.tt2.html', + data => { + errors => [ 'internal' ] + } + ); + } + if (!$self->{configuration}->{database}) { $self->{logger}->fatal( "No database defined in configuration, aborting" @@ -136,10 +149,11 @@ sub run { # register needed parameters $self->{in} = { - email => $parameters{email}, - entityid => $parameters{entityid}, - token => $parameters{token}, - key => $parameters{key}, + email => $parameters{email}, + entityid => $parameters{entityid}, + token => $parameters{token}, + key => $parameters{key}, + federation => $parameters{federation}, }; } @@ -198,14 +212,50 @@ sub respond { exit 0; } +sub req_select_federation { + my ($self) = @_; + + my @federations = keys %{$self->{configuration}->{federations}}; + + $self->respond( + template => 'select_federation.tt2.html', + data => { + federations => \@federations + } + ); +} + sub req_select_sp { my ($self) = @_; + my $federation = $self->{in}->{federation}; + + if (!$federation) { + $self->{logger}->error("Missing parameter: federation"); + $self->respond( + template => 'errors.tt2.html', + data => { + errors => [ "missing_federation" ] + } + ); + } + + my $file = $self->{configuration}->{federations}->{$federation}; + if (!$file) { + $self->{logger}->error("Incorrect parameter: federation"); + $self->respond( + template => 'errors.tt2.html', + data => { + errors => [ "invalid_federation" ] + } + ); + } + my $metadata; eval { $metadata = AccountManager::Metadata->new( - file => $self->{configuration}->{setup}->{federation_metadata_file} + file => $file ); }; if ($EVAL_ERROR) { @@ -224,7 +274,8 @@ sub req_select_sp { env => { SCRIPT_NAME => $ENV{SCRIPT_NAME} }, - metadata => $metadata->parse(type => 'sp'), + metadata => $metadata->parse(type => 'sp'), + federation => $federation, } ); } @@ -232,6 +283,29 @@ sub req_select_sp { sub req_select_email { my ($self) = @_; + my $federation = $self->{in}->{federation}; + + if (!$federation) { + $self->{logger}->error("Missing parameter: federation"); + $self->respond( + template => 'errors.tt2.html', + data => { + errors => [ "missing_federation" ] + } + ); + } + + my $file = $self->{configuration}->{federations}->{$federation}; + if (!$file) { + $self->{logger}->error("Incorrect parameter: federation"); + $self->respond( + template => 'errors.tt2.html', + data => { + errors => [ "invalid_federation" ] + } + ); + } + if (! $self->{in}->{entityid}) { $self->{logger}->error("Missing parameter: entityid"); $self->respond( @@ -266,7 +340,7 @@ sub req_select_email { eval { $metadata = AccountManager::Metadata->new( - file => $self->{configuration}->{setup}->{federation_metadata_file} + file => $file ); }; if ($EVAL_ERROR) { diff --git a/lib/AccountManager/L10N/fr.pm b/lib/AccountManager/L10N/fr.pm index d8bce0f22e313fb646b3fd5551b800d81e433da8..1d73fed698f526c60506e65118a084396e08d7e8 100644 --- a/lib/AccountManager/L10N/fr.pm +++ b/lib/AccountManager/L10N/fr.pm @@ -72,6 +72,8 @@ our %Lexicon = ( "Best Regards" => "Cordialement", "Next" => "Suivant", "Previous" => "Précédent", + "Select your federation" => "Sélectionnez votre fédération", + "Select the federation corresponding to the service you want to test:" => "Sélectionner la fédération correspondant au service à tester:", ); 1; diff --git a/templates/Makefile.am b/templates/Makefile.am index 48ea358e650d1a0b0bd82165f14e9d3c78b15516..8ea379d0ca750621dc1c025c6dbc097a78daf754 100644 --- a/templates/Makefile.am +++ b/templates/Makefile.am @@ -4,6 +4,7 @@ nobase_templates_DATA = \ web/errors.tt2.html \ web/home.tt2.html \ web/index.tt2.html \ + web/select_federation.tt2.html \ web/select_sp.tt2.html \ web/select_email.tt2.html \ web/complete_challenge.tt2.html \ diff --git a/templates/web/complete_challenge.tt2.html b/templates/web/complete_challenge.tt2.html index a8483392c103d3f3a60828f760854113cbdae490..5ed0e323634df45e757ea4c20dde608d6e59b479 100644 --- a/templates/web/complete_challenge.tt2.html +++ b/templates/web/complete_challenge.tt2.html @@ -2,6 +2,7 @@ <div class="wizard clearfix vertical"> <div class="steps clearfix"> <ol> + <li class="done">[% lh.maketext("Select your federation") %]</li> <li class="done">[% lh.maketext("Select your service") %]</li> <li class="done">[% lh.maketext("Select your email address") %]</li> <li class="current">[% lh.maketext("Complete email challenge") %]</li> diff --git a/templates/web/home.tt2.html b/templates/web/home.tt2.html index c4376cb23a487032616edb4318b2b2676176633e..6fff1a9a684607249df72416512c3bdd22e7d7e9 100644 --- a/templates/web/home.tt2.html +++ b/templates/web/home.tt2.html @@ -17,6 +17,6 @@ <h2>[% lh.maketext("Get started") %]</h2> <p>[% lh.maketext("To start testing your own services, start by selecting one your are administrator for.") %]</p> -<p class="text-center"><a href="[% app.url %]?action=select_sp" class="button">[% lh.maketext("Get started") %]</a></p> +<p class="text-center"><a href="[% app.url %]?action=select_federation" class="button">[% lh.maketext("Get started") %]</a></p> [% END %] diff --git a/templates/web/select_email.tt2.html b/templates/web/select_email.tt2.html index fdbd456d75d2e656f4587f6724bda2d13bec1381..9b14a95140d8fc307bbdf3fe3659f4c11a0acc34 100644 --- a/templates/web/select_email.tt2.html +++ b/templates/web/select_email.tt2.html @@ -2,6 +2,7 @@ <div class="wizard clearfix"> <div class="steps clearfix"> <ol> + <li class="done">[% lh.maketext("Select your federation") %]</li> <li class="done">[% lh.maketext("Select your service") %]</li> <li class="current">[% lh.maketext("Select your email address") %]</li> <li class="disabled">[% lh.maketext("Complete email challenge") %]</li> diff --git a/templates/web/select_federation.tt2.html b/templates/web/select_federation.tt2.html new file mode 100644 index 0000000000000000000000000000000000000000..1983f9edf7c53bd7902898f2a15520016b655ff4 --- /dev/null +++ b/templates/web/select_federation.tt2.html @@ -0,0 +1,27 @@ +[% WRAPPER index.tt2.html %] +<div class="wizard clearfix"> + <div class="steps clearfix"> + <ol> + <li class="current">[% lh.maketext("Select your federation") %]</li> + <li class="disabled">[% lh.maketext("Select your service") %]</li> + <li class="disabled">[% lh.maketext("Select your email address") %]</li> + <li class="disabled">[% lh.maketext("Complete email challenge") %]</li> + </ol> + </div> + + <div class="content clearfix"> + <h2>[% lh.maketext("Select your federation") %]</h2> + + <form action="[% env.SCRIPT_NAME %]" method="get"> + <p>[% lh.maketext("Select the federation corresponding to the service you want to test::") %]</p> + [% FOREACH federation IN federations.sort %] + <input id="[% federation %]" name="federation" value="[% federation %]" type="radio" class="required"/> + <label for="[% federation %]">[% federation %]</label> + <br/> + [% END %] + <button class="button disabled" type="submit" name="action" value="">[% lh.maketext("Previous") %]</button> + <button class="button" type="submit" name="action" value="select_sp">[% lh.maketext("Next") %]</button> + </form> + </div> +</div> +[% END %] diff --git a/templates/web/select_sp.tt2.html b/templates/web/select_sp.tt2.html index d39a6ef0779f3d153b060df5ab18aae76fd1702f..e47b596fcc2f21381d22fd77c267b9f8fd6a1bc4 100644 --- a/templates/web/select_sp.tt2.html +++ b/templates/web/select_sp.tt2.html @@ -2,6 +2,7 @@ <div class="wizard clearfix"> <div class="steps clearfix"> <ol> + <li class="done">[% lh.maketext("Select your federation") %]</li> <li class="current">[% lh.maketext("Select your service") %]</li> <li class="disabled">[% lh.maketext("Select your email address") %]</li> <li class="disabled">[% lh.maketext("Complete email challenge") %]</li> @@ -25,7 +26,8 @@ [% END %] </select> <p>[% lh.maketext("Only Service Providers included in eduGAIN metadata are included in the list.") %]</p> - <button type="submit" class="button disabled" name="action" value="">[% lh.maketext("Previous") %]</button> + <input type="hidden" name="federation" value="[% federation %]"/> + <button type="submit" class="button" name="action" value="select_federation">[% lh.maketext("Previous") %]</button> <button type="submit" class="button" name="action" value="select_email">[% lh.maketext("Next") %]</button> </form> </div>