summaryrefslogtreecommitdiff
path: root/lib/RHRD
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2015-10-09 00:16:02 (GMT)
committerChristian Pointner <equinox@spreadspace.org>2015-10-09 00:16:02 (GMT)
commit91a5a9072f82cef110535917a4601f14ddd9fa31 (patch)
treea6be492d2d84382c4a61ac2309dc92cf20255f28 /lib/RHRD
parente10c9d729f9c7c9bf342e0053dc53988d4e26ff2 (diff)
improved sanity checks for dropbox params
Diffstat (limited to 'lib/RHRD')
-rwxr-xr-xlib/RHRD/rddb.pm19
-rwxr-xr-xlib/RHRD/utils.pm58
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;