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

@ -540,7 +540,7 @@ FU::get '/info/about' => 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 $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::REQ->{qs} =~ s/;/&/g if $FU::REQ->{qs}; # HACK: old URLs used ';' as separator instead of '&'
my $f = {
c => fu->query('c')//'all',
p => fu->query('p')//1,
};
# TODO:
#my $f = tuwf->validate(get =>
# c => { onerror => 'all', enum => [ '0', 'all', 'a'..'z' ] },
# p => { onerror => 1, uint => 1, range => [1,200] },
#)->data;
my $f = fu->query(
c => { onerror => 'all', enum => [ '0', 'all', 'a'..'z' ] },
p => { onerror => 1, uint => 1, range => [1,200] },
);
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;
@ -910,7 +905,7 @@ FU::get qr{/pkg/([^/]+)/(.+)} => sub($short, $path) {
my $sel = $ver ? (grep $_->{version} eq $ver, @$vers)[0] : $vers->[0];
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 $mans = fu->SQL('