On Tue, Nov 22, 2005 at 08:48:15PM -0500, Rick Delaney wrote:
>
> If you want to do the whole branch now, I'm done.
I just want to point out that the changes look like a lot more than they
are. Much of it is just refactored code. After my .sig is a diff that
ignores whitespace between the mainline Framework.pm and the one in my
branch so you can better see the real changes.
--
Rick Delaney
[EMAIL PROTECTED]
--- main/lib/CGI/Application/Framework.pm 2005-11-03 20:27:19.000000000
-0500
+++ dev/caf-auth/lib/CGI/Application/Framework.pm 2005-11-22
20:15:00.000000000 -0500
@@ -2037,6 +2037,7 @@
}
+ my $start_rm = $config->{'start_rm'} || $config->{'post_login_rm'};
$tmplvars{'webapp'} = $self;
$tmplvars{'run_mode_tags'} = {
COMEFROMRUNMODE
@@ -2044,7 +2045,7 @@
CURRENTRUNMODE
=> [ CURRENT => $self->get_current_runmode ],
SUBMITTORUNMODE
- => [ SUBMITTO => $config->{'post_login_rm'} ],
+ => [ SUBMITTO => $start_rm ],
};
# ======== end population of tmpl_vars =============================
@@ -2227,6 +2228,14 @@
$self->param( REQUIRE_LOGIN => $require_login);
+ if ($require_login) {
+ $self->start_mode('login');
+ } else {
+ my $start_rm = $config->{'start_rm'}
+ or die "config variable 'start_rm' is not set";
+ $self->start_mode($start_rm);
+ }
+
# build the template options (for system templates)
my $template_options = $config->{'SystemTemplateOptions'};
@@ -2671,6 +2680,7 @@
. $self->start_mode()
);
+
if ( $self->get_current_runmode() eq $self->start_mode() ) {
# ---------------------------------------------------------------
@@ -2687,19 +2697,34 @@
. "\n"
. ' --> per start_mode() = '
. $self->start_mode());
+ $self->_make_session($self->get_session_id) unless $self->session;
return;
}
$self->log->debug("I made it past the login run mode check");
- if ( $self->query->param($self->param('come_from_rm'))
- and $self->query->param($self->param('come_from_rm')) eq 'login' ) {
+ my $from_rm = $self->query->param('come_from_rm');
+ if ($from_rm) {
+ $self->log->debug("Come from run mode = $from_rm");
- #
+ if ($from_rm eq 'login') {
# This is a "first time" login attempt, so...
- #
$self->log->debug("About to validate a first time login");
+ return $self->_framework_prerun_first;
+ }
+ } else {
+ $self->log->debug("Come from run mode not specified");
+ }
+ return $self->_framework_prerun_next;
+}
+
+
+sub _framework_prerun_first {
+ my $self = shift;
+
+ my $config = $self->conf($self->config_name)->context;
+
# ---------------------------------------------------------
# First, make sure that the form submission is at least
# barely within specification (i.e. provides a user id and
@@ -2734,7 +2759,7 @@
# A numeric user id and a password were provided... now,
# make sure that they match...
# ---------------------------------------------------------
- my ($is_login_authenticated, $user) = $self->_login_authenticate();
+ my ($is_login_authenticated, $user) = $self->_authenticate();
if ( $is_login_authenticated ) {
# ---------------------------------------------------
@@ -2748,17 +2773,12 @@
$self->log->debug("Login authenticate: current runmode = "
. $self->get_current_runmode);
- tie(my %session,
- 'Apache::SessionX',
- undef,
- $config->{'SessionParams'});
- $self->param( session => \%session);
- $self->header_props( -cookie =>
- $self->query->cookie
- (
+ my $session = $self->_make_session;
+ $self->header_props(
+ -cookie => $self->query->cookie(
-name => 'session_id',
- -value => $session{_session_id},
- )
+ -value => $session->{_session_id},
+ ),
);
# ---------------------------------------------------
@@ -2781,9 +2801,6 @@
# hidden input "rm" tag in the login form.
# ---------------------------------------------------
$self->param( _login_loop => 0 );
- return;
- # ---------------------------------------------------
-
} else {
@@ -2802,20 +2819,14 @@
$self->param( _errs => $errs );
$self->prerun_mode('login');
- return;
- # -----------------------------------------------------
}
+ return 1;
+}
- } else {
-
- if ($self->query->param('come_from_rm')) {
- $self->log->debug("Come from run mode = "
- . $self->query->param('come_from_rm'));
- }
- else {
- $self->log->debug("Come from run mode not specified");
- }
+sub _framework_prerun_next {
+ my $self = shift;
+ my $config = $self->conf($self->config_name)->context;
# --------------------------------------------------------------------
# Try what we can to get a session ID, and set various parameters
# corresponding to what we came across in the attempt. If we can't
@@ -2851,12 +2862,7 @@
# can't find a session with this session ID, kick out to a prerun
# mode to display an error page to the user.
# --------------------------------------------------------------------
- my %session = ();
-
- eval { tie(%session,
- 'Apache::SessionX',
- $session_id,
- $config->{'SessionParams'}); };
+ my $session = eval { $self->_make_session($session_id) };
if ( $@ ) { # there was an error in the creation of the session
@@ -2881,12 +2887,6 @@
}
# --------------------------------------------------------------------
- # --------------------------------------------------------------------
- # We have a %session, so stick it inside of our $self so that we can
- # carry it around the application.
- # --------------------------------------------------------------------
- $self->param( session => \%session );
- # --------------------------------------------------------------------
# ------------------------------------------------------------------
# This seems like a good place to put in a check to make sure that
@@ -3045,11 +3045,26 @@
} # end of if $self->_relogin_test
}
- }
-
- return; # guess that's about it...
}
+sub _authenticate {
+ my $self = shift;
+ my ($is_login_authenticated, $user) = $self->param('REQUIRE_LOGIN')
+ ? $self->_login_authenticate()
+ : (1, $self->_default_user);
+}
+
+sub _default_user {
+ my $self = shift;
+ # RPD - Just want a default object that can satisfy the example
+ # apps. They require the attributes below.
+ require Hash::AsObject;
+ my $user = Hash::AsObject->new({
+ uid => -1,
+ username => 'default',
+ fullname => 'Default User',
+ });
+}
# ------------------------------------------------------------------
# These methods are new and unique to CGI::Application::Framework
@@ -3362,6 +3377,21 @@
return $self->param('session') || undef;
}
+sub _make_session {
+ my $self = shift;
+ my ($session_id) = @_;
+
+ my $config = $self->conf($self->config_name)->context;
+ my %session;
+ tie(%session, 'Apache::SessionX', $session_id, $config->{'SessionParams'});
+ # --------------------------------------------------------------------
+ # We have a %session, so stick it inside of our $self so that we can
+ # carry it around the application.
+ # --------------------------------------------------------------------
+ $self->param(session => \%session );
+
+ return \%session;
+}
# -------------------------------------------------------------------
# _framework_template_pre_process is called right before a template is
_______________________________________________
caf mailing list
[email protected]
http://list.lpi.org/cgi-bin/mailman/listinfo/caf