diff options
author | Dylan William Hardison <dylan@hardison.net> | 2018-04-08 01:20:00 +0200 |
---|---|---|
committer | Dylan William Hardison <dylan@hardison.net> | 2018-06-28 22:41:55 +0200 |
commit | 541e2b41af8cc44ad3eb0638618bc457c666d612 (patch) | |
tree | 121866bb37e4b06ffd7320679772d77271158661 /Bugzilla/Quantum/Legacy.pm | |
parent | cdc26a69674ea7a3413efce2f8d4e3225c6ab76e (diff) | |
download | bugzilla-541e2b41af8cc44ad3eb0638618bc457c666d612.tar.gz bugzilla-541e2b41af8cc44ad3eb0638618bc457c666d612.tar.xz |
a bit of a quantum leap
It's now possible to load the CGIs into a mojolicious controller.
Compatibility isn't 100% yet, but it should give a migration path
for any random CGI to become a proper controller.
Diffstat (limited to 'Bugzilla/Quantum/Legacy.pm')
-rw-r--r-- | Bugzilla/Quantum/Legacy.pm | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/Bugzilla/Quantum/Legacy.pm b/Bugzilla/Quantum/Legacy.pm new file mode 100644 index 000000000..73e877af3 --- /dev/null +++ b/Bugzilla/Quantum/Legacy.pm @@ -0,0 +1,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;
\ No newline at end of file |