Skip to content

Commit 3329777

Browse files
committed
Merge remote-tracking branch 'origin/master' into edge
2 parents fb69e89 + 0221b6e commit 3329777

File tree

7 files changed

+60
-36
lines changed

7 files changed

+60
-36
lines changed

mig/install/generateconfs.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,7 @@ def main(argv, _generate_confs=generate_confs, _print=print):
195195
'permanent_freeze',
196196
'freeze_to_tape',
197197
'status_system_match',
198+
'storage_protocols',
198199
'duplicati_protocols',
199200
'imnotify_address',
200201
'imnotify_channel',

mig/shared/defaults.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -415,9 +415,18 @@
415415
PASSWORD_POLICIES = [POLICY_NONE, POLICY_WEAK, POLICY_MEDIUM, POLICY_HIGH,
416416
POLICY_MODERN, POLICY_CUSTOM]
417417

418-
# Prioritized protocol choices and internal values
419-
duplicati_protocol_choices = [('SFTP', 'sftp'), ('FTPS', 'ftps'),
420-
('WebDAVS', 'davs')]
418+
# Protocol aliases for pretty printing, etc.
419+
protocol_aliases = {'http': 'HTTP', 'https': 'HTTPS',
420+
'ftp': 'FTP', 'ftps': 'FTPS',
421+
'sftp': 'SFTP', 'sftp-subsys': 'SFTP',
422+
'dav': 'WebDAV', 'webdav': 'WebDAV',
423+
'davs': 'WebDAVS', 'webdavs': 'WebDAVS',
424+
'rsyncssh': 'RSYNC over SSH', 'rsyncd': 'RSYNC daemon',
425+
'oid': 'OpenID 2.0', 'openid': 'OpenID 2.0',
426+
'oidc': 'OpenID Connect', 'openidc': 'OpenID Connect'}
427+
# Prioritized protocol choices for duplicati - order matters!
428+
duplicati_protocol_choices = [(protocol_aliases[i], i) for i in
429+
['sftp', 'ftps', 'davs']]
421430
# Prioritized schedule backup frequency choices and json values
422431
duplicati_schedule_choices = [('Daily', '1D'), ('Weekly', '1W'),
423432
('Monthly', '1M'), ('Never', '')]

mig/shared/functionality/cat.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
# --- BEGIN_HEADER ---
55
#
66
# cat - show lines of one or more files
7-
# Copyright (C) 2003-2023 The MiG Project lead by Brian Vinter
7+
# Copyright (C) 2003-2024 The MiG Project lead by Brian Vinter
88
#
99
# This file is part of MiG.
1010
#
@@ -36,6 +36,7 @@
3636

3737
from mig.shared import returnvalues
3838
from mig.shared.base import client_id_dir
39+
from mig.shared.defaults import protocol_aliases
3940
from mig.shared.fileio import read_file, read_file_lines, write_file, \
4041
write_file_lines
4142
from mig.shared.functional import validate_input_and_cert, REJECT_UNSET
@@ -71,10 +72,14 @@ def _check_serve_permitted(configuration, paths):
7172
def _render_error_text_for_serve_limit(configuration):
7273
"""Helper to inform about suitable alternatives when above limit"""
7374
limit = configuration.wwwserve_max_bytes
74-
alternatives = ', '.join(configuration.storage_protocols)
75-
return ("Site configuration prevents web serving contents bigger than "
76-
"%d bytes - please use better alternatives (%s) to retrieve large "
77-
"data.") % (limit, alternatives)
75+
msg = "Site configuration prevents web serving contents bigger than " \
76+
"%d bytes" % limit
77+
if configuration.storage_protocols:
78+
aliased = [protocol_aliases[i] for i in configuration.storage_protocols
79+
if i in protocol_aliases]
80+
msg += " - please use better alternatives (%s) to retrieve large data" \
81+
% ', '.join(aliased)
82+
return msg
7883

7984

8085
def signature():

