Apache2-AuthAny
view release on metacpan or search on metacpan
lib/Apache2/AuthAny/DB.pm view on Meta::CPAN
package Apache2::AuthAny::DB;
use strict;
use DBI;
use Data::Dumper;
use Digest::MD5 qw(md5_hex);
my $dbHandle;
our $VERSION = '0.201';
sub new {
my $class = shift;
my $self = {};
unless ($dbHandle) {
my $dbUser = $ENV{AUTH_ANY_DB_USER} || die "Env variable AUTH_ANY_DB_USER required";
my $dbPasswordFile = $ENV{AUTH_ANY_DB_PW_FILE} || die "Env variable AUTH_ANY_DB_PW_FILE required";
open(PWD, "<$dbPasswordFile") || die "Could not read password file, '$dbPasswordFile'. $!";
my $dbPassword = <PWD>;
close(PWD) || die "ouch $!";
chomp $dbPassword; #remove the trailing new line
die "Could not get password" unless $dbPassword;
my $dbName = $ENV{AUTH_ANY_DB_NAME} || die "Env variable AUTH_ANY_DB_NAME required";
my $db;
$db = $ENV{AUTH_ANY_DB} || "mysql";
my $dsn = "database=$dbName";
my $dbHost = $ENV{AUTH_ANY_DB_HOST};
$dsn .= ";host=$dbHost" if $dbHost;
$dbHandle = DBI->connect("DBI:$db:$dsn", $dbUser, $dbPassword) or die "user: $dbUser, errstr: $DBI::errstr";
$dbHandle->do('SET CHARACTER SET utf8');
}
bless ($self, $class);
return $self;
}
sub useDB {
return;
my $self = shift;
my $auth_any_db = $self->{auth_any_db};
unless ($dbHandle->do("use $auth_any_db") ) {
die $dbHandle->errstr;
}
}
sub getValidRoles {
my $self = shift;
$self->useDB();
return $dbHandle->selectcol_arrayref('SELECT DISTINCT role FROM userRole');
}
sub getUserCookieByPID {
my $self = shift;
$self->useDB();
my $pid = shift;
return unless $pid;
my $getCookieSql = 'select * from userAACookie where PID = ? limit 1';
my $res = $dbHandle->selectrow_hashref($getCookieSql, undef, $pid);
if ($res) {
return $res;
} elsif ($dbHandle->errstr) {
die $dbHandle->errstr;
} else {
warn "DB entry for PID cookie, '$pid' missing";
return;
}
}
sub getUserByUID {
my $self = shift;
$self->useDB();
my ($UID) = @_;
my $SQL = 'SELECT * FROM user WHERE UID = ?';
return $dbHandle->selectrow_hashref($SQL, undef, $UID);
}
sub searchUsers {
my $self = shift;
$self->useDB();
my %usernames;
my ($u, $r, $n, $ident) = @_;
my %user = %$u;
my @role = @$r;
my @norole = @$n;
# username must be found in each query (AND) to be listed
my $queries = 0;
( run in 1.164 second using v1.01-cache-2.11-cpan-39bf76dae61 )