Bivio::Agent::Embed::Request
# Copyright (c) 2006-2009 bivio Software, Inc. All Rights Reserved. # $Id$ package Bivio::Agent::Embed::Request; use strict; use Bivio::Base 'Agent.Request'; my($_HTML) = b_use('Bivio.HTML'); my($_F) = b_use('UI.Facade'); my($_R) = b_use('AgentEmbed.Reply'); sub agent_execution_is_secure { return 1; } sub get_form { my($self) = @_; return $self->get('form'); } sub internal_need_to_toggle_secure_agent_execution { return 0; } sub new { my(undef, $req, $full_uri, $params) = @_; my($self) = shift->internal_new($params || {}); $self->put_durable( @{$req->map_each(sub { my(undef, $k, $v) = @_; return $k =~ m{ ^(?:client_addr|r|is_secure|timezone|auth_user|super_user_id)$ |\bUserAgent$ }ix ? ($k => $v) : (); })}, parent_request => $req, reply => $_R->new->put(parent_request => $req), embed_level => ($req->unsafe_get('embed_level') || 0) + 1, ); $self->throw_die(DIE => { message => 'embedding too deep; possible nested loop', embed_level => $self->get('embed_level'), parent_request => $self->get('parent_request'), }) if $self->get('embed_level') > 2; if (my $f = $_F->unsafe_get_from_source($req)) { $f->setup_request($self); } $full_uri =~ s/\?(.*)//; my($query) = $1; return $self->internal_initialize_with_uri( $_HTML->unescape($full_uri), $query, )->put(form => undef); } sub unsafe_get_current_root { return undef unless my $self = shift->get_current; foreach my $x (1..10) { return $self unless my $p = $self->unsafe_get('parent_request'); $self = $p; } b_die($self, ': no parent'); # DOES NOT RETURN } 1;