mig/shared/functionality/datatransfer.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
from mig.shared.base import client_id_dir, mask_creds, hexlify
4040
from mig.shared.conf import get_resource_exe
4141
from mig.shared.defaults import all_jobs, job_output_dir, default_pager_entries, \
42-
csrf_field
42+
csrf_field, protocol_aliases
4343
from mig.shared.fileio import read_tail_lines
4444
from mig.shared.functional import validate_input_and_cert
4545
from mig.shared.handlers import safe_handler, get_csrf_limit, make_csrf_token
@@ -67,10 +67,10 @@
6767
post_actions = transfer_actions + shuffling_actions + key_actions
6868
valid_actions = get_actions + post_actions
6969
# TODO: implement scp in backend and enable here?
70-
valid_proto = [("http", "HTTP"), ("https", "HTTPS"), ("ftp", "FTP"),
71-
("ftps", "FTPS"), ("webdav", "WebDAV"), ("webdavs", "WebDAVS"),
72-
("sftp", "SFTP"), ("rsyncssh", "RSYNC over SSH"),
73-
("rsyncd", "RSYNC daemon")]
70+
valid_proto_list = ["http", "https", "ftp", "ftps", "webdav", "webdavs", "sftp",
71+
"rsyncssh", "rsyncd"]
72+
valid_proto = [(proto, protocol_aliases[proto]) for proto in valid_proto_list
73+
if proto in protocol_aliases]
7474
valid_proto_map = dict(valid_proto)
7575
warn_anon = [i for (i, _) in valid_proto if not i in ('http', 'https', 'ftp',
7676
'rsyncd')]
@@ -489,7 +489,7 @@ def main(client_id, user_arguments_dict):
489489

490490
# Make page with manage transfers tab and manage keys tab
491491

