FU: Use schema validation for query parameters

...much better.

(Also I remembered why I threw away groff stderr; it's pretty useless)
This commit is contained in:
Yorhel 2025-02-25 14:32:20 +01:00
parent 682321d1be
commit c16fe86e7a
2 changed files with 7 additions and 12 deletions

View file

@ -60,7 +60,7 @@ sub fmt($input) {
if ($poll->events($err)) { if ($poll->events($err)) {
my $r = sysread $err, my $buf, 16*1024; my $r = sysread $err, my $buf, 16*1024;
$poll->remove($err) if $r == 0; $poll->remove($err) if $r == 0;
warn "GROFF: $buf\n" if $r > 0; #warn "GROFF: $buf\n" if $r > 0;
} }
} }
} }

View file

@ -540,7 +540,7 @@ FU::get '/info/about' => sub {
}; };
FU::get '/browse/search' => sub { FU::get '/browse/search' => sub {
my $q = fu->query('q')//''; # TODO: Use schema, this may be an array my $q = fu->query(q => { onerror => [''], values => {}, scalar => 1 })->[0];
my $name = $q; my $name = $q;
my $sect = $name =~ s/^([0-9])\s+// || $name =~ s/\(([a-zA-Z0-9]+)\)$// || $name =~ s/\.([0-9][a-zA-Z0-9]*)$// ? $1 : ''; my $sect = $name =~ s/^([0-9])\s+// || $name =~ s/\(([a-zA-Z0-9]+)\)$// || $name =~ s/\.([0-9][a-zA-Z0-9]*)$// ? $1 : '';
@ -850,15 +850,10 @@ FU::get qr{/pkg/([^/]+)} => sub($short) {
fu->error(404) if !$sys; fu->error(404) if !$sys;
$FU::REQ->{qs} =~ s/;/&/g if $FU::REQ->{qs}; # HACK: old URLs used ';' as separator instead of '&' $FU::REQ->{qs} =~ s/;/&/g if $FU::REQ->{qs}; # HACK: old URLs used ';' as separator instead of '&'
my $f = { my $f = fu->query(
c => fu->query('c')//'all', c => { onerror => 'all', enum => [ '0', 'all', 'a'..'z' ] },
p => fu->query('p')//1, p => { onerror => 1, uint => 1, range => [1,200] },
}; );
# TODO:
#my $f = tuwf->validate(get =>
# c => { onerror => 'all', enum => [ '0', 'all', 'a'..'z' ] },
# p => { onerror => 1, uint => 1, range => [1,200] },
#)->data;
my $where = SQL 'c_hasman AND NOT dead AND system =', $sys->{id}, $f->{c} ne 'all' ? ('AND match_firstchar(name,', $f->{c}, ')') : (); my $where = SQL 'c_hasman AND NOT dead AND system =', $sys->{id}, $f->{c} ne 'all' ? ('AND match_firstchar(name,', $f->{c}, ')') : ();
my $count = fu->SQL('SELECT count(*) FROM packages p WHERE', $where)->val; my $count = fu->SQL('SELECT count(*) FROM packages p WHERE', $where)->val;
@ -910,7 +905,7 @@ FU::get qr{/pkg/([^/]+)/(.+)} => sub($short, $path) {
my $sel = $ver ? (grep $_->{version} eq $ver, @$vers)[0] : $vers->[0]; my $sel = $ver ? (grep $_->{version} eq $ver, @$vers)[0] : $vers->[0];
fu->error(404) if !$sel; fu->error(404) if !$sel;
my $p = fu->query('p')//1; # TODO: tuwf->validate(get => p => { onerror => 1, uint => 1, range => [1,100] })->data; my $p = fu->query(p => { onerror => 1, uint => 1, range => [1,100] });
my $count = fu->SQL('SELECT count(*) FROM files WHERE pkgver =', $sel->{id})->val; my $count = fu->SQL('SELECT count(*) FROM files WHERE pkgver =', $sel->{id})->val;
my $mans = fu->SQL(' my $mans = fu->SQL('