}
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 {
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;
}
#========================================================================