diff options
author | Christian Pointner <equinox@spreadspace.org> | 2015-10-09 00:16:02 (GMT) |
---|---|---|
committer | Christian Pointner <equinox@spreadspace.org> | 2015-10-09 00:16:02 (GMT) |
commit | 91a5a9072f82cef110535917a4601f14ddd9fa31 (patch) | |
tree | a6be492d2d84382c4a61ac2309dc92cf20255f28 /lib/RHRD | |
parent | e10c9d729f9c7c9bf342e0053dc53988d4e26ff2 (diff) |
improved sanity checks for dropbox params
Diffstat (limited to 'lib/RHRD')
-rwxr-xr-x | lib/RHRD/rddb.pm | 19 | ||||
-rwxr-xr-x | lib/RHRD/utils.pm | 58 |
2 files changed, 70 insertions, 7 deletions
diff --git a/lib/RHRD/rddb.pm b/lib/RHRD/rddb.pm index 5bbc645..07e0f86 100755 --- a/lib/RHRD/rddb.pm +++ b/lib/RHRD/rddb.pm @@ -25,6 +25,7 @@ package RHRD::rddb; use strict; use Config::IniFiles; use DBI; +use RHRD::utils; ########################### constants ########################### @@ -854,7 +855,7 @@ sub get_dropboxes $entry->{'NORMLEVEL'} = int $normlevel; $entry->{'TRIMLEVEL'} = int $trimlevel; $entry->{'PARAM'} = $params; - if($p[0] eq "S") { + if(defined($p[0]) && $p[0] eq "S") { $entry->{'TYPE'} = 'show'; $entry->{'SHOWID'} = $to_cart; @@ -866,17 +867,21 @@ sub get_dropboxes $entry->{'SHOWLOG'} = $log; $entry->{'SHOWRHYTHM'} = $p[1]; - $entry->{'SHOWDOW'} = int $p[2]; - $entry->{'SHOWDOW'} = 0 unless $entry->{'SHOWDOW'} < 7; - substr($p[3], 2, 0) = ':'; + $entry->{'SHOWRHYTHM'} = '????' unless((RHRD::utils::dropbox_param_rhythm_ok($entry->{'SHOWRHYTHM'}))[0]); + $entry->{'SHOWDOW'} = $p[2]; + $entry->{'SHOWDOW'} = 0 unless((RHRD::utils::dropbox_param_dow_ok($entry->{'SHOWDOW'}))[0]); $entry->{'SHOWSTARTTIME'} = $p[3]; - $entry->{'SHOWLEN'} = int $p[4]; - } elsif($p[0] eq "J") { + $entry->{'SHOWSTARTTIME'} = '????' unless((RHRD::utils::dropbox_param_starttime_ok($entry->{'SHOWSTARTTIME'}))[0]); + $entry->{'SHOWLEN'} = $p[4]; + $entry->{'SHOWLEN'} = 0 unless((RHRD::utils::dropbox_param_len_ok($entry->{'SHOWLEN'}))[0]); + } elsif(defined($p[0]) && $p[0] eq "J") { $entry->{'TYPE'} = 'jingle'; $entry->{'JINGLETITLE'} = $groupdesc; - } elsif($p[0] eq "M") { + } elsif(defined($p[0]) && $p[0] eq "M") { $entry->{'TYPE'} = 'musicpool'; $entry->{'MUSICPOOLTITLE'} = $groupdesc; + } else { + $entry->{'TYPE'} = 'unknown'; } push @allowed_dbs, $entry; diff --git a/lib/RHRD/utils.pm b/lib/RHRD/utils.pm index 083f657..81e5f86 100755 --- a/lib/RHRD/utils.pm +++ b/lib/RHRD/utils.pm @@ -54,4 +54,62 @@ sub get_rd_week return $week; } +use constant { + DB_PARAM_TYPE_HINT => "only S, M and J are allowed with S -> Show, M -> Musicpool, J -> Jingles", + DB_PARAM_RHYTHM_HINT => "only 0 or 1 are allowed, length must be exactly 4 and it must not be '0000'", + DB_PARAM_DOW_HINT => "must be between 1 and 7 (1=Monday, ..., 7=Sunday)", + DB_PARAM_STARTTIME_HINT => "must be in format HHMM (without seperator) in 24 hour format", + DB_PARAM_LEN_HINT => "must be a positive number below 1440", +}; + +sub dropbox_param_type_ok +{ + my ($type) = @_; + + unless(defined($type) && ($type == 'S' || $type == 'M' || $type == 'J')) { + return (0, "unkown type '" . (defined($type) ? $type : 'undef') . "'", DB_PARAM_TYPE_HINT); + } + return (1, 'OK', DB_PARAM_TYPE_HINT); +} + +sub dropbox_param_rhythm_ok +{ + my ($rhythm) = @_; + + if(!defined($rhythm) || $rhythm !~ m/^[01]{4}$/ || $rhythm eq '0000') { + return (0, "rhythm '" . (defined($rhythm) ? $rhythm : 'undef') . "' contains illegal characters or is too long/short", DB_PARAM_RHYTHM_HINT); + } + return (1, 'OK', DB_PARAM_RHYTHM_HINT); +} + +sub dropbox_param_dow_ok +{ + my ($dow) = @_; + + if(!defined($dow) || $dow < 1 || $dow > 7) { + return (0, "dow '" . (defined($dow) ? $dow : 'undef') . "' is out of bounds", DB_PARAM_DOW_HINT); + } + return (1, 'OK', DB_PARAM_DOW_HINT); +} + +sub dropbox_param_starttime_ok +{ + my ($starttime) = @_; + + if(!defined($starttime) || $starttime !~ m/^[0-2][0-9][0-5][0-9]$/ || $starttime > 2359) { + return (0, "starttime '" . (defined($starttime) ? $starttime : 'undef') . "' is not a valid clock time", DB_PARAM_STARTTIME_HINT); + } + return (1, 'OK', DB_PARAM_STARTTIME_HINT); +} + +sub dropbox_param_len_ok +{ + my ($len) = @_; + + if(!defined($len) || $len <= 0 || $len > 1440) { + return (0, "len '" . (defined($len) ? $len : 'undef') . "' is out of bounds", DB_PARAM_LEN_HINT); + } + return (1, 'OK', DB_PARAM_LEN_HINT); +} + return 1; |