1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
#!/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);
$dbh->do(qq{SET CHARACTER SET utf8;})
or return (undef, 'ERROR', "Database Error: " . $dbh->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;
|