diff options
author | Jannis M. Hoffmann <jannis.hoffmann@rwth-aachen.de> | 2022-05-01 21:59:28 +0200 |
---|---|---|
committer | Jannis M. Hoffmann <jannis.hoffmann@rwth-aachen.de> | 2022-05-01 21:59:28 +0200 |
commit | c94966aac2f16ca7a6f8c4c8988677515b46a45b (patch) | |
tree | c9b8c7c115d3bea2b754512dc4c7e123e1d8310a /lib | |
parent | 883a3c9379de774a3035986e90614decd8626207 (diff) |
hide password when it sits in stash
Diffstat (limited to 'lib')
-rw-r--r-- | lib/JWebmail/Model/ReadMails/Role.pm | 33 |
1 files changed, 29 insertions, 4 deletions
diff --git a/lib/JWebmail/Model/ReadMails/Role.pm b/lib/JWebmail/Model/ReadMails/Role.pm index 6d41964..3af73ed 100644 --- a/lib/JWebmail/Model/ReadMails/Role.pm +++ b/lib/JWebmail/Model/ReadMails/Role.pm @@ -5,19 +5,31 @@ use Params::Check 'check'; use Mojo::Base -role; # load after imports +package JWebmail::Model::ReadMails::Role::Shadow { + + use overload '""' => sub { '***' }; + + sub new { shift; bless \(shift.'') } + + sub show_password { ${shift()} } + +} + sub Auth { shift; state $AuthCheck = { - user => {required => 1, defined => 1}, - password => {required => 1, defined => 1}, + user => {defined => 1, required => 1}, + password => {defined => 1, required => 1}, challenge => {defined => 1}, }; my $self = @_ == 1 ? $_[0] : {@_}; - return check($AuthCheck, $self, 0) || die Params::Check::last_error; + my $res = check($AuthCheck, $self, 0) || die Params::Check::last_error; + $res->{password} = JWebmail::Model::ReadMails::Role::Shadow->new($res->{password}); + return $res; } -requires( +my @methods = ( # name:type parmeter of type # *key key => value # key=value default argument of value @@ -34,6 +46,19 @@ requires( 'move', # auth:Auth, mid, folder -> ^ 1 ); +requires(@methods); + +around @methods => sub { + my $orig = shift; + my $safe = $_[1]->{password}; + $_[1]->{password} = $safe->show_password; + my @res; + my $succ = eval { @res = $orig->(@_); 1 }; + $_[1]->{password} = $safe; + die $@ unless $succ; + return wantarray ? @res : $res[$#res]; +}; + around read_headers_for => sub { my $orig = shift; my $self = shift; |