piwigo start at pwg.images.addChunk.
[mediagoblin.git] / 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.