Authen-Users
view release on metacpan or search on metacpan
lib/Authen/Users.pm view on Meta::CPAN
sub authenticate {
my ( $self, $group, $user, $password ) = @_;
my $password_sth = $self->{dbh}->prepare(<<ST_H);
SELECT password, salt FROM $self->{authentication} WHERE groop = ? AND user = ?
ST_H
$password_sth->execute( $group, $user );
my $row = $password_sth->fetchrow_arrayref;
if ($row) {
my $stored_pw_digest = $row->[0];
my $salt = $row->[1];
my $user_pw_digest = ($salt)
? $self->{sha}->($password, $salt)
: $self->{sha}->($password);
return 1 if $user_pw_digest eq $stored_pw_digest;
}
return;
}
sub add_user {
my ( $self, $group, $user, $password, $fullname, $email, $question,
$answer ) = @_;
$self->validate( $group, $user, $password ) or return;
$self->not_in_table( $group, $user ) or return;
my $r;
my $salt = 0;
if($self->{make_salt}) {
$salt = $self->{sha}->( time + rand(10000) );
$salt = substr( $salt, -8 );
my $password_sha = $self->{sha}->($password, $salt);
my $insert_sth = $self->{dbh}->prepare(<<ST_H);
INSERT INTO $self->{authentication}
(groop, user, password, fullname, email, question, answer,
created, modified, pw_timestamp, salt, gukey)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
ST_H
my $t = time;
$r = $insert_sth->execute( $group, $user, $password_sha,
$fullname, $email, $question, $answer, $t, $t, $t, $salt,
_g_u_key( $group, $user ) );
}
else {
my $password_sha = $self->{sha}->($password);
my $insert_sth = $self->{dbh}->prepare(<<ST_H);
INSERT INTO $self->{authentication}
(groop, user, password, fullname, email, question, answer,
created, modified, pw_timestamp, gukey)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
ST_H
my $t = time;
$r = $insert_sth->execute( $group, $user, $password_sha,
$fullname, $email, $question, $answer, $t, $t, $t,
_g_u_key( $group, $user ) );
}
return 1 if $r and $r == 1;
$self->{_error} = $self->{dbh}->errstr;
return;
}
sub user_add { shift->add_user(@_) }
sub update_user_all {
my ( $self, $group, $user, $password, $fullname, $email, $question,
$answer ) = @_;
$self->validate( $group, $user, $password ) or return;
my $salt = 0;
if($self->{make_salt}) {
$salt = $self->{sha}->( time + rand(10000) );
$salt = substr( $salt, -8 );
my $password_sha = $self->{sha}->($password, $salt);
my $update_all_sth = $self->{dbh}->prepare(<<ST_H);
UPDATE $self->{authentication} SET password = ?, fullname = ?, email = ?,
question = ?, answer = ? , modified = ?, pw_timestamp = ?, salt = ?, gukey = ?
WHERE groop = ? AND user = ?
ST_H
my $t = time;
return 1
if $update_all_sth->execute(
$password_sha, $fullname, $email, $question, $answer,
$t, $t, $salt, _g_u_key( $group, $user ), $group, $user
);
}
else {
my $password_sha = $self->{sha}->{password};
my $update_all_sth = $self->{dbh}->prepare(<<ST_H);
UPDATE $self->{authentication} SET password = ?, fullname = ?, email = ?,
question = ?, answer = ? , modified = ?, pw_timestamp = ?, gukey = ?
WHERE groop = ? AND user = ?
ST_H
my $t = time;
return 1
if $update_all_sth->execute(
$password_sha, $fullname, $email, $question, $answer,
$t, $t, _g_u_key( $group, $user ), $group, $user
);
}
return;
}
sub update_user_password {
my ( $self, $group, $user, $password ) = @_;
$self->validate( $group, $user, $password ) or return;
my $salt = 0;
if($self->{make_salt}) {
$salt = $self->{sha}->( time + rand(10000) );
$salt = substr( $salt, -8 );
my $password_sha = $self->{sha}->($password, $salt);
my $update_pw_sth = $self->{dbh}->prepare(<<ST_H);
UPDATE $self->{authentication} SET password = ?, modified = ?, pw_timestamp = ?,
salt = ?
WHERE groop = ? AND user = ?
ST_H
my $t = time;
return 1
if $update_pw_sth->execute( $password_sha,
$t, $t, $salt, $group, $user );
}
else {
my $password_sha = $self->{sha}->{password};
my $update_pw_sth = $self->{dbh}->prepare(<<ST_H);
UPDATE $self->{authentication} SET password = ?, modified = ?, pw_timestamp = ?
WHERE groop = ? AND user = ?
ST_H
my $t = time;
return 1
if $update_pw_sth->execute( $password_sha,
$t, $t, $group, $user );
}
return;
}
sub update_user_fullname {
my ( $self, $group, $user, $fullname ) = @_;
my $update_fullname_sth = $self->{dbh}->prepare(<<ST_H);
UPDATE $self->{authentication} SET fullname = ?, modified = ?,
WHERE groop = ? AND user = ?
ST_H
my $t = time;
return 1 if $update_fullname_sth->execute( $fullname, $t, $group, $user );
return;
}
sub update_user_email {
my ( $self, $group, $user, $email ) = @_;
my $update_email_sth = $self->{dbh}->prepare(<<ST_H);
UPDATE $self->{authentication} SET email = ? , modified = ?,
WHERE groop = ? AND user = ?
ST_H
my $t = time;
return 1 if $update_email_sth->execute( $email, $t, $group, $user );
return;
}
sub update_user_question_answer {
my ( $self, $group, $user, $question, $answer ) = @_;
my $update_additional_sth = $self->{dbh}->prepare(<<ST_H);
UPDATE $self->{authentication} SET question = ?, answer = ? ,
modified = ? WHERE groop = ? AND user = ?
ST_H
my $t = time;
return 1
if $update_additional_sth->execute( $question, $answer, $t, $group,
$user );
return;
}
sub delete_user {
my ( $self, $group, $user ) = @_;
my $delete_sth = $self->{dbh}->prepare(<<ST_H);
DELETE FROM $self->{authentication} WHERE groop = ? AND user = ?
ST_H
return 1 if $delete_sth->execute( $group, $user );
return;
}
sub count_group {
my ( $self, $group ) = @_;
my $count_sth = $self->{dbh}->prepare(<<ST_H);
SELECT COUNT(password) FROM $self->{authentication} WHERE groop = ?
ST_H
$count_sth->execute($group);
my $nrows = $count_sth->fetchrow_arrayref->[0];
$nrows = 0 if $nrows < 0;
return $nrows;
}
sub get_group_members {
my ( $self, $group ) = @_;
my ( $row, @members );
my $members_sth = $self->{dbh}->prepare(<<ST_H);
SELECT user FROM $self->{authentication} WHERE groop = ?
ST_H
$members_sth->execute($group);
while ( $row = $members_sth->fetch ) { push @members, $row->[0] }
return \@members;
}
sub user_info {
# returns an arrayref:
# [ groop, user, password, fullname, email,
# question, answer, created, modified, pw_timestamp, salt, gukey ]
my ( $self, $group, $user ) = @_;
my $user_sth = $self->{dbh}->prepare(<<ST_H);
SELECT * FROM $self->{authentication} WHERE groop = ? AND user = ?
ST_H
$user_sth->execute( $group, $user );
return $user_sth->fetch;
}
sub user_info_hashref {
# returns a hashref:
# {groop => $group, user => $user, password => $password, etc. }
( run in 1.759 second using v1.01-cache-2.11-cpan-9581c071862 )