summaryrefslogtreecommitdiffstats
path: root/Bugzilla/Quantum/Legacy.pm
blob: 73e877af37276b50a6239aad62fdcd9fa970b7e5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
# This Source Code Form is "Incompatible With Secondary Licenses", as
# defined by the Mozilla Public License, v. 2.0.

package Bugzilla::Quantum::Legacy;
use Mojo::Base 'Mojolicious::Controller';
use File::Spec::Functions qw(catfile);
use Bugzilla::Constants qw(bz_locations);
use Taint::Util qw(untaint);
use Sub::Name qw(subname);
use autodie;

_load_cgi(index_cgi => 'index.cgi');
_load_cgi(show_bug => 'show_bug.cgi');

sub _load_cgi {
    my ($name, $file) = @_;
    my $content;
    {
        local $/ = undef;
        open my $fh, '<', catfile(bz_locations->{cgi_path}, $file);
        $content = <$fh>;
        untaint($content);
        close $fh;
    }
    my $pkg = __PACKAGE__ . '::' . $name;
    my @lines = (
        qq{package $pkg;},
        qq{#line 1 "$file"},
        "sub { my (\$self) = \@_; $content };"
    );
    my $code = join "\n", @lines;
    my $sub = _eval($code);
    {
        no strict 'refs'; ## no critic (strict)
        *{ $name } = subname($name, $sub);
    }
}

sub _eval { ## no critic (unpack)
    return eval $_[0]; ## no critic (eval)
}

1;