piwigo start at pwg.images.addChunk.
authorElrond <elrond+mediagoblin.org@samba-tng.org>
Thu, 21 Mar 2013 08:16:05 +0000 (09:16 +0100)
committerElrond <elrond+mediagoblin.org@samba-tng.org>
Thu, 21 Mar 2013 08:18:07 +0000 (09:18 +0100)
This function receives part of an upload. Does most
parameter validation, but does not safe the data anywhere
for now.

Also fake pwg.images.exist

mediagoblin/plugins/piwigo/views.py

index 6198ec6e498b8ff34fca9e70f19d143542348fe7..e9ce620698fa0ecdf6c0337e86d5ed5099030523 100644 (file)
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 import logging
+import re
 
-from werkzeug.exceptions import MethodNotAllowed
+from werkzeug.exceptions import MethodNotAllowed, BadRequest
 from werkzeug.wrappers import BaseResponse
 
+from mediagoblin import mg_globals
 from mediagoblin.meddleware.csrf import csrf_exempt
 from mediagoblin.tools.response import render_404
 from .tools import CmdTable, PwgNamedArray, response_xml
@@ -73,6 +75,46 @@ def pwg_categories_getList(request):
         }
 
 
+@CmdTable("pwg.images.exist")
+def pwg_images_exist(request):
+    return {}
+
+
+md5sum_matcher = re.compile(r"^[0-9a-fA-F]{32}$")
+
+def fetch_md5(request, parm_name, optional_parm=False):
+    val = request.form.get(parm_name)
+    if (val is None) and (not optional_parm):
+        _log.error("Parameter %s missing", parm_name)
+        raise BadRequest("Parameter %s missing" % parm_name)
+    if not md5sum_matcher.match(val):
+        _log.error("Parameter %s=%r has no valid md5 value", parm_name, val)
+        raise BadRequest("Parameter %s is not md5" % parm_name)
+    return val
+
+
+@CmdTable("pwg.images.addChunk", True)
+def pwg_images_addChunk(request):
+    o_sum = fetch_md5(request, 'original_sum')
+    typ = request.form.get('type')
+    pos = request.form.get('position')
+    data = request.form.get('data')
+
+    # Validate params:
+    pos = int(pos)
+    if not typ in ("file", "thumb"):
+        _log.error("type %r not allowed for now", typ)
+        return False
+
+    _log.info("addChunk for %r, type %r, position %d, len: %d",
+              o_sum, typ, pos, len(data))
+    if typ == "thumb":
+        _log.info("addChunk: Ignoring thumb, because we create our own")
+        return True
+
+    return True
+
+
 def possibly_add_cookie(request, response):
     # TODO: We should only add a *real* cookie, if
     # authenticated. And if there is no cookie already.