summaryrefslogtreecommitdiff
path: root/lib/DeWeave/WBO.pm
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2011-03-27 14:33:59 +0100
committerdakkar <dakkar@thenautilus.net>2011-03-27 14:37:30 +0100
commitc9af26b1194f693cd55fd9a7850bc168aeba7d27 (patch)
treef15e7ac877c3b9e3428318c7d91897665b54a581 /lib/DeWeave/WBO.pm
parentmany more BrowserObjects (diff)
downloadDeWeave-c9af26b1194f693cd55fd9a7850bc168aeba7d27.tar.gz
DeWeave-c9af26b1194f693cd55fd9a7850bc168aeba7d27.tar.bz2
DeWeave-c9af26b1194f693cd55fd9a7850bc168aeba7d27.zip
rework object creation
now we unpack args before calling ->new
Diffstat (limited to 'lib/DeWeave/WBO.pm')
-rw-r--r--lib/DeWeave/WBO.pm25
1 files changed, 17 insertions, 8 deletions
diff --git a/lib/DeWeave/WBO.pm b/lib/DeWeave/WBO.pm
index d38120f..0e1e6f8 100644
--- a/lib/DeWeave/WBO.pm
+++ b/lib/DeWeave/WBO.pm
@@ -41,6 +41,8 @@ has ttl => (
sub _debug_data {
my ($self,$msg,$data) = @_;
+ return unless get_logger()->is_debug;
+
local $Log::Log4perl::caller_depth = $Log::Log4perl::caller_depth+1;
my %data_clean;my @keys_clean = grep {!/^_/} keys %$data;
@@ -61,27 +63,34 @@ sub from_json {
$class->_debug_data('$args ',$args);
- if (defined $args->{payload}) {
- $args->{__crypt}=$crypt;
- }
+ $args = $class->unpack_args($args,$crypt);
return $class->new($args);
}
-around BUILDARGS => sub {
- my $orig = shift;
- my $class = shift;
-
- my $args = $class->$orig(@_);
+sub unpack_args {
+ my ($class,$args,$crypt) = @_;
return $args unless defined $args->{payload};
my $j = JSON::Any->new;
my $extra_args = $j->decode($args->{payload});
+ my $decrypt_args = {};
+
+ if (defined $crypt && exists $extra_args->{ciphertext}) {
+ my $decrypted_payload = $crypt->decrypt($extra_args);
+
+ if (defined $decrypted_payload) {
+ $decrypt_args = $j->decode($decrypted_payload);
+ }
+ }
@$args{keys %$extra_args} =
values %$extra_args;
+ @$args{keys %$decrypt_args} =
+ values %$decrypt_args;
+
delete @$args{grep {!defined $args->{$_}} keys %$args};
$class->_debug_data('buildargs: ',$args);