d.addCallback(_after_mkdir)
return d
+ def test_POST_mkdir_no_parentdir_noredirect2(self):
+ # make sure form-based arguments (as on the welcome page) still work
+ d = self.POST("/uri", t="mkdir")
+ def _after_mkdir(res):
+ uri.DirectoryURI.init_from_string(res)
+ d.addCallback(_after_mkdir)
+ d.addErrback(self.explain_web_error)
+ return d
+
def test_POST_mkdir_no_parentdir_redirect(self):
d = self.POST("/uri?t=mkdir&redirect_to_result=true")
d.addBoth(self.shouldRedirect, None, statuscode='303')
d.addCallback(_check_target)
return d
+ def test_POST_mkdir_no_parentdir_redirect2(self):
+ d = self.POST("/uri", t="mkdir", redirect_to_result="true")
+ d.addBoth(self.shouldRedirect, None, statuscode='303')
+ def _check_target(target):
+ target = urllib.unquote(target)
+ self.failUnless(target.startswith("uri/URI:DIR2:"), target)
+ d.addCallback(_check_target)
+ d.addErrback(self.explain_web_error)
+ return d
+
def _create_initial_children(self):
contents, n, filecap1 = self.makefile(12)
md1 = {"metakey1": "metavalue1"}
def POSTUnlinkedCreateDirectory(req, client):
# "POST /uri?t=mkdir", to create an unlinked directory.
- req.content.seek(0)
- kids_json = req.content.read()
- if kids_json:
- raise WebError("t=mkdir does not accept children=, "
- "try t=mkdir-with-children instead",
- http.BAD_REQUEST)
+ ct = req.getHeader("content-type") or ""
+ if not ct.startswith("multipart/form-data"):
+ # guard against accidental attempts to call t=mkdir as if it were
+ # t=mkdir-with-children, but make sure we tolerate the usual HTML
+ # create-directory form (in which the t=mkdir and redirect_to_result=
+ # and other arguments can be passed encoded as multipath/form-data,
+ # in the request body).
+ req.content.seek(0)
+ kids_json = req.content.read()
+ if kids_json:
+ raise WebError("t=mkdir does not accept children=, "
+ "try t=mkdir-with-children instead",
+ http.BAD_REQUEST)
d = client.create_dirnode()
redirect = get_arg(req, "redirect_to_result", "false")
if boolean_of_arg(redirect):