diff options
author | Sergey Poznyakoff <gray@gnu.org> | 2017-10-09 18:21:40 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org> | 2017-10-09 18:21:40 +0200 |
commit | 1a4e8dca80adf51815652d2ee7488bb65a1f11f8 (patch) | |
tree | f3eb9d3e4eebcc2d641367af9e21e4844c163d4b | |
parent | 4567ecc4c8d131fdbf4fa00566306e9c28969fa4 (diff) | |
download | sourceyard-1a4e8dca80adf51815652d2ee7488bb65a1f11f8.tar.gz sourceyard-1a4e8dca80adf51815652d2ee7488bb65a1f11f8.tar.bz2 |
Fix checking for existing accounts during registration
* lib/Sourceyard/User/Template.pm: Fix overloaded methods.
* lib/Sourceyard/Controller.pm (user_for_hash): Use the single method,
instead of search->first.
* lib/Sourceyard/User.pm: Likewise.
-rw-r--r-- | lib/Sourceyard/Controller.pm | 4 | ||||
-rw-r--r-- | lib/Sourceyard/User.pm | 2 | ||||
-rw-r--r-- | lib/Sourceyard/User/Template.pm | 24 |
3 files changed, 21 insertions, 9 deletions
diff --git a/lib/Sourceyard/Controller.pm b/lib/Sourceyard/Controller.pm index c6dcad1..2886539 100644 --- a/lib/Sourceyard/Controller.pm +++ b/lib/Sourceyard/Controller.pm @@ -71,8 +71,8 @@ sub user_for_hash { # $self->db->storage->datetime_parser->format_datetime($dt); $ENV{DBIC_DT_SEARCH_OK} = 1; my $ch = $self->db->resultset('ConfirmHash') - ->search({ confirm_hash => $hash, - date => { '>=', $dt } })->first; + ->single({ confirm_hash => $hash, + date => { '>=', $dt } }); $ENV{DBIC_DT_SEARCH_OK} = 0; return $ch->user_id if ($ch); diff --git a/lib/Sourceyard/User.pm b/lib/Sourceyard/User.pm index ce4b5ff..a584e59 100644 --- a/lib/Sourceyard/User.pm +++ b/lib/Sourceyard/User.pm @@ -54,7 +54,7 @@ sub new { }; croak "bad number of arguments" if @_; } - my $obj = $c->db->resultset('User')->search($cond)->first; + my $obj = $c->db->resultset('User')->single($cond); return undef unless $obj; my $self = bless $obj, $class; $self->controller($c); diff --git a/lib/Sourceyard/User/Template.pm b/lib/Sourceyard/User/Template.pm index 661c629..243fbc0 100644 --- a/lib/Sourceyard/User/Template.pm +++ b/lib/Sourceyard/User/Template.pm @@ -24,13 +24,13 @@ sub user { } sub _validate_username { - my ($self, $name) = @_; - my $res = $self->SUPER::_validate_username($name); + my ($self) = @_; + my $res = $self->SUPER::_validate_username(); if ($res) { if ($self->controller ->db ->resultset('User') - ->search({ user_name => $name })->first) { + ->single({ user_name => $self->username })) { $self->error(username => 'Username already exists'); return 0; } @@ -39,14 +39,26 @@ sub _validate_username { } sub _validate_password { - my ($self, $pass) = @_; - my $res = $self->SUPER::_validate_password($pass); - if ($res && $self->user && $self->user->user_pw->check($pass)) { + my ($self) = @_; + my $res = $self->SUPER::_validate_password(); + if ($res && $self->user && $self->user->user_pw->check($self->password)) { $self->error(password => "Password didn't change"); return 0; } return $res; } +sub _validate_email { + my ($self) = @_; + my $res = $self->SUPER::_validate_email; + if ($res && $self->controller + ->db + ->resultset('User') + ->single({ email => $self->email })) { + $self->error(email => "A user with this email already exists"); + return 0; + } + return $res; +} 1; |