Author: spadkins
Date: Thu Sep 13 13:05:34 2007
New Revision: 9944
Modified:
p5ee/trunk/App-Context/lib/App/Context/HTTP.pm
Log:
Changes for application login logoff
Modified: p5ee/trunk/App-Context/lib/App/Context/HTTP.pm
==============================================================================
--- p5ee/trunk/App-Context/lib/App/Context/HTTP.pm (original)
+++ p5ee/trunk/App-Context/lib/App/Context/HTTP.pm Thu Sep 13 13:05:34 2007
@@ -135,26 +135,46 @@
my ($self) = @_;
my $timer = $self->{options}{"app.Context.timer"};
+ my $app = $self->{options}{app};
my $content_description = "Unknown";
$self->start_timer() if ($timer);
- eval {
- $self->dispatch_events_begin();
+ $self->dispatch_events_begin();
+
+ eval {
+ my $user = $self->user();
+ my $authorization = $self->authorization();
my $events = $self->{events};
- my ($event, $service, $name, $method, $args);
+ my ($event, $service_type, $service_name, $method, $args);
my $results = "";
# my $display_current_widget = 1;
while ($#$events > -1) {
$event = shift(@$events);
- ($service, $name, $method, $args) = @$event;
- $results = $self->call($service, $name, $method, $args);
- $args = join(",", @$args) if (ref($args) eq "ARRAY");
- $self->lap_timer("$service($name).$method($args)") if ($timer);
- }
- my $type = $self->so_get("default","ctype","SessionObject");
- $name = $self->so_get("default","cname");
- $results = $self->service($type, $name);
+ ($service_type, $service_name, $method, $args) = @$event;
+ if
($authorization->is_authorized("/App/$service_type/$service_name/$method",
$user)) {
+ $results = $self->call($service_type, $service_name, $method,
$args);
+ $args = join(",", @$args) if (ref($args) eq "ARRAY");
+
$self->lap_timer("$service_type($service_name).$method($args)") if ($timer);
+ $user = $self->user();
+ }
+ }
+ $service_type = $self->so_get("default","ctype","SessionObject");
+ $service_name = $self->so_get("default","cname");
+
+ if ($authorization->is_authorized("/App/$service_type/$service_name",
$user)) {
+ # do nothing
+ }
+ else {
+ if ($self->session_object_exists("login_${app}")) {
+ $service_name = "login_${app}";
+ }
+ else {
+ $service_name = "login";
+ }
+ }
+
+ $results = $self->service($service_type, $service_name);
my $response = $self->response();
my $ref = ref($results);
@@ -169,7 +189,7 @@
}
else {
$response->content($results->internals());
- $content_description = "$type($name).internals()";
+ $content_description = "$service_type($service_name).internals()";
}
$self->send_response();
@@ -504,26 +524,78 @@
sub user {
&App::sub_entry if ($App::trace);
my $self = shift;
- my $user = $self->request()->user();
- $self->{user} = $user;
- my $switchable_users = $self->get_option("switchable_users");
- if ($switchable_users && $switchable_users =~ /\b$user\b/) {
- # check more carefully ...
- if ($switchable_users eq $user ||
- $switchable_users =~ /:$user:/ ||
- $switchable_users =~ /^$user:/ ||
- $switchable_users =~ /:$user$/) {
- my $effective_user = $self->so_get("default","u");
- if ($effective_user) {
- $user = $effective_user;
- $self->{effective_user} = $effective_user;
+ my $user = $self->{effective_user} || $self->{user};
+
+ if (!$user) {
+ my $options = $self->{options};
+ my ($effective_user);
+ my $authenticated = 0;
+
+ if ($options->{app_auth_required}) {
+ # Bypass Basic Authentication, /../..?u=username&p=password
+ my $password = $self->so_get("default","p");
+ $user = $self->so_get("default","u");
+ if (defined $password && defined $user) {
+ my $authentication = $self->authentication();
+ if ( $authentication->validate_password($user, $password) ) {
+ $authenticated = 1;
+ $effective_user = $self->so_get("default","eu");
+ }
}
}
+ else {
+ $user = $self->request()->user();
+
+ my $p_pass = $self->so_get("default","p");
+ my $u_user = $self->so_get("default","u");
+ if (defined $p_pass && defined $u_user) {
+ my $authentication = $self->authentication();
+ if ( $authentication->validate_password($u_user, $p_pass) ) {
+ $authenticated = 1;
+ $user = $self->so_get("default","u");
+ $effective_user = $self->so_get("default","u");
+ }
+ }
+
+ $authenticated = 1;
+ $effective_user = $self->so_get("default","u");
+ }
+
+ $user = "guest" if (!$authenticated);
+ $ENV{REMOTE_USER} = $user;
+ $self->{user} = $user;
+
+ if ($user && $authenticated) {
+ my $switchable_users = $self->get_option("switchable_users");
+ if ($switchable_users && $switchable_users =~ /\b$user\b/) {
+ # check more carefully ...
+ if ($switchable_users eq $user ||
+ $switchable_users =~ /:$user:/ ||
+ $switchable_users =~ /^$user:/ ||
+ $switchable_users =~ /:$user$/) {
+ if ($effective_user) {
+ $user = $effective_user;
+ $self->{effective_user} = $effective_user;
+ }
+ }
+ }
+ }
+
+ $self->so_set("default", "user", $user);
}
+
&App::sub_exit($user) if ($App::trace);
return $user;
}
+sub set_user {
+ &App::sub_entry if ($App::trace);
+ my ($self, $user) = @_;
+ $self->{user} = $user;
+ delete $self->{effective_user};
+ &App::sub_exit() if ($App::trace);
+}
+
#04899 000.000000 000.000000 Start 2006/06/28 21:56:52.827139 GET
[222.252.72.65] localhost
#04899 000.023569 000.023569 MarketVision[8] Controller code loaded
#04899 000.394568 000.418137 MarketVision[666] code loaded, vars initialized