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
This commit is contained in:
Zooko O'Whielacronx 2009-01-20 20:47:35 -07:00
parent 0dbc0f1194
commit 7d91dc5efe
6 changed files with 2 additions and 139 deletions

View File

@ -70,20 +70,6 @@ web.static = (string, optional)
With the default settings, http://127.0.0.1:3456/static/foo.html will serve With the default settings, http://127.0.0.1:3456/static/foo.html will serve
the contents of $BASEDIR/public_html/foo.html . 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) tub.port = (integer, optional)
This controls which port the node uses to accept Foolscap connections from This controls which port the node uses to accept Foolscap connections from

View File

@ -320,9 +320,6 @@ PUT /uri
mutable file, and return its write-cap in the HTTP respose. The default is 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. 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 === === Creating A New Directory ===
POST /uri?t=mkdir POST /uri?t=mkdir
@ -333,9 +330,6 @@ PUT /uri?t=mkdir
virtual drive. The "PUT" operation is provided for backwards compatibility: virtual drive. The "PUT" operation is provided for backwards compatibility:
new code should use POST. 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 POST /uri/$DIRCAP/[SUBDIRS../]SUBDIR?t=mkdir
PUT /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 "false"), then the HTTP response body will simply be the write-cap of the
new directory. 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 POST /uri/$DIRCAP/[SUBDIRS../]?t=mkdir&name=CHILDNAME
This creates a new directory as a child of the designated SUBDIR. This will 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, the upload results page. The default is to create an immutable file,
returning the upload results page as a response. 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 POST /uri/$DIRCAP/[SUBDIRS../]?t=upload

View File

@ -266,9 +266,7 @@ class Client(node.Node, pollmixin.PollMixin):
nodeurl_path = os.path.join(self.basedir, "node.url") nodeurl_path = os.path.join(self.basedir, "node.url")
staticdir = self.get_config("node", "web.static", "public_html") staticdir = self.get_config("node", "web.static", "public_html")
staticdir = os.path.expanduser(staticdir) staticdir = os.path.expanduser(staticdir)
# should we provide ambient upload authority? ws = WebishServer(webport, nodeurl_path, staticdir)
ambientUploadAuthority = self.get_config("node", "web.ambient_upload_authority", True, boolean=True)
ws = WebishServer(webport, nodeurl_path, staticdir, ambientUploadAuthority)
self.add_service(ws) self.add_service(ws)
def init_ftp_server(self): def init_ftp_server(self):

View File

@ -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()

View File

@ -22,9 +22,6 @@ class URIHandler(RenderMixin, rend.Page):
# I live at /uri . There are several operations defined on /uri itself, # I live at /uri . There are several operations defined on /uri itself,
# mostly involved with creation of unlinked files and directories. # mostly involved with creation of unlinked files and directories.
def setAmbientUploadAuthority(self, ambientUploadAuthority):
self.ambientUploadAuthority = ambientUploadAuthority
def render_GET(self, ctx): def render_GET(self, ctx):
req = IRequest(ctx) req = IRequest(ctx)
uri = get_arg(req, "uri", None) uri = get_arg(req, "uri", None)
@ -38,9 +35,6 @@ class URIHandler(RenderMixin, rend.Page):
return there return there
def render_PUT(self, ctx): def render_PUT(self, ctx):
if not self.ambientUploadAuthority:
raise WebError("/uri handling of PUT not enabled on this node")
req = IRequest(ctx) req = IRequest(ctx)
# either "PUT /uri" to create an unlinked file, or # either "PUT /uri" to create an unlinked file, or
# "PUT /uri?t=mkdir" to create an unlinked directory # "PUT /uri?t=mkdir" to create an unlinked directory
@ -58,9 +52,6 @@ class URIHandler(RenderMixin, rend.Page):
raise WebError(errmsg, http.BAD_REQUEST) raise WebError(errmsg, http.BAD_REQUEST)
def render_POST(self, ctx): 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 # "POST /uri?t=upload&file=newfile" to upload an
# unlinked file or "POST /uri?t=mkdir" to create a # unlinked file or "POST /uri?t=mkdir" to create a
# new directory # new directory
@ -130,9 +121,6 @@ class Root(rend.Page):
rend.Page.__init__(self, original) rend.Page.__init__(self, original)
self.child_operations = operations.OphandleTable() self.child_operations = operations.OphandleTable()
def setAmbientUploadAuthority(self, ambientUploadAuthority):
self.child_uri.setAmbientUploadAuthority(ambientUploadAuthority)
child_uri = URIHandler() child_uri = URIHandler()
child_cap = URIHandler() child_cap = URIHandler()
child_file = FileHandler() child_file = FileHandler()

View File

@ -122,13 +122,10 @@ class WebishServer(service.MultiService):
name = "webish" name = "webish"
root_class = root.Root root_class = root.Root
def __init__(self, webport, nodeurl_path=None, staticdir=None, def __init__(self, webport, nodeurl_path=None, staticdir=None):
ambientUploadAuthority=False):
service.MultiService.__init__(self) service.MultiService.__init__(self)
self.webport = webport self.webport = webport
self.root = self.root_class() self.root = self.root_class()
if self.root_class == root.Root:
self.root.setAmbientUploadAuthority(ambientUploadAuthority)
self.site = site = appserver.NevowSite(self.root) self.site = site = appserver.NevowSite(self.root)
self.site.requestFactory = MyRequest self.site.requestFactory = MyRequest
if self.root.child_operations: if self.root.child_operations: