From 6ac2fd07b57a25aa9ae2f8128f6e3e65cb8001ed Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Wed, 27 Jul 2016 00:14:02 +0200 Subject: no more specialusers config (use DB instead) diff --git a/lib/RHRD/rddb.pm b/lib/RHRD/rddb.pm index 10148f8..8f519c6 100755 --- a/lib/RHRD/rddb.pm +++ b/lib/RHRD/rddb.pm @@ -60,9 +60,6 @@ sub init $ctx{'config'}{'specialgroups'}{'alljingles'} = $cfg->val('specialgroups', 'alljingles', 'ALL_JINGLE'); @{$ctx{'config'}{'specialusers'}{'no-update-token'}} = split(' ', $cfg->val('specialusers', 'no-update-token', '')); - @{$ctx{'config'}{'specialusers'}{'admins'}} = split(' ', $cfg->val('specialusers', 'admins', 'admin')); - @{$ctx{'config'}{'specialusers'}{'allshows'}} = split(' ', $cfg->val('specialusers', 'allshows', '')); - @{$ctx{'config'}{'specialusers'}{'allpools'}} = split(' ', $cfg->val('specialusers', 'allpools', '')); $ctx{'config'}{'dropboxes'}{'dropbox-pseudo-station'} = $cfg->val('dropboxes', 'dropbox-pseudo-station', 'import-dropbox'); $ctx{'config'}{'dropboxes'}{'norm-level'} = $cfg->val('dropboxes', 'norm-level', -1200); @@ -1252,7 +1249,11 @@ sub create_show_group or return (undef, 'ERROR', "Database Error: " . $sth->errstr); $sth->finish(); - for my $user (@{$ctx->{'config'}{'specialusers'}{'allshows'}}) { + my @users = get_group_members($ctx, $ctx->{'config'}{'specialgroups'}{'allshows'}); + if(!defined $users[0] && defined $users[1]) { + return (undef, $users[1], $users[2]); + } + for my $user (@users) { ($cnt, $status, $errorstring) = RHRD::rddb::add_group_member($ctx, $groupname, $user); return (undef, $status, $errorstring) unless(defined $cnt); } @@ -1759,14 +1760,46 @@ sub is_musicpools_user return 0 if $username eq ''; - for my $groupuser (@{$ctx->{'config'}{'specialusers'}{'allpools'}}) { - if ($username eq $groupuser) { - return 1; - } + my $sql = qq{select MODIFY_TEMPLATE_PRIV from USERS where LOGIN_NAME = ?;}; + my $sth = $ctx->{'dbh'}->prepare($sql) + or return (undef, 'ERROR', "Database Error: " . $ctx->{'dbh'}->errstr); + + $sth->execute($username) + or return (undef, 'ERROR', "Database Error: " . $sth->errstr); + + my ($priv) = $sth->fetchrow_array; + $sth->finish(); + + unless(defined $priv) { + return (undef, 'ERROR', "user '" . $username . "' not known by rivendell") + } + + if($priv eq "Y") { + return 1; } return 0; } +sub set_musicpools_user +{ + my ($ctx, $username, $value) = @_; + + if(defined($value) && $value) { + $value = "Y"; + } else { + $value = "N"; + } + + my $sql = qq{update USERS set MODIFY_TEMPLATE_PRIV = ? where LOGIN_NAME = ?;}; + my $rows = $ctx->{'dbh'}->do($sql, undef, $value, $username) + or return (undef, 'ERROR', "Database Error: " . $ctx->{'dbh'}->errstr); + + unless($rows == 1) { + return (undef, 'ERROR', "user '" . $username . "' not known by rivendell") + } + return (1, 'OK', 'success'); +} + sub get_musicpools_clocks { my ($ctx) = @_; diff --git a/test/music-grids b/test/music-grids new file mode 100755 index 0000000..35bb702 --- /dev/null +++ b/test/music-grids @@ -0,0 +1,47 @@ +#!/usr/bin/perl -w +# +# rhrdlibs +# +# Copyright (C) 2015-2016 Christian Pointner +# +# This file is part of rhrdlibs. +# +# rhrdlibs is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# any later version. +# +# rhrdlibs is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with rhrdlibs. If not, see . +# + +use strict; +use POSIX; +use lib "../lib/"; +use RHRD::rddb; + +my ($ctx, $status, $errorstring) = RHRD::rddb::init(); +if(defined $ctx) { + my $username = ""; + $username = $ARGV[0] if(defined($ARGV[0])); + (my $authorized, $status, $errorstring) = RHRD::rddb::is_musicpools_user($ctx, $username); + if(!defined $authorized) { + print STDERR "$status: $errorstring\n"; + RHRD::rddb::destroy($ctx); + exit 1; + } + if($authorized) { + print "'$username' is allowed to edit music grids\n"; + } else { + print "'$username' is *not* allowed to edit music grids\n"; + } + RHRD::rddb::destroy($ctx); +} else { + print STDERR "$errorstring\n"; + exit 1; +} -- cgit v0.10.2