HTTPD-User-Manage
view release on metacpan or search on metacpan
lib/HTTPD/UserAdmin/SQL.pm view on Meta::CPAN
|| Carp::croak($DBI::errstr);
return $old;
}
package HTTPD::UserAdmin::SQL::_generic;
use vars qw(@ISA);
@ISA = qw(HTTPD::UserAdmin::SQL);
sub add {
my($self, $username, $passwd, $other) = @_;
return(0, "add_user: no user name!") unless $username;
return(0, "add_user: no password!") unless $passwd;
return(0, "user '$username' already exists!")
if $self->exists($username);
my(%f) = ($self->{NAMEFIELD}=>$username,
$self->{PASSWORDFIELD}=>$self->encrypt($passwd));
if ($other) {
Carp::croak('Specify other fields as a hash ref for SQL databases')
unless ref($other) eq 'HASH';
foreach (keys %{$other}) {
$f{$_} = $other->{$_};
}
}
my $statement =
sprintf("INSERT into %s (%s)\n VALUES (%s)\n",
$self->{USERTABLE},
join(',',keys %f),
join(',', map {$self->_is_string($_,$f{$_}) ? "'$f{$_}'" : $f{$_} } keys %f));
print STDERR $statement if $self->debug;
$self->{'_DBH'}->do($statement) || Carp::croak($DBI::errstr);
1;
}
sub exists {
my($self, $username) = @_;
my $statement =
sprintf("SELECT %s from %s WHERE %s='%s'\n",
@{$self}{qw(PASSWORDFIELD USERTABLE NAMEFIELD)}, $username);
print STDERR $statement if $self->debug;
my $sth = $self->{'_DBH'}->prepare($statement);
Carp::carp("Cannot prepare sth ($DBI::err): $DBI::errstr")
unless $sth;
$sth->execute || Carp::croak($DBI::errstr);
my(@row) = $sth->fetchrow;
$sth->finish;
return $row[0];
}
sub delete {
my($self, $username) = @_;
my $statement =
sprintf("DELETE from %s where %s='%s'\n",
@{$self}{qw(USERTABLE NAMEFIELD)}, $username);
print STDERR $statement if $self->debug;
$self->{'_DBH'}->do($statement) || Carp::croak($DBI::errstr);
}
sub update {
my($self, $username, $passwd,$other) = @_;
return 0 unless $self->exists($username);
my(%f);
if ($other) {
Carp::croak('Specify other fields as a hash ref for SQL databases')
unless ref($other) eq 'HASH';
foreach (keys %{$other}) {
$f{$_} = $other->{$_};
}
}
$f{$self->{PASSWORDFIELD}}=$self->encrypt($passwd) if $passwd;
local $^W = 0; # can't stand this
my $statement =
sprintf("UPDATE %s SET %s\n WHERE %s = '%s'\n",
$self->{USERTABLE},
join(',', map {$_ . "=" . ($self->_is_string($_,$f{$_}) ? "'$f{$_}'" : $f{$_}) } keys %f),
$self->{NAMEFIELD}, $username);
print STDERR $statement if $self->debug;
$self->{'_DBH'}->do($statement) || Carp::croak($DBI::errstr);
}
sub list {
my($self) = @_;
my $statement =
sprintf("SELECT %s from %s\n",
@{$self}{qw(NAMEFIELD USERTABLE)});
print STDERR $statement if $self->debug;
my $sth = $self->{'_DBH'}->prepare($statement);
Carp::carp("Cannot prepare sth ($DBI::err): $DBI::errstr")
unless $sth;
$sth->execute || Carp::croak($DBI::errstr);
my($user,@list);
while($user = $sth->fetchrow) {
push(@list, $user);
}
$sth->finish;
return @list;
}
sub fetch {
my($self,$username,@fields) = @_;
return(0, "fetch: no user name!") unless $username;
return(0, "fetch: user '$username' doesn't exist")
unless $self->exists($username);
my (@f);
foreach (@fields) {
push(@f,ref($_) ? @$_ : $_);
}
push (@f,'*') unless @f;
my $statement =
sprintf("SELECT %s FROM %s WHERE %s = '%s'",
join(',',@f),
@{$self}{qw/USERTABLE NAMEFIELD/},
$username);
print STDERR $statement if $self->debug;
my $sth = $self->{'_DBH'}->prepare($statement);
Carp::carp("Cannot prepare sth ($DBI::err): $DBI::errstr")
( run in 0.561 second using v1.01-cache-2.11-cpan-39bf76dae61 )