492-
output_objects.append({'object_type': 'html_form', 'text': '''
492+
output_objects.append({'object_type': 'html_form', 'text': '''
493493
<div id="quiet-mode-content" class="hidden">
494494
<p>
495495
Accept data %(transfer_action)s of %(transfer_src_string)s from
@@ -509,7 +509,7 @@ def main(client_id, user_arguments_dict):
509509

510510
# Display external transfers, log and form to add new ones
511511

512-
output_objects.append({'object_type': 'html_form', 'text': '''
512+
output_objects.append({'object_type': 'html_form', 'text': '''
513513
<div id="transfer-tab">
514514
'''})
515515

@@ -671,13 +671,13 @@ def main(client_id, user_arguments_dict):
671671
'''
672672
output_objects.append(
673673
{'object_type': 'html_form', 'text': transfer_html % fill_helpers})
674-
output_objects.append({'object_type': 'html_form', 'text': '''
674+
output_objects.append({'object_type': 'html_form', 'text': '''
675675
</div>
676676
'''})
677677

678678
# Display key management
679679

680-
output_objects.append({'object_type': 'html_form', 'text': '''
680+
output_objects.append({'object_type': 'html_form', 'text': '''
681681
<div id="keys-tab">
682682
'''})
683683
output_objects.append(
@@ -737,11 +737,11 @@ def main(client_id, user_arguments_dict):
737737
''' % (restrict_template % 'ssh-rsa AAAAB3NzaC...', configuration.short_title)
738738
output_objects.append(
739739
{'object_type': 'html_form', 'text': key_html % fill_helpers})
740-
output_objects.append({'object_type': 'html_form', 'text': '''
740+
output_objects.append({'object_type': 'html_form', 'text': '''
741741
</div>
742742
'''})
743743

744-
output_objects.append({'object_type': 'html_form', 'text': '''
744+
output_objects.append({'object_type': 'html_form', 'text': '''
745745
</div>
746746
'''})
747747
return (output_objects, returnvalues.OK)

mig/shared/griddaemons/auth.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232

3333
from mig.shared.auth import active_twofactor_session
3434
from mig.shared.base import extract_field, expand_openid_alias
35-
from mig.shared.defaults import CRACK_USERNAME_REGEX
35+
from mig.shared.defaults import CRACK_USERNAME_REGEX, protocol_aliases
3636
from mig.shared.gdp.all import get_client_id_from_project_client_id
3737
from mig.shared.griddaemons.ratelimits import default_user_abuse_hits, \
3838
default_proto_abuse_hits, default_max_secret_hits, update_rate_limit
@@ -284,11 +284,8 @@ def validate_auth_attempt(configuration,
284284

285285
# Log auth attempt and set (authorized, disconnect) return values
286286

287-
proto_names = {'sftp': 'SFTP', 'sftp-subsys': 'SFTP', 'ftps': 'FTPS',
288-
'webdavs': 'WebDAVS', 'davs': 'WebDAVS',
289-
'openid': 'OpenID 2.0', 'openidc': 'OpenID Connect'}
290287
mountable_protos = ['sftp', 'sftp-subsys', 'ftps', 'webdavs', 'davs']
291-
proto_alias = proto_names.get(protocol, protocol.upper())
288+
proto_alias = protocol_aliases.get(protocol, protocol.upper())
292289
if exceeded_rate_limit:
293290
disconnect = True
294291
auth_msg = "Exceeded rate limit"

mig/shared/install.py

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -488,7 +488,8 @@ def generate_confs(
488488
permanent_freeze='no',
489489
freeze_to_tape='',
490490
status_system_match=keyword_any,
491-
duplicati_protocols='',
491+
storage_protocols=keyword_auto,
492+
duplicati_protocols=keyword_auto,
492493
imnotify_address='',
493494
imnotify_channel='',
494495
imnotify_username='',
@@ -803,6 +804,7 @@ def _generate_confs_prepare(
803804
permanent_freeze,
804805
freeze_to_tape,
805806
status_system_match,
807+
storage_protocols,
806808
duplicati_protocols,
807809
imnotify_address,
808810
imnotify_channel,
@@ -1328,17 +1330,27 @@ def _generate_confs_prepare(
13281330
if davs_show_port:
13291331
fail2ban_daemon_ports.append(davs_show_port)
13301332

1331-
if duplicati_protocols:
1332-
prio_duplicati_protocols = duplicati_protocols.split()
1333+
# NOTE: prioritized order based on performance and robustness
1334+
best_storage_svc = []
1335+
if enable_sftp_subsys or enable_sftp:
1336+
best_storage_svc.append('sftp')
1337+
if enable_ftps:
1338+
best_storage_svc.append('ftps')
1339+
if enable_davs:
1340+
best_storage_svc.append('davs')
1341+
1342+
if storage_protocols != keyword_auto:
1343+
storage_protocols = [i for i in storage_protocols.split() if i in
1344+
best_storage_svc]
13331345
else:
1334-
# NOTE: prioritized order based on performance and robustness
1335-
prio_duplicati_protocols = []
1336-
if enable_sftp_subsys or enable_sftp:
1337-
prio_duplicati_protocols.append('sftp')
1338-
if enable_ftps:
1339-
prio_duplicati_protocols.append('ftps')
1340-
if enable_davs:
1341-
prio_duplicati_protocols.append('davs')
1346+
storage_protocols = best_storage_svc
1347+
user_dict['__STORAGE_PROTOCOLS__'] = ' '.join(storage_protocols)
1348+
1349+
if duplicati_protocols != keyword_auto:
1350+
prio_duplicati_protocols = [i for i in duplicati_protocols.split() if i
1351+
in best_storage_svc]
1352+
else:
1353+
prio_duplicati_protocols = best_storage_svc
13421354
user_dict['__DUPLICATI_PROTOCOLS__'] = ' '.join(prio_duplicati_protocols)
13431355

13441356
user_dict['__SEAFILE_TIMEZONE__'] = options['timezone']

tests/test_mig_shared_functionality_cat.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ def test_file_serving_over_limit(self):
151151
self.assertEqual(relevant_obj['text'],
152152
"Site configuration prevents web serving contents "
153153
"bigger than 3896 bytes - please use better "
154-
"alternatives (sftp) to retrieve large data.")
154+
"alternatives (SFTP) to retrieve large data")
155155

156156

157157
if __name__ == '__main__':

0 commit comments

Comments
 (0)