From e2e61ec6ca746d28a25900aba575806335cc8ade Mon Sep 17 00:00:00 2001 From: David Cook Date: Wed, 8 Jul 2020 11:53:54 +0000 Subject: [PATCH] Bug 25672: Use enable_plugin_browser_upload flag to control plugin upload This patch adds a enable_plugin_browser_upload flag to koha-conf.xml, which controls whether or not Koha intranet users can upload Koha plugins via their browser. Like "enable_plugins", it defaults to 0 for new installs. This is useful when you want to provide Koha intranet users with plugins that are pre-installed by administrators (by CLI) or restricting them to plugins from a Github repo. See the following for more information: Bug 23975 - Add ability to search and install plugins from GitHub Bug 23191 - Administrators should be able to install plugins from the command line To test: 1) Apply the full patchset 2) Confirm 1 is present in koha-conf.xml 3) Add 1 to koha-conf.xml 4) Ensure that the block is not commented and contains at least one trusted organisation in koha-conf.xml If needed get it from: debian/templates/koha-conf-site.xml.in 5) Run restart_all (in koha-testing-docker) 6) Go to /cgi-bin/koha/plugins/plugins-home.pl and note that you don't see an option to upload plugins 7) You should however see a search option and upon search you should have results returned from the chosen trusted organisations listed in the block mentioned above. 8) Clicking install on one of the results should work as expected and install the plugin. 9) Go directly to /cgi-bin/koha/plugins/plugins-upload.pl and note that it says "Plugin upload is restricted to only those plugins listed by your server administrator" and gives instructions on how to enable unrestricted browser upload. Signed-off-by: Nicolas Legrand Signed-off-by: Martin Renvoize Signed-off-by: Kyle M Hall Signed-off-by: David Cook Rebased-by: Victor Grousset/tuxayo Signed-off-by: Victor Grousset/tuxayo Signed-off-by: Kyle M Hall Signed-off-by: Tomas Cohen Arazi --- debian/templates/koha-conf-site.xml.in | 1 + etc/koha-conf.xml | 1 + .../prog/en/modules/plugins/plugins-disabled.tt | 6 +++++- .../prog/en/modules/plugins/plugins-home.tt | 2 ++ plugins/plugins-home.pl | 1 + plugins/plugins-upload.pl | 9 +++++++-- 6 files changed, 17 insertions(+), 3 deletions(-) diff --git a/debian/templates/koha-conf-site.xml.in b/debian/templates/koha-conf-site.xml.in index 8733dc6690..54500cd971 100644 --- a/debian/templates/koha-conf-site.xml.in +++ b/debian/templates/koha-conf-site.xml.in @@ -266,6 +266,7 @@ __END_SRU_PUBLICSERVER__ 1 __PLUGINS_DIR__ 0 + 0 __UPLOAD_PATH__ __TMP_PATH__ /usr/share/koha/intranet/cgi-bin diff --git a/etc/koha-conf.xml b/etc/koha-conf.xml index 829ffd3e7d..5fa53c1da5 100644 --- a/etc/koha-conf.xml +++ b/etc/koha-conf.xml @@ -79,6 +79,7 @@ 1 __PLUGINS_DIR__ 0 + 0 __INTRANET_CGI_DIR__ diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/plugins/plugins-disabled.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/plugins/plugins-disabled.tt index e23fe82069..f8d7d38b04 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/plugins/plugins-disabled.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/plugins/plugins-disabled.tt @@ -29,9 +29,13 @@
+ [% IF ( browser_upload_enabled.defined ) && ( browser_upload_enabled == 0 ) %] +

Plugin browser upload disabled

+

To enable Koha plugin browser upload, the flag enable_plugin_browser_upload must be set in the Koha configuration file

+ [% ELSE %]

Plugins disabled

-

To enable Koha plugins, the flag enable_plugins must be set in the Koha configuration file

+ [% END %]
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/plugins/plugins-home.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/plugins/plugins-home.tt index 1ee0768912..98f71298a3 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/plugins/plugins-home.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/plugins/plugins-home.tt @@ -46,7 +46,9 @@ [% IF ( CAN_user_plugins_manage ) %]
+ [% IF ( enable_browser_upload ) %] Upload plugin + [% END %]
diff --git a/plugins/plugins-home.pl b/plugins/plugins-home.pl index 870fcadfef..4b76299535 100755 --- a/plugins/plugins-home.pl +++ b/plugins/plugins-home.pl @@ -59,6 +59,7 @@ if ($plugins_enabled) { ); $template->param( plugins => \@plugins, ); + $template->param( enable_browser_upload => C4::Context->config('enable_plugin_browser_upload') ); $template->param( can_search => C4::Context->config('plugin_repos') ? 1 : 0 ); my @results; diff --git a/plugins/plugins-upload.pl b/plugins/plugins-upload.pl index 3e44f00b7e..1fe6b3b041 100755 --- a/plugins/plugins-upload.pl +++ b/plugins/plugins-upload.pl @@ -31,17 +31,22 @@ use Koha::Logger; use Koha::Plugins; my $plugins_enabled = C4::Context->config("enable_plugins"); +my $browser_upload_enabled = C4::Context->config('enable_plugin_browser_upload'); my $input = CGI->new; my ( $template, $loggedinuser, $cookie ) = get_template_and_user( - { template_name => ($plugins_enabled) ? "plugins/plugins-upload.tt" : "plugins/plugins-disabled.tt", + { template_name => ($plugins_enabled && $browser_upload_enabled) ? "plugins/plugins-upload.tt" : "plugins/plugins-disabled.tt", query => $input, type => "intranet", flagsrequired => { plugins => 'manage' }, } ); +if ($plugins_enabled){ + $template->param( browser_upload_enabled => $browser_upload_enabled ); +} + my $uploadfilename = $input->param('uploadfile'); my $uploadfile = $input->upload('uploadfile'); my $uploadlocation = $input->param('uploadlocation'); @@ -51,7 +56,7 @@ my ( $tempfile, $tfh ); my %errors; -if ($plugins_enabled) { +if ($plugins_enabled && $browser_upload_enabled) { if ( ( $op eq 'Upload' ) && ( $uploadfile || $uploadlocation ) ) { my $plugins_dir = C4::Context->config("pluginsdir"); $plugins_dir = ref($plugins_dir) eq 'ARRAY' ? $plugins_dir->[0] : $plugins_dir; -- 2.39.5