Store hidden informations in forms

* SAML: store SAMLRequest in IssuerDBSAML, just before to redirect to IDP
  * Simple: add functions to manage hidden values for forms
This commit is contained in:
Thomas CHEMINEAU 2010-04-02 09:17:02 +00:00
parent 62330e2d44
commit fa039d2114
9 changed files with 61 additions and 2 deletions

View File

@ -108,6 +108,7 @@ elsif ( my $notif = $portal->notification ) {
AUTH_ERROR_TYPE => $portal->error_type,
NOTIFICATION => $notif,
SKIN => $skin,
HIDDEN_INPUTS => $portal->buildHiddenForm(),
);
}
@ -121,6 +122,7 @@ elsif ( $portal->{error} == PE_CONFIRM ) {
AUTH_URL => $portal->get_url,
MSG => $portal->info(),
SKIN => $skin,
HIDDEN_INPUTS => $portal->buildHiddenForm(),
);
}
@ -137,6 +139,7 @@ else {
DISPLAY_RESETPASSWORD => $portal->{portalDisplayResetPassword},
DISPLAY_FORM => 1,
MAIL_URL => $portal->{mailUrl},
HIDDEN_INPUTS => $portal->buildHiddenForm(),
);
# Adapt template if password policy error

View File

@ -9,6 +9,7 @@
<hr class="solid" />
<p id="timer" class="text-error"><lang en="Automaticaly accept in 5 seconds" fr="Acceptation automatique dans 5 secondes"/></p>
<form id="form" action="<TMPL_VAR NAME="URL">" method="get" class="login">
<TMPL_VAR NAME="HIDDEN_INPUTS">
<input type="hidden" name="url" value="<TMPL_VAR NAME="AUTH_URL">" />
<input type="hidden" id="confirm" name="confirm" value="1" />
<div id="content-all-info">

View File

@ -17,6 +17,7 @@
<hr class="solid" />
<p><span class="text-error"><TMPL_VAR NAME="AUTH_ERROR"></span></p>
<form action="#" method="post" class="login">
<TMPL_VAR NAME="HIDDEN_INPUTS">
<input type="hidden" name="url" value="" />
<input type="hidden" name="timezone" />
<p>

View File

@ -9,6 +9,7 @@
<hr class="solid" />
<p class="text-error"><lang en="New message(s)" fr="Nouveaux messages"/></p>
<form action="#" method="post" class="login">
<TMPL_VAR NAME="HIDDEN_INPUTS">
<div id="content-all-info">
<TMPL_VAR NAME="NOTIFICATION">
</div>

View File

@ -7,6 +7,7 @@
<div class="loginlogo"></div>
<form id="form" action="<TMPL_VAR NAME="URL">" method="post" class="login">
<TMPL_VAR NAME="HIDDEN_INPUTS">
<p><input type="hidden" name="url" value="<TMPL_VAR NAME="AUTH_URL">" /></p>
<input type="hidden" id="confirm" name="confirm" value="1" />
<TMPL_VAR NAME="MSG">

View File

@ -9,6 +9,8 @@
<h3><lang en="Please enter your credentials" fr="Merci de vous authentifier"/></h3>
<TMPL_VAR NAME="HIDDEN_INPUTS">
<p><input type="hidden" name="url" value="<TMPL_VAR NAME="AUTH_URL">" /></p>
<p><input type="hidden" name="timezone" /></p>

View File

@ -7,6 +7,7 @@
<div class="loginlogo"></div>
<form action="#" method="post" class="login">
<TMPL_VAR NAME="HIDDEN_INPUTS">
<h3><lang en="New message(s)" fr="Nouveaux messages"/>&nbsp;:</h3>
<table>
<tr><td>

View File

@ -95,11 +95,13 @@ sub issuerForUnAuthUser {
my $isPassive = $saml_request->IsPassive();
if ($isPassive) {
$self->lmLog( "Found isPassive flag in assertion conditions",
'debug' );
$self->lmLog( "Found isPassive flag in SAML request", 'debug' );
return PE_ERROR;
}
# Save dump into SAMLRequest hidden field
$self->setHiddenFormValue( 'SAMLRequest', $saml_request->dump() );
}
}

View File

@ -320,6 +320,7 @@ sub setDefaultValues {
$self->{portalForceAuthnInterval} = 5
unless ( defined( $self->{portalForceAuthnInterval} ) );
$self->{portalUserAttr} ||= "_user";
$self->{portalHiddenFormValues} = ();
$self->{securedCookie} ||= 0;
$self->{cookieName} ||= "lemonldap";
$self->{authentication} ||= 'LDAP';
@ -365,6 +366,52 @@ sub setDefaultValues {
$self->{samlIdPResolveCookie} ||= "lemonldapidp";
}
##@method protected void setHiddenFormValue(string fieldname, string value)
# Add element into $self->{portalHiddenFormValues}, those values could be
# used to hide values into HTML form.
#@param $fieldname The field name which will contain the correponding value
#@param $value The associated value
sub setHiddenFormValue {
my $self = shift;
my $key = shift;
my $val = shift;
$self->{portalHiddenFormValues}->{$key} = $val;
}
##@method public array getHiddenFormFields()
# Return all hidden field names.
#@return array All hidden field names
sub getHiddenFormFields {
my $self = shift;
return keys %{$self->{portalHiddenFormValues}};
}
##@method public void getHiddenFormValue(string fieldname)
# Get value into $self->{portalHiddenFormValues}.
#@param $fieldname The existing field name which contains a value
#@return string The associated value
sub getHiddenFormValue {
my $self = shift;
my $key = shift;
return '' unless ( defined($self->{portalHiddenFormValues}->{$key}) );
return $self->{portalHiddenFormValues}->{$key}
}
##@method public string buildHiddenForm()
# Return an HTML representation of hidden values.
#@return string
sub buildHiddenForm {
my $self = shift;
my @keys = $self->getHiddenFormFields();
my $val = '';
foreach ( @keys )
{
$val .= '<input type="hidden" name="' . $_ . '" id="' . $_ . '" value="'
. encode_base64($self->getHiddenFormValue($_)) . '" />';
}
return $val;
}
=begin WSDL
_IN lang $string Language