summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2019-12-30 16:45:21 +0100
committerYorhel <git@yorhel.nl>2019-12-30 16:45:23 +0100
commit5429252b438249092f615497829177cd32b14599 (patch)
treed8ec5e1bbff2fc714e5e131708289656c828a849
parent214646f73973a84ae4a91e8b7a3be440546edccf (diff)
Minor refactor: Use TUWF::Validate's onerror clause for GET parameters
This allows for proper use of parameters that do validate while using defaults for those that don't. Also removes the need for error handling and potential duplication of default values. Requires latest TUWF git, so rebuild the docker image if you use that.
-rw-r--r--lib/VNWeb/Discussions/Board.pm2
-rw-r--r--lib/VNWeb/Discussions/Search.pm4
-rw-r--r--lib/VNWeb/Discussions/UPosts.pm2
-rw-r--r--lib/VNWeb/Misc/History.pm12
-rw-r--r--lib/VNWeb/User/List.pm10
-rw-r--r--lib/VNWeb/User/Lists.pm12
-rw-r--r--lib/VNWeb/User/Notifications.pm4
-rw-r--r--lib/VNWeb/VN/Votes.pm8
-rw-r--r--lib/VNWeb/Validation.pm4
9 files changed, 29 insertions, 29 deletions
diff --git a/lib/VNWeb/Discussions/Board.pm b/lib/VNWeb/Discussions/Board.pm
index 0af7f2cc..edce6789 100644
--- a/lib/VNWeb/Discussions/Board.pm
+++ b/lib/VNWeb/Discussions/Board.pm
@@ -7,7 +7,7 @@ use VNWeb::Discussions::Lib;
TUWF::get qr{/t/(all|$BOARD_RE)}, sub {
my($type, $id) = tuwf->capture(1) =~ /^([^0-9]+)([0-9]*)$/;
- my $page = eval { tuwf->validate(get => p => { upage => 1 })->data } || 1;
+ my $page = tuwf->validate(get => p => { upage => 1 })->data;
my $obj = !$id ? undef :
$type eq 'v' ? tuwf->dbRowi('SELECT id, title, original, hidden AS entry_hidden, locked AS entry_locked FROM vn WHERE id =', \$id) :
diff --git a/lib/VNWeb/Discussions/Search.pm b/lib/VNWeb/Discussions/Search.pm
index 511267b0..06366caf 100644
--- a/lib/VNWeb/Discussions/Search.pm
+++ b/lib/VNWeb/Discussions/Search.pm
@@ -7,11 +7,11 @@ use VNWeb::Discussions::Lib;
sub filters_ {
state $schema = tuwf->compile({ type => 'hash', keys => {
bq => { required => 0, default => '' },
- b => { type => 'array', scalar => 1, required => 0, default => [keys %BOARD_TYPE], values => { enum => \%BOARD_TYPE } },
+ b => { type => 'array', scalar => 1, onerror => [keys %BOARD_TYPE], values => { enum => \%BOARD_TYPE } },
t => { anybool => 1 },
p => { page => 1 },
}});
- my $filt = eval { tuwf->validate(get => $schema)->data } || tuwf->pass;
+ my $filt = tuwf->validate(get => $schema)->data;
my %boards = map +($_,1), $filt->{b}->@*;
form_ method => 'get', action => tuwf->reqPath(), sub {
diff --git a/lib/VNWeb/Discussions/UPosts.pm b/lib/VNWeb/Discussions/UPosts.pm
index ead0ac7f..45be3f0b 100644
--- a/lib/VNWeb/Discussions/UPosts.pm
+++ b/lib/VNWeb/Discussions/UPosts.pm
@@ -38,7 +38,7 @@ TUWF::get qr{/$RE{uid}/posts}, sub {
my $u = tuwf->dbRowi('SELECT id, ', sql_user(), 'FROM users u WHERE id =', \tuwf->capture('id'));
return tuwf->resNotFound if !$u->{id};
- my $page = eval { tuwf->validate(get => p => { upage => 1 })->data } || 1;
+ my $page = tuwf->validate(get => p => { upage => 1 })->data;
my $from_and_where = sql
'FROM threads_posts tp
diff --git a/lib/VNWeb/Misc/History.pm b/lib/VNWeb/Misc/History.pm
index d3caf4a9..26ef5f48 100644
--- a/lib/VNWeb/Misc/History.pm
+++ b/lib/VNWeb/Misc/History.pm
@@ -103,14 +103,14 @@ sub filters_ {
state $schema = tuwf->compile({ type => 'hash', keys => {
# Types
- t => { type => 'array', scalar => 1, required => 0, default => [map $_->[0], @types], values => { enum => [(map $_->[0], @types), 'a'] } },
- m => { required => 0, enum => [ 0, 1 ] }, # Automated edits
- h => { required => 0, default => 0, enum => [ -1..1 ] }, # Hidden items
- e => { required => 0, default => 0, enum => [ -1..1 ] }, # Existing/new items
- r => { required => 0, default => 0, enum => [ 0, 1 ] }, # Include releases
+ t => { type => 'array', scalar => 1, onerror => [map $_->[0], @types], values => { enum => [(map $_->[0], @types), 'a'] } },
+ m => { onerror => undef, enum => [ 0, 1 ] }, # Automated edits
+ h => { onerror => 0, enum => [ -1..1 ] }, # Hidden items
+ e => { onerror => 0, enum => [ -1..1 ] }, # Existing/new items
+ r => { onerror => 0, enum => [ 0, 1 ] }, # Include releases
p => { page => 1 },
}});
- my $filt = eval { tuwf->validate(get => $schema)->data } || tuwf->pass;
+ my $filt = tuwf->validate(get => $schema)->data;
$filt->{m} //= $type ? 0 : 1; # Exclude automated edits by default on the main 'recent changes' view.
diff --git a/lib/VNWeb/User/List.pm b/lib/VNWeb/User/List.pm
index 72da203d..7d5311a2 100644
--- a/lib/VNWeb/User/List.pm
+++ b/lib/VNWeb/User/List.pm
@@ -54,12 +54,12 @@ sub listing_ {
TUWF::get qr{/u/(?<char>[0a-z]|all)}, sub {
my $char = tuwf->capture('char');
- my $opt = eval { tuwf->validate(get =>
+ my $opt = tuwf->validate(get =>
p => { upage => 1 },
- s => { required => 0, default => 'registered', enum => [qw[username registered vns votes wish changes tags]] },
- o => { required => 0, default => 'd', enum => [qw[a d]] },
- q => { required => 0, default => '' },
- )->data } || return tuwf->resNotFound;
+ s => { onerror => 'registered', enum => [qw[username registered vns votes wish changes tags]] },
+ o => { onerror => 'd', enum => [qw[a d]] },
+ q => { onerror => '' },
+ )->data;
my @where = (
$char eq 'all' ? () : $char eq '0' ? "ascii(username) not between ascii('a') and ascii('z')" : "username like '$char%'",
diff --git a/lib/VNWeb/User/Lists.pm b/lib/VNWeb/User/Lists.pm
index 2c0548c1..980bd807 100644
--- a/lib/VNWeb/User/Lists.pm
+++ b/lib/VNWeb/User/Lists.pm
@@ -278,14 +278,14 @@ sub opt {
tuwf->reqGet('votes') ? { p => 1, l => [7], s => 'voted', o => 'd', c => [qw/vote voted/] } :
tuwf->reqGet('wishlist') ? { p => 1, l => [5], s => 'title', o => 'a', c => [qw/added/] } :
# Full options
- eval { tuwf->validate(get =>
+ tuwf->validate(get =>
p => { upage => 1 },
- l => { type => 'array', scalar => 1, required => 0, default => [], values => { int => 1 } },
- s => { required => 0, default => 'title', enum => [qw[ title label vote voted added modified started finished rel rating ]] },
- o => { required => 0, default => 'a', enum => ['a', 'd'] },
- c => { type => 'array', scalar => 1, required => 0, default => [], values => { enum => [qw[ vote voted added modified started finished rel rating ]] } },
+ l => { onerror => [], type => 'array', scalar => 1, values => { int => 1 } },
+ s => { onerror => 'title', enum => [qw[ title label vote voted added modified started finished rel rating ]] },
+ o => { onerror => 'a', enum => ['a', 'd'] },
+ c => { onerror => [], type => 'array', scalar => 1, values => { enum => [qw[ vote voted added modified started finished rel rating ]] } },
q => { required => 0 },
- )->data } || { p => 1, l => [], s => 'title', o => 'a', c => [] };
+ )->data;
# $labels only includes labels we are allowed to see, getting rid of any labels in 'l' that aren't in $labels ensures we only filter on visible labels
my %accessible_labels = map +($_->{id}, 1), @$filtlabels;
diff --git a/lib/VNWeb/User/Notifications.pm b/lib/VNWeb/User/Notifications.pm
index 4f45e0b3..c74cc1a8 100644
--- a/lib/VNWeb/User/Notifications.pm
+++ b/lib/VNWeb/User/Notifications.pm
@@ -90,10 +90,10 @@ TUWF::get qr{/$RE{uid}/notifies}, sub {
my $id = tuwf->capture('id');
return tuwf->resNotFound if !auth || $id != auth->uid;
- my $opt = eval { tuwf->validate(get =>
+ my $opt = tuwf->validate(get =>
p => { page => 1 },
r => { anybool => 1 },
- )->data } || { p => 1, r => 0 };
+ )->data;
my $where = sql_and(
sql('uid =', \$id),
diff --git a/lib/VNWeb/VN/Votes.pm b/lib/VNWeb/VN/Votes.pm
index 1d4fe774..00ea04b6 100644
--- a/lib/VNWeb/VN/Votes.pm
+++ b/lib/VNWeb/VN/Votes.pm
@@ -34,11 +34,11 @@ TUWF::get qr{/$RE{vid}/votes}, sub {
my $v = tuwf->dbRowi('SELECT id, title, hidden AS entry_hidden, locked AS entry_locked FROM vn WHERE id =', \$id);
return tuwf->resNotFound if !$v->{id} || $v->{hidden};
- my $opt = eval { tuwf->validate(get =>
+ my $opt = tuwf->validate(get =>
p => { page => 1 },
- o => { required => 0, default => 'd', enum => ['a','d'] },
- s => { required => 0, default => 'date', enum => ['date', 'title', 'vote' ] }
- )->data } || { p => 1, o => 'd', s => 'date' };
+ o => { onerror => 'd', enum => ['a','d'] },
+ s => { onerror => 'date', enum => ['date', 'title', 'vote' ] }
+ )->data;
my $fromwhere = sql
'FROM ulist_vns uv
diff --git a/lib/VNWeb/Validation.pm b/lib/VNWeb/Validation.pm
index 3cec3385..c506903a 100644
--- a/lib/VNWeb/Validation.pm
+++ b/lib/VNWeb/Validation.pm
@@ -22,8 +22,8 @@ our @EXPORT = qw/
TUWF::set custom_validations => {
id => { uint => 1, max => 1<<40 },
editsum => { required => 1, length => [ 2, 5000 ] },
- page => { uint => 1, min => 1, max => 1000, required => 0, default => 1 },
- upage => { uint => 1, min => 1, required => 0, default => 1 }, # pagination without a maximum
+ page => { uint => 1, min => 1, max => 1000, required => 0, default => 1, onerror => 1 },
+ upage => { uint => 1, min => 1, required => 0, default => 1, onerror => 1 }, # pagination without a maximum
username => { regex => qr/^(?!-*[a-z][0-9]+-*$)[a-z0-9-]*$/, minlength => 2, maxlength => 15 },
password => { length => [ 4, 500 ] },
language => { enum => \%LANGUAGE },