Преглед изворни кода

[raz][s3] Fix encoding for special chars in directory name listing 1000+ keys (#3677)

- If a directory has 1000+ keys, then when listing the objects using the GET request, it also required a marker header to fetch more keys.
- This marker headers needs to be unquoted when sent to RAZ but left unchanged when sent to S3 to have proper access on the path from RAZ side.
Harsh Gupta пре 1 година
родитељ
комит
5f67c2c519
1 измењених фајлова са 5 додато и 4 уклоњено
  1. 5 4
      desktop/core/src/desktop/lib/raz/raz_client.py

+ 5 - 4
desktop/core/src/desktop/lib/raz/raz_client.py

@@ -256,11 +256,12 @@ class RazClient(object):
 
     # In GET operations with non-ascii chars, only the non-ascii part is URL encoded.
     # We need to unquote the path fully before making a signed request for RAZ.
-    if method == 'GET' and 'prefix' in url_params and '%' in url_params['prefix']:
-      if sys.version_info[0] < 3 and isinstance(url_params['prefix'], unicode):
-        url_params['prefix'] = url_params['prefix'].encode()
+    if method == 'GET':
+      if url_params.get('prefix') and '%' in url_params['prefix']:
+        url_params['prefix'] = lib_urlunquote(url_params['prefix'])
 
-      url_params['prefix'] = lib_urlunquote(url_params['prefix'])
+      if url_params.get('marker') and '%' in url_params['marker']:
+        url_params['marker'] = lib_urlunquote(url_params['marker'])
 
     allparams = [raz_signer.StringListStringMapProto(key=key, value=[val]) for key, val in url_params.items()]
     allparams.extend([raz_signer.StringListStringMapProto(key=key, value=[val]) for key, val in params.items()])