Fix #183 — Add config API endpoint

This commit is contained in:
Luc Didry 2020-04-24 18:39:00 +02:00
parent 1b2ee5b4f5
commit 53342a31ba
No known key found for this signature in database
GPG Key ID: EA868E12D0257E3C
5 changed files with 60 additions and 2 deletions

View File

@ -3,6 +3,7 @@ Revision history for Lufi
?.??.? ????-??-??
- Notifications when uploading and downloading files (#181)
- Use Weblate instead of Zanata for translations (https://weblate.framasoft.org/projects/lufi/development/)
- Add config API endpoint (#183)
0.04.6 2019-11-07
- Now can send large files (>2Gio) while using a DB other than SQLite (#165)

View File

@ -11,7 +11,7 @@ locales:
$(XGETTEXT) $(EXTRACTDIR) -o $(ENPO) 2>/dev/null
podcheck:
podchecker lib/Lufi/DB/File.pm lib/Lufi/DB/Slice.pm
podchecker lib/Lufi/DB/File.pm lib/Lufi/DB/Slice.pm lib/Lufi/DB/Invitation.pm
cover:
PERL5OPT='-Ilib/' HARNESS_PERL_SWITCHES='-MDevel::Cover' $(CARTON) cover --ignore_re '^local'

View File

@ -159,6 +159,11 @@ sub startup {
->to('Misc#about')
->name('about');
# About config API endpoint
$r->get('/about/config')
->to('Misc#config_infos')
->name('config');
# Generated js files
$r->get('/partial/:file')
->to('Misc#js_files')

View File

@ -2,6 +2,7 @@
package Lufi::Controller::Misc;
use Mojo::Base 'Mojolicious::Controller';
use Mojo::File;
use Mojo::JSON qw(true false);
use Mojo::URL;
use Lufi::DB::File;
@ -34,6 +35,27 @@ sub about {
shift->render(template => 'about');
}
sub config_infos {
my $c = shift;
$c->render(
json => {
report => $c->config('report'),
instance_name => $c->config('instance_name'),
max_file_size => $c->config('max_file_size'),
broadcast_message => $c->config('broadcast_message'),
default_delay => $c->config('default_delay'),
max_delay => $c->config('max_delay'),
delay_for_size => $c->config('delay_for_size'),
allow_pwd_on_files => $c->config('allow_pwd_on_files'),
force_burn_after_reading => $c->config('force_burn_after_reading'),
keep_ip_during => $c->config('keep_ip_during'),
stop_upload => (-f 'stop-upload' || -f 'stop-upload.manual') ? true : false,
need_authentication => (defined($c->config('ldap')) || defined($c->config('htpasswd'))) ? true : false,
}
);
}
sub js_files {
my $c = shift;

View File

@ -1,7 +1,7 @@
# vim:set sw=4 ts=4 sts=4 ft=perl expandtab:
use Mojo::Base -strict;
use Mojo::File;
use Mojo::JSON qw(to_json from_json true);
use Mojo::JSON qw(to_json from_json true false);
use Mojolicious;
use Test::More;
@ -87,16 +87,19 @@ $t->get_ok('/')
->status_is(200)
->content_like(qr@Lufi@i);
test_infos_api(false);
test_upload_file();
test_download_file();
## Test htpasswd
switch_to_htpasswd();
test_infos_api(true);
auth_test_suite('luc', 'toto');
restore_config();
## Test LDAP
switch_to_ldap();
test_infos_api(true);
auth_test_suite('zoidberg', 'zoidberg');
restore_config();
@ -105,6 +108,33 @@ done_testing();
######
### Functions
##
sub test_infos_api {
my $auth = shift;
$t->get_ok('/about/config')
->status_is(200)
->json_has(
'/allow_pwd_on_files', '/need_authentication', '/max_delay',
'/instance_name', '/broadcast_message', '/max_file_size',
'/keep_ip_during', '/report', '/stop_upload',
'/delay_for_size', '/default_delay', '/force_burn_after_reading'
)
->json_is(
'/allow_pwd_on_files' => 1,
'/need_authentication' => $auth,
'/max_delay' => 0,
'/instance_name' => 'Lufi',
'/broadcast_message' => undef,
'/max_file_size' => undef,
'/keep_ip_during' => 365,
'/report' => 'mailto:report@example.com',
'/stop_upload' => false,
'/delay_for_size' => undef,
'/default_delay' => 0,
'/force_burn_after_reading' => 0
);
}
sub test_upload_file {
$t->websocket_ok('/upload/')
->send_ok($msg.'XXMOJOXX'.$encrypted)