sub setup { my $self = shift; $self->start_mode('main'); $self->mode_param('cmd'); $self->run_modes( 'main' => 'main', 'search => 'search', 'addfoo' => 'addfoo', 'editfoo' => 'editfoo', 'deletefoo' => 'deletefoo' ); sub cgiapp_prerun { # determine run-mode # set/get session # is user logged in? return ok || goto login mode if run mode requires login and user is not logged in. } sub login { # display login page if no params # not sure how to get back here, but verify user and password # if not valid go to login with error message else.. # set/get session and update logged in to 1. }