From 7d91dc5efe0b37e939c6c9c5dbd39300ca17162c Mon Sep 17 00:00:00 2001 From: Zooko O'Whielacronx Date: Tue, 20 Jan 2009 20:47:35 -0700 Subject: [PATCH] rollback the feature of making "ambient upload authority" configurable This reverses some, but not all, of the changes that were committed in the following set of patches. rolling back: Sun Jan 18 09:54:30 MST 2009 toby.murray * add 'web.ambient_upload_authority' as a paramater to tahoe.cfg M ./src/allmydata/client.py -1 +3 M ./src/allmydata/test/common.py -7 +9 A ./src/allmydata/test/test_ambient_upload_authority.py M ./src/allmydata/web/root.py +12 M ./src/allmydata/webish.py -1 +4 Sun Jan 18 09:56:08 MST 2009 zooko@zooko.com * trivial: whitespace I ran emacs's "M-x whitespace-cleanup" on the files that Toby's recent patch had touched that had trailing whitespace on some lines. M ./src/allmydata/test/test_ambient_upload_authority.py -9 +8 M ./src/allmydata/web/root.py -2 +1 M ./src/allmydata/webish.py -2 +1 Mon Jan 19 14:16:19 MST 2009 zooko@zooko.com * trivial: remove unused import noticed by pyflakes M ./src/allmydata/test/test_ambient_upload_authority.py -1 Mon Jan 19 21:38:35 MST 2009 toby.murray * doc: describe web.ambient_upload_authority M ./docs/configuration.txt +14 M ./docs/frontends/webapi.txt +11 Mon Jan 19 21:38:57 MST 2009 zooko@zooko.com * doc: add Toby Murray to the CREDITS M ./CREDITS +4 --- docs/configuration.txt | 14 --- docs/frontends/webapi.txt | 11 --- src/allmydata/client.py | 4 +- .../test/test_ambient_upload_authority.py | 95 ------------------- src/allmydata/web/root.py | 12 --- src/allmydata/webish.py | 5 +- 6 files changed, 2 insertions(+), 139 deletions(-) delete mode 100644 src/allmydata/test/test_ambient_upload_authority.py diff --git a/docs/configuration.txt b/docs/configuration.txt index 8642ffa1..6df08624 100644 --- a/docs/configuration.txt +++ b/docs/configuration.txt @@ -70,20 +70,6 @@ web.static = (string, optional) With the default settings, http://127.0.0.1:3456/static/foo.html will serve the contents of $BASEDIR/public_html/foo.html . -web.ambient_upload_authority = (boolean, optional) - - This controls whether a node's web server should provide "ambient" - upload/create authority by controlling whether it responds to PUT and - POST requests that do not contain a cap -- i.e. those for uploading - new unlinked files and creating new unlinked directories. If set to - True, a node will respond to these requests as usual. If set to - False, a node will instead refuse these requests, returning an HTTP - status of 'Bad Request'. The default value is True. - - Note that setting this to False does not prevent performing operations - on files and directories that already exist, since all of these operations - require the presentation of a cap. - tub.port = (integer, optional) This controls which port the node uses to accept Foolscap connections from diff --git a/docs/frontends/webapi.txt b/docs/frontends/webapi.txt index 5f7dc384..8cc9288f 100644 --- a/docs/frontends/webapi.txt +++ b/docs/frontends/webapi.txt @@ -320,9 +320,6 @@ PUT /uri mutable file, and return its write-cap in the HTTP respose. The default is to create an immutable file, returning the read-cap as a response. - Note that this operation is available only when the configuration setting - 'web.ambient_upload_authority' is not False (see configuration.txt). - === Creating A New Directory === POST /uri?t=mkdir @@ -333,9 +330,6 @@ PUT /uri?t=mkdir virtual drive. The "PUT" operation is provided for backwards compatibility: new code should use POST. - Note that these operations are available only when the configuration setting - 'web.ambient_upload_authority' is not False (see configuration.txt). - POST /uri/$DIRCAP/[SUBDIRS../]SUBDIR?t=mkdir PUT /uri/$DIRCAP/[SUBDIRS../]SUBDIR?t=mkdir @@ -578,9 +572,6 @@ POST /uri?t=mkdir "false"), then the HTTP response body will simply be the write-cap of the new directory. - Note that this operation is available only when the configuration setting - 'web.ambient_upload_authority' is not False (see configuration.txt). - POST /uri/$DIRCAP/[SUBDIRS../]?t=mkdir&name=CHILDNAME This creates a new directory as a child of the designated SUBDIR. This will @@ -625,8 +616,6 @@ POST /uri?t=upload the upload results page. The default is to create an immutable file, returning the upload results page as a response. - Note that this operation is available only when the configuration setting - 'web.ambient_upload_authority' is not False (see configuration.txt). POST /uri/$DIRCAP/[SUBDIRS../]?t=upload diff --git a/src/allmydata/client.py b/src/allmydata/client.py index f0208bd4..10369bdf 100644 --- a/src/allmydata/client.py +++ b/src/allmydata/client.py @@ -266,9 +266,7 @@ class Client(node.Node, pollmixin.PollMixin): nodeurl_path = os.path.join(self.basedir, "node.url") staticdir = self.get_config("node", "web.static", "public_html") staticdir = os.path.expanduser(staticdir) - # should we provide ambient upload authority? - ambientUploadAuthority = self.get_config("node", "web.ambient_upload_authority", True, boolean=True) - ws = WebishServer(webport, nodeurl_path, staticdir, ambientUploadAuthority) + ws = WebishServer(webport, nodeurl_path, staticdir) self.add_service(ws) def init_ftp_server(self): diff --git a/src/allmydata/test/test_ambient_upload_authority.py b/src/allmydata/test/test_ambient_upload_authority.py deleted file mode 100644 index 19dbb9bf..00000000 --- a/src/allmydata/test/test_ambient_upload_authority.py +++ /dev/null @@ -1,95 +0,0 @@ -import os - -from twisted.trial import unittest -from twisted.internet import defer, reactor -from twisted.web import client, http - -from allmydata.test.common import SystemTestMixin - - -class TestCase(SystemTestMixin, unittest.TestCase): - - def setAmbientUploadAuthority(self,ambientUploadAuthority): - self.ambientUploadAuthority = ambientUploadAuthority - - def _test_ambient_upload_authority(self): - self.webip = "127.0.0.1" - self.webport = 3456 - self.basedir = self.mktemp() - - # set up an introducer and a node - d = self.set_up_nodes(1) - d.addCallback(self._test_ambient_upload_authority2) - d.addErrback(self.fail) - return d - - def _set_up_nodes_extra_config(self): - # we need to remove the 'webport' old-style config file - # or else the node won't start - os.remove(os.path.join(self.getdir("client0"), "webport")) - f = open(os.path.join(self.getdir("client0"), "tahoe.cfg"), "wt") - f.write("\n") - f.write("[node]\n") - f.write("web.ambient_upload_authority = %s\n" % ("false","true")[self.ambientUploadAuthority]) - f.write("web.port = tcp:%d:interface=%s\n" % (self.webport, self.webip)) - f.write("\n") - f.write("[client]\n") - f.write("introducer.furl = %s\n" % self.introducer_furl) - f.write("\n") - f.write("[storage]\n") - f.write("enabled = true\n") - f.write("\n") - f.close() - - - def _test_ambient_upload_authority2(self, ignored=None): - content_type = 'multipart/form-data; boundary=----------ThIs_Is_tHe_bouNdaRY_$' - body = '------------ThIs_Is_tHe_bouNdaRY_$\r\nContent-Disposition: form-data; name="t"\r\n\r\nupload\r\n------------ThIs_Is_tHe_bouNdaRY_$\r\nContent-Disposition: form-data; name="file"; filename="file1.txt"\r\nContent-Type: application/octet-stream\r\n\r\nsome test text\r\n------------ThIs_Is_tHe_bouNdaRY_$--\r\n' - headers = {'Content-Type': content_type, - 'Content-Length': len(body)} - - deferreds = [] - expected = (http.BAD_REQUEST, http.OK)[self.ambientUploadAuthority] - - # try to upload using the local web client - def tryRequest(pathetc, method, postdata=None, headers=None): - url = "http://%s:%d/%s" % (self.webip, self.webport, pathetc) - f = client.HTTPClientFactory(url,method, postdata, headers) - f.deferred.addCallback(self._cbCheckResponse,[f,expected]) - f.deferred.addErrback(self._cbCheckResponse,[f,expected]) - deferreds.append(f.deferred) - reactor.connectTCP(self.webip, self.webport, f) - - tryRequest("uri","PUT","non contents\r\n") - tryRequest("uri?t=mkdir","PUT") - tryRequest("uri?t=mkdir","POST") - tryRequest("uri?t=upload","POST",body,headers) - - # give us one deferred that will fire iff all of the above succeed - dlist = defer.DeferredList(deferreds,fireOnOneCallback=False, - fireOnOneErrback=True) - dlist.addErrback(self.fail) - - return dlist - - def _cbCheckResponse(self, ignored, cmp): - r = cmp[0] - expected = cmp[1] - self.failUnless(int(r.status) == expected) - - -class TestAmbientUploadAuthorityEnabled(TestCase): - def setUp(self): - TestCase.setUp(self) - self.setAmbientUploadAuthority(True) - - def test_ambient_upload_authority_enabled(self): - return self._test_ambient_upload_authority() - -class TestAmbientUploadAuthorityDisabled(TestCase): - def setUp(self): - TestCase.setUp(self) - self.setAmbientUploadAuthority(False) - - def test_ambient_upload_authority_disabled(self): - return self._test_ambient_upload_authority() diff --git a/src/allmydata/web/root.py b/src/allmydata/web/root.py index 15533b8e..81f6b367 100644 --- a/src/allmydata/web/root.py +++ b/src/allmydata/web/root.py @@ -22,9 +22,6 @@ class URIHandler(RenderMixin, rend.Page): # I live at /uri . There are several operations defined on /uri itself, # mostly involved with creation of unlinked files and directories. - def setAmbientUploadAuthority(self, ambientUploadAuthority): - self.ambientUploadAuthority = ambientUploadAuthority - def render_GET(self, ctx): req = IRequest(ctx) uri = get_arg(req, "uri", None) @@ -38,9 +35,6 @@ class URIHandler(RenderMixin, rend.Page): return there def render_PUT(self, ctx): - if not self.ambientUploadAuthority: - raise WebError("/uri handling of PUT not enabled on this node") - req = IRequest(ctx) # either "PUT /uri" to create an unlinked file, or # "PUT /uri?t=mkdir" to create an unlinked directory @@ -58,9 +52,6 @@ class URIHandler(RenderMixin, rend.Page): raise WebError(errmsg, http.BAD_REQUEST) def render_POST(self, ctx): - if not self.ambientUploadAuthority: - raise WebError("/uri handling of POST not enabled on this node") - # "POST /uri?t=upload&file=newfile" to upload an # unlinked file or "POST /uri?t=mkdir" to create a # new directory @@ -130,9 +121,6 @@ class Root(rend.Page): rend.Page.__init__(self, original) self.child_operations = operations.OphandleTable() - def setAmbientUploadAuthority(self, ambientUploadAuthority): - self.child_uri.setAmbientUploadAuthority(ambientUploadAuthority) - child_uri = URIHandler() child_cap = URIHandler() child_file = FileHandler() diff --git a/src/allmydata/webish.py b/src/allmydata/webish.py index 2675aa04..e3f56070 100644 --- a/src/allmydata/webish.py +++ b/src/allmydata/webish.py @@ -122,13 +122,10 @@ class WebishServer(service.MultiService): name = "webish" root_class = root.Root - def __init__(self, webport, nodeurl_path=None, staticdir=None, - ambientUploadAuthority=False): + def __init__(self, webport, nodeurl_path=None, staticdir=None): service.MultiService.__init__(self) self.webport = webport self.root = self.root_class() - if self.root_class == root.Root: - self.root.setAmbientUploadAuthority(ambientUploadAuthority) self.site = site = appserver.NevowSite(self.root) self.site.requestFactory = MyRequest if self.root.child_operations: -- 2.37.2