From c622c87b4a2910d36727dab63dda93b1d3a77aa1 Mon Sep 17 00:00:00 2001
From: Guillaume Rousse <guillaume.rousse@renater.fr>
Date: Thu, 24 May 2018 18:16:39 +0200
Subject: [PATCH] keep federation to allows getting back anytime

---
 lib/AccountManager/App.pm                 | 31 ++++++++++++++++++++---
 templates/web/complete_challenge.tt2.html |  1 +
 templates/web/select_email.tt2.html       |  1 +
 3 files changed, 30 insertions(+), 3 deletions(-)

diff --git a/lib/AccountManager/App.pm b/lib/AccountManager/App.pm
index 9bf24e6..3440f93 100644
--- a/lib/AccountManager/App.pm
+++ b/lib/AccountManager/App.pm
@@ -407,7 +407,8 @@ sub req_select_email {
     $self->respond(
         template => 'select_email.tt2.html',
         data     => {
-            sp => $sp,
+            federation => $federation,
+            sp         => $sp,
         }
     );
 }
@@ -415,6 +416,29 @@ sub req_select_email {
 sub req_complete_challenge {
     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" ]
+            }
+        );
+    }
+
     unless ($self->{in}->{entityid}) {
         $self->{logger}->error("Missing parameter entityid");
         $self->respond(
@@ -584,8 +608,9 @@ sub req_complete_challenge {
     $self->respond(
         template  => 'complete_challenge.tt2.html',
         data     => {
-            email    => $self->{in}->{email},
-            entityid => $self->{in}->{entityid},
+            federation => $federation,
+            entityid   => $self->{in}->{entityid},
+            email      => $self->{in}->{email},
         }
     );
 }
diff --git a/templates/web/complete_challenge.tt2.html b/templates/web/complete_challenge.tt2.html
index 2ff2529..adb2ff7 100644
--- a/templates/web/complete_challenge.tt2.html
+++ b/templates/web/complete_challenge.tt2.html
@@ -18,6 +18,7 @@
         <label for="token">[% lh.maketext("Please provide the validation token here:") %]</label>
         <br/>
         <input name="token" value="" id="token" type="text" class="required error"/>
+        <input type="hidden" name="federation" value="[% federation %]"/>
         <input type="hidden" name="entityid" value="[% entityid %]"/>
         <input type="hidden" name="email" value="[% email %]"/>
     </div>
diff --git a/templates/web/select_email.tt2.html b/templates/web/select_email.tt2.html
index 2672807..010fd34 100644
--- a/templates/web/select_email.tt2.html
+++ b/templates/web/select_email.tt2.html
@@ -21,6 +21,7 @@
         <br/>
         [% END %]
         <div class="callout primary">[% lh.maketext("Those email addresses have been extracted from your service metadata.") %]</div>
+        <input type="hidden" name="federation" value="[% federation %]"/>
         <input type="hidden" name="entityid" value="[% sp.entityid %]"/>
     [% ELSE %]
         <p>
-- 
GitLab