From: hylom Date: Tue, 4 Oct 2016 11:13:26 +0000 (+0900) Subject: Model::Users: implement 'anonymous' method to get anonymous user info X-Git-Tag: v0.1.0~247 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=d3f66d8e705dbc42c1c3e018c9bee8ebe58f9a19;p=newslash%2Fnewslash.git Model::Users: implement 'anonymous' method to get anonymous user info --- diff --git a/src/newslash_web/lib/Newslash/Model/Users.pm b/src/newslash_web/lib/Newslash/Model/Users.pm index 0259458b..9f67bd8e 100644 --- a/src/newslash_web/lib/Newslash/Model/Users.pm +++ b/src/newslash_web/lib/Newslash/Model/Users.pm @@ -29,38 +29,34 @@ sub expire_token { } sub authentification { - my ($self, $nickname, $passwd) = @_; + my ($self, $nickname, $passwd) = @_; - my $dbh = $self->connect_db; - my $sql = "SELECT * FROM users WHERE nickname = ?"; - my $sth = $dbh->prepare($sql); + my $dbh = $self->connect_db; + my $sql = "SELECT * FROM users WHERE nickname = ?"; + my $sth = $dbh->prepare($sql); - $sth->execute($nickname); + $sth->execute($nickname); - my $rs = $sth->fetchall_arrayref(+{}); - - $sth->finish; - $dbh->disconnect(); + my $rs = $sth->fetchall_arrayref(+{}); - if (@$rs == 0) { - return undef; - } + $sth->finish; + $dbh->disconnect(); - my $u = $rs->[0]; - if ($self->comparePassword($passwd, $u->{passwd}, $u->{uid}, 0, 0)) { - my $user = {}; - for my $item (qw(uid nickname)) { - $user->{$item} = $u->{$item}; + if (@$rs == 0) { + return undef; } - my $token = $self->generate_token; - while($session_store->{$token}) { - $token = $self->generate_token; + my $u = $rs->[0]; + if ($self->comparePassword($passwd, $u->{passwd}, $u->{uid}, 0, 0)) { + my $user = $self->_create_user_object($u); + my $token = $self->generate_token; + while($session_store->{$token}) { + $token = $self->generate_token; + } + $session_store->{$token} = $user; + return $token; } - $session_store->{$token} = $user; - return $token; - } - return undef; + return undef; } sub _get_by_token { @@ -95,26 +91,59 @@ sub _get { return $ret; } +sub anonymous_user { + my $self = shift; + my $u = $session_store->{anonymous}; + if (!$u) { + $u = $self->select(uid => 1); + $session_store->{anonymous} = $self->_create_user_object($u); + } + return $u; +} + +sub _create_user_object { + my ($self, $user) = @_; + my $result = {}; + for my $k (qw{uid nickname fakeemail homepage sig seclev matchname author}) { + $result->{$k} = $user->{$k}; + } + # if seclev is greater than 10000, the user is admin + # if seclev is 0, the user is Anonymous user + $result->{admin} = $result->{seclev} >= 10000 ? 1 : 0; + $result->{login} = $result->{seclev} != 0 ? 1 : 0; + + return $result; +} + sub select { - my ($self, $key, $value) = @_; + my ($self, $key, $value) = @_; + my $user; - if ($key eq 'token') { - return $self->_get_by_token($value); - } + if ($key eq 'token') { + $user = $self->_get_by_token($value); + } - if ($key eq 'nickname') { - return $self->_get(nickname => $value); - } + if ($key eq 'nickname') { + $user = $self->_get(nickname => $value); + } - if ($key eq 'matchname') { - return $self->_get(matchname => $value); - } + if ($key eq 'uid') { + $user = $self->_get(uid => $value); + } - if ($key eq 'email') { - return $self->_get(realemail => $value); - } + if ($key eq 'matchname') { + $user = $self->_get(matchname => $value); + } - return undef; + if ($key eq 'email') { + $user = $self->_get(realemail => $value); + } + + if ($user) { + return $self->_create_user_object($user); + } + + return undef; } #======================================================================== diff --git a/src/newslash_web/lib/Newslash/Plugin/UserAuth.pm b/src/newslash_web/lib/Newslash/Plugin/UserAuth.pm index ed660912..23e2f3d3 100644 --- a/src/newslash_web/lib/Newslash/Plugin/UserAuth.pm +++ b/src/newslash_web/lib/Newslash/Plugin/UserAuth.pm @@ -1,6 +1,6 @@ package Newslash::Plugin::UserAuth; use Mojo::Base 'Mojolicious::Plugin'; - +use Data::Dumper; sub register { my ($self, $app, $conf) = @_; @@ -12,6 +12,9 @@ sub register { if ($session->{token}) { $user = $c->model('users')->select(token => $session->{token}); } + if (!$user) { + $user = $c->model('users')->anonymous_user; + } $c->stash(user => $user); });