App-Context

 view release on metacpan or  search on metacpan

lib/App/Context/HTTP.pm  view on Meta::CPAN

    $user_agent = $context->user_agent();

=cut

sub user_agent {
    &App::sub_entry if ($App::trace);
    my $self = shift;
    my $user_agent = $self->{user_agent};
    &App::sub_exit($user_agent) if ($App::trace);
    return($user_agent);
}

#############################################################################
# PUBLIC METHODS
#############################################################################

=head1 Public Methods:

=cut

#############################################################################
# user()
#############################################################################

=head2 user()

The user() method returns the username of the authenticated user.
The special name, "guest", refers to the unauthenticated (anonymous) user.

    * Signature: $username = $self->user();
    * Param:  void
    * Return: string
    * Throws: <none>
    * Since:  0.01

    Sample Usage: 

    $username = $context->user();

In a request/response environment, this turns out to be a convenience
method which gets the authenticated user from the current Request object.

=cut

sub user {
    &App::sub_entry if ($App::trace);
    my $self = shift;
    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");
                }
                else {
                    $user = 'guest';
                    $effective_user = 'guest';
                }
            }

            $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);
}

1;



( run in 1.591 second using v1.01-cache-2.11-cpan-39bf76dae61 )