#!/usr/bin/perl use strict; use Config::IniFiles; use DBI; package rddb; sub opendb { my $RD_CONF = "/etc/rd.conf"; my $cfg = Config::IniFiles->new(-file => $RD_CONF) or return (undef , 'ERROR', "Config File Error: " . join("\n", @Config::IniFiles::errors)); my $dbhost = $cfg->val('mySQL', 'Hostname'); my $dbname = $cfg->val('mySQL', 'Database'); my $dbuser = $cfg->val('mySQL', 'Loginname'); my $dbpasswd = $cfg->val('mySQL', 'Password'); my $dbh = DBI->connect("DBI:mysql:$dbname:$dbhost","$dbuser","$dbpasswd") or return (undef, 'ERROR', "Database Error: " . $DBI::errstr); return ($dbh, 'OK', 'success'); } sub closedb { my $dbh = shift; $dbh->disconnect(); } sub get_token { my ($dbh, $username) = @_; my $sql = qq{select PASSWORD from USERS where LOGIN_NAME = ?;}; my $sth = $dbh->prepare($sql) or return (undef, 'ERROR', "Database Error: " . $dbh->errstr); $sth->execute($username) or return (undef, 'ERROR', "Database Error: " . $sth->errstr); my ($token) = $sth->fetchrow_array; $sth->finish(); unless(defined $token) { return (undef, 'ERROR', "user '" . $username . "' not known by rivendell") } return ($token, 'OK', 'success'); } sub check_token { my ($dbh, $username, $token) = @_; my $sql = qq{select PASSWORD from USERS where LOGIN_NAME = ?;}; my $sth = $dbh->prepare($sql) or return (undef, 'ERROR', "Database Error: " . $dbh->errstr); $sth->execute($username) or return (undef, 'ERROR', "Database Error: " . $sth->errstr); my ($token_result) = $sth->fetchrow_array; $sth->finish(); unless(defined $token_result) { return (undef, 'ERROR', "user '" . $username . "' not known by rivendell") } if($token_result eq $token) { return (1, 'OK', 'success'); } return (0, 'ERROR', "wrong password"); } sub get_dropboxes { my ($dbh, $username) = @_; my $sql = qq{select USER_PERMS.GROUP_NAME,DROPBOXES.PATH,DROPBOXES.TO_CART,GROUPS.DESCRIPTION from USER_PERMS, DROPBOXES, GROUPS where USER_PERMS.USER_NAME= ? and DROPBOXES.GROUP_NAME=USER_PERMS.GROUP_NAME and DROPBOXES.GROUP_NAME=GROUPS.NAME;}; my $sth = $dbh->prepare($sql) or return (undef, 'ERROR', "Database Error: " . $dbh->errstr); $sth->execute($username) or return (undef, 'ERROR', "Database Error: " . $sth->errstr); my @allowed_dbs; while(my ($group, $path, $to_cart, $desc) = $sth->fetchrow_array()) { $path =~ s/\/\*$//; my $name = $path; if($name =~ /^([0-9]{2}-[A-Za-z]+)\/([0-9]{2})([0-9]{2})-([01]{4})-([0-9]{3})\/(.*)$/) { $name = "$1 - $2:$3 - $6 ($4, $5)"; } elsif($name =~ /^([0-9]{2}-[A-Za-z]+)\/jingle$/ || $name =~ /^jingles\/(.*)$/) { $name = "Jingles - $1"; } elsif($name =~ /^pool\/pool(.*)$/) { $name = "Pool $1 - $desc"; } elsif($name =~ /^pool\/(.*)$/) { $name = "Pool - $1"; } elsif($name =~ /^sondersendungen\/(.*)$/) { $name = "Sondersendungen - $1"; } elsif($name =~ /^autoimport\/(.*)$/) { $name = "autoimport - $1"; } my $perm = {}; $perm->{'GROUP'} = $group; $perm->{'PATH'} = $path; $perm->{'TO_CART'} = $to_cart; $perm->{'NAME'} = $name; push @allowed_dbs, $perm; } $sth->finish(); return sort { uc($a->{'NAME'}) cmp uc($b->{'NAME'}) } @allowed_dbs; } return 1;