)]}'
{"specs/in_progress/container_tempurl.rst":[{"author":{"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},"change_message_id":"fe5ea2ba3a84aaa06af60abd3fad4dde0cb772ab","unresolved":false,"context_lines":[{"line_number":37,"context_line":"If the client desires to use a container/prefix based signature, he can append an URL parameter \"temp_url_prefix\""},{"line_number":38,"context_line":"with the desired prefix (an empty prefix would specify the whole container),"},{"line_number":39,"context_line":"and the middleware would only use the container-path + prefix for calculating the signature."},{"line_number":40,"context_line":"Furthermore, the middleware would check if the object path really contains this prefix."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"Beyond that, the middleware should be changed to allow operations on the container itself."},{"line_number":43,"context_line":"It appears that only some lines have to be changed."}],"source_content_type":"text/x-rst","patch_set":5,"id":"1a4dcd0f_fae76044","line":40,"updated":"2015-08-07 21:30:11.000000000","message":"I\u0027d love some example requests, just to make it clear","commit_id":"60df1d47da5ead4e5faabc4bef23e7d5992090fd"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"b7b5ca9fa7bc24b822b3312dfe88b15ce9768afc","unresolved":false,"context_lines":[{"line_number":40,"context_line":"Furthermore, the middleware would check if the object path really contains this prefix."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"Beyond that, the middleware should be changed to allow operations on the container itself."},{"line_number":43,"context_line":"It appears that only some lines have to be changed."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Alternatives"},{"line_number":46,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"1a4dcd0f_df027f0b","line":43,"updated":"2015-08-09 13:02:21.000000000","message":"John makes a good point here. Also what kind of operations on a container? Its it\u0027s changing meta-data, whats stopping them from changing the container level keys?","commit_id":"60df1d47da5ead4e5faabc4bef23e7d5992090fd"},{"author":{"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},"change_message_id":"fe5ea2ba3a84aaa06af60abd3fad4dde0cb772ab","unresolved":false,"context_lines":[{"line_number":40,"context_line":"Furthermore, the middleware would check if the object path really contains this prefix."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"Beyond that, the middleware should be changed to allow operations on the container itself."},{"line_number":43,"context_line":"It appears that only some lines have to be changed."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Alternatives"},{"line_number":46,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"1a4dcd0f_da5b84f5","line":43,"updated":"2015-08-07 21:30:11.000000000","message":"maybe. I\u0027d prefer to limit this to just the object operations, to keep scope smaller","commit_id":"60df1d47da5ead4e5faabc4bef23e7d5992090fd"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"baa9c8d25f746eb7fc9a85225dd660c5b22a4a54","unresolved":false,"context_lines":[{"line_number":21,"context_line":"At the moment, if one wants to share a large amount of objects inside a container"},{"line_number":22,"context_line":"with external people, one has to create temporary urls for each object."},{"line_number":23,"context_line":"In the case of PUT, often, the name of the data which has to be put is not known in advance,"},{"line_number":24,"context_line":"but the temporary urls must already contain the name. It would be better to have"},{"line_number":25,"context_line":"one signature which allow access for all objects inside the whole container."},{"line_number":26,"context_line":"This signature could also be based on the container plus a prefix, to support the sharing of a pseudofolder"},{"line_number":27,"context_line":"(all objects with a specific prefix inside the container)."}],"source_content_type":"text/x-rst","patch_set":6,"id":"7a5de9d1_a4e2fad3","line":24,"updated":"2016-01-27 21:34:50.000000000","message":"FormPost middleware allows you to create a pre-authed request for the user to upload too - pretty sure the filename is up to the user/form.\n\nhttp://docs.openstack.org/developer/swift/api/form_post_middleware.html#form-post-middleware","commit_id":"40c462e18b70d552038c9e30c0150da8829f8ea4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"baa9c8d25f746eb7fc9a85225dd660c5b22a4a54","unresolved":false,"context_lines":[{"line_number":27,"context_line":"(all objects with a specific prefix inside the container)."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Beyond that, the temporary urls should also allow access to the container itself and not only objects"},{"line_number":30,"context_line":"within a container. It could be useful for example to list the objects of a container."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"Proposed Change"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7a5de9d1_6403a274","line":30,"updated":"2016-01-27 21:34:50.000000000","message":"I think maybe temporary listings should be a separate thing.  don\u0027t care which is first.","commit_id":"40c462e18b70d552038c9e30c0150da8829f8ea4"},{"author":{"_account_id":860,"name":"Donagh McCabe","email":"donagh.mccabe@gmail.com","username":"donagh-mccabe"},"change_message_id":"277fbd5e961e909815f530b162c4dac14f0f4732","unresolved":false,"context_lines":[{"line_number":36,"context_line":"The temporary url middleware should be changed. The code change should not be too big."},{"line_number":37,"context_line":"If the client desires to use a container/prefix based signature, he can append an URL parameter \"temp_url_prefix\""},{"line_number":38,"context_line":"with the desired prefix (an empty prefix would specify the whole container),"},{"line_number":39,"context_line":"and the middleware would only use the container-path + prefix for calculating the signature."},{"line_number":40,"context_line":"Furthermore, the middleware would check if the object path really contains this prefix."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"Lets have two examples. In the first example, we want to allow a user to upload a bunch of objects in a container c."},{"line_number":43,"context_line":"He first creates a tempurl, for example using the swift command line tool (modified version which supports tempurls on container-level scope):"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7a5de9d1_f8a7244d","line":40,"range":{"start_line":39,"start_character":8,"end_line":40,"end_character":86},"updated":"2016-01-28 10:23:18.000000000","message":"I would need to review the current code to see how it works. However, I seem to remember that the reason tempurl is secure is that since it only touches one object, once the signature is validated, the request goes to *only* that object. Now that multiple objects are being touched, you need to review other pieces of middleware that can issue subrequests to check that they remain secure if you change tempurl as proposed here. Staticweb springs to mind -- a GET on /a/c/s1/ could either be a GET to /a/c/s1/index.html (object download) or a GET /a/c?prefix\u003ds1/ (container listing).\n\nI\u0027m not saying this is *not* secure [as mentioned above, I have not re-reviewed the existing code]. However, I see no references here that you\u0027ve reviewed the design and assumptions of other middleware to check there this does not introduce holes. Unfortunately, the number of such pieces of middleware is large (slo, dlo, copy, encryption, etc.).","commit_id":"40c462e18b70d552038c9e30c0150da8829f8ea4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"baa9c8d25f746eb7fc9a85225dd660c5b22a4a54","unresolved":false,"context_lines":[{"line_number":116,"context_line":"Security"},{"line_number":117,"context_line":"--------"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"None"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"Testing"},{"line_number":122,"context_line":"-------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7a5de9d1_04966e4c","line":119,"updated":"2016-01-27 21:34:50.000000000","message":"lol","commit_id":"40c462e18b70d552038c9e30c0150da8829f8ea4"}],"specs/in_progress/prefix_based_tempurl.rst":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a09bbb0d86afe2cc935236f7eb734cea20b777d6","unresolved":false,"context_lines":[{"line_number":7,"context_line":".."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":"tempurls with a prefix-based scope"},{"line_number":11,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"The tempurl middleware should be allowed to use a prefix-based signature, which grants access for"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7a5de9d1_ab38183e","line":10,"updated":"2016-01-29 20:05:02.000000000","message":"title case would looks words better here","commit_id":"2d41f397df695587652143b824ae0bbd0a66fb6a"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a09bbb0d86afe2cc935236f7eb734cea20b777d6","unresolved":false,"context_lines":[{"line_number":19,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"At the moment, if one wants to share a large amount of objects inside a container/pseudofolder"},{"line_number":22,"context_line":"with external people, one has to create temporary urls for each object. Additionally, objects which"},{"line_number":23,"context_line":"are placed inside the container/pseudofolder after the generation of the signature cannot"},{"line_number":24,"context_line":"be accessed with the same signature."},{"line_number":25,"context_line":"Prefix-based signatures would  allow to reuse the same signature for a large amount of objects"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7a5de9d1_0b760c06","line":22,"updated":"2016-01-29 20:05:02.000000000","message":"Is generating a large number of signatures *hard*?  Or is the real problem discovery?","commit_id":"2d41f397df695587652143b824ae0bbd0a66fb6a"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a09bbb0d86afe2cc935236f7eb734cea20b777d6","unresolved":false,"context_lines":[{"line_number":21,"context_line":"At the moment, if one wants to share a large amount of objects inside a container/pseudofolder"},{"line_number":22,"context_line":"with external people, one has to create temporary urls for each object. Additionally, objects which"},{"line_number":23,"context_line":"are placed inside the container/pseudofolder after the generation of the signature cannot"},{"line_number":24,"context_line":"be accessed with the same signature."},{"line_number":25,"context_line":"Prefix-based signatures would  allow to reuse the same signature for a large amount of objects"},{"line_number":26,"context_line":"which share the same prefix. "},{"line_number":27,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"7a5de9d1_0b1fecb7","line":24,"updated":"2016-01-29 20:05:02.000000000","message":"are suggesting this would change (including the method in the signature)?","commit_id":"2d41f397df695587652143b824ae0bbd0a66fb6a"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a09bbb0d86afe2cc935236f7eb734cea20b777d6","unresolved":false,"context_lines":[{"line_number":23,"context_line":"are placed inside the container/pseudofolder after the generation of the signature cannot"},{"line_number":24,"context_line":"be accessed with the same signature."},{"line_number":25,"context_line":"Prefix-based signatures would  allow to reuse the same signature for a large amount of objects"},{"line_number":26,"context_line":"which share the same prefix. "},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Use cases:"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"7a5de9d1_2bf8a848","line":26,"updated":"2016-01-29 20:05:02.000000000","message":"Honestly my first thought is that it sounds like a mis-feature!  lol.  Explicit is better than implicit and all that.  I\u0027m not sure if the ability to accidentally share something because your don\u0027t have a way to know what access will be granted at the time the signature is used is part of the \"problem\" - but maybe this concern would fit under \"security\"","commit_id":"2d41f397df695587652143b824ae0bbd0a66fb6a"},{"author":{"_account_id":17245,"name":"Christopher Bartz","email":"bartz@dkrz.de","username":"cbartz"},"change_message_id":"3f58c44c01161b8b8c323c6183c8e01ed93d6913","unresolved":false,"context_lines":[{"line_number":23,"context_line":"are placed inside the container/pseudofolder after the generation of the signature cannot"},{"line_number":24,"context_line":"be accessed with the same signature."},{"line_number":25,"context_line":"Prefix-based signatures would  allow to reuse the same signature for a large amount of objects"},{"line_number":26,"context_line":"which share the same prefix. "},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Use cases:"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"7a5de9d1_24c8aea5","line":26,"in_reply_to":"7a5de9d1_2bf8a848","updated":"2016-02-01 10:50:37.000000000","message":"If the user wants to use the explicit way, he can just skip the parameter temp_url_prefix. Users who use this parameter should be aware of the threat to accidentally share something they do not want.","commit_id":"2d41f397df695587652143b824ae0bbd0a66fb6a"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a09bbb0d86afe2cc935236f7eb734cea20b777d6","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"1. We have one pseudofolder with 1000000 objects. We want to share this pseudofolder with external"},{"line_number":31,"context_line":"   partners. Instead of generating 1000000 different signatures, we only need to generate one"},{"line_number":32,"context_line":"   signature."},{"line_number":33,"context_line":"2. We have an webbased-application on top of swift like the swiftbrowser"},{"line_number":34,"context_line":"   (https://github.com/cschwede/django-swiftbrowser), which acts as a filebrowser. We want to"},{"line_number":35,"context_line":"   support the sharing of temporary pseudofolders with external people. We do not know in advance"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7a5de9d1_eed7fe48","line":32,"updated":"2016-01-29 20:05:02.000000000","message":"On my laptop this took 12 seconds [1].  I think this is non-trivial.  If we have a usecase which requires creating 1M signatures up-front the non-trivial time it takes to do so should be considered.  But IME it\u0027s rare that so many need to be consumed at once (a computer could do it - but sharing 1M links via email isn\u0027t practical).  Most swift browsers I\u0027ve seen generate the tempurls per page of container listing response (typically 10K, although many choose to expose far less or use prefix listings) which is perhaps still not trivial, but nominal (~150ms [1])\n\n1. https://gist.github.com/clayg/b2db2556bc8c1c717e79","commit_id":"2d41f397df695587652143b824ae0bbd0a66fb6a"},{"author":{"_account_id":9216,"name":"Joel Wright","email":"joel.wright@gmail.com","username":"jjw-sohonet"},"change_message_id":"1895867d9e26b2dc5dd6463a18f55091fa0f3133","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"1. We have one pseudofolder with 1000000 objects. We want to share this pseudofolder with external"},{"line_number":31,"context_line":"   partners. Instead of generating 1000000 different signatures, we only need to generate one"},{"line_number":32,"context_line":"   signature."},{"line_number":33,"context_line":"2. We have an webbased-application on top of swift like the swiftbrowser"},{"line_number":34,"context_line":"   (https://github.com/cschwede/django-swiftbrowser), which acts as a filebrowser. We want to"},{"line_number":35,"context_line":"   support the sharing of temporary pseudofolders with external people. We do not know in advance"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7a5de9d1_8525d95c","line":32,"in_reply_to":"7a5de9d1_eed7fe48","updated":"2016-02-01 10:52:24.000000000","message":"@Clay We have a use case which involves regularly generating 100,000+ tempURLs for uploading objects via a web browser into a defined container and prefix. Not only is this non-trivial in terms of time, but it also requires many requests to a server who\u0027s only responsibility is generating the tempURLs. With a prefixed tempURL the browser would need only to talk to the proxies.","commit_id":"2d41f397df695587652143b824ae0bbd0a66fb6a"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a09bbb0d86afe2cc935236f7eb734cea20b777d6","unresolved":false,"context_lines":[{"line_number":33,"context_line":"2. We have an webbased-application on top of swift like the swiftbrowser"},{"line_number":34,"context_line":"   (https://github.com/cschwede/django-swiftbrowser), which acts as a filebrowser. We want to"},{"line_number":35,"context_line":"   support the sharing of temporary pseudofolders with external people. We do not know in advance"},{"line_number":36,"context_line":"   which and how many objects will live inside the pseudofolder."},{"line_number":37,"context_line":"   With prefix-based signatures, we could develop the webapplication in a way so that the user"},{"line_number":38,"context_line":"   could generate a temporary url for one pseudofolder, which could be used by external people"},{"line_number":39,"context_line":"   for accessing all objects which will live inside it"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7a5de9d1_0eacda8a","line":36,"updated":"2016-01-29 20:05:02.000000000","message":"The discovery issue does seem like a core part of the problem.","commit_id":"2d41f397df695587652143b824ae0bbd0a66fb6a"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a09bbb0d86afe2cc935236f7eb734cea20b777d6","unresolved":false,"context_lines":[{"line_number":39,"context_line":"   for accessing all objects which will live inside it"},{"line_number":40,"context_line":"   (this use-case additionaly needs a temporary container listing, to display which objects live"},{"line_number":41,"context_line":"   inside the pseudofolder and a modification of the formpost middleware, please see spec"},{"line_number":42,"context_line":"   https://review.openstack.org/#/c/225059/)."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Proposed Change"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7a5de9d1_0ee4daa9","line":42,"updated":"2016-01-29 20:05:02.000000000","message":"This sounds very similar to how we currently share containers via ACL.  You need to list the objects in the container and also be able to GET them.  I\u0027m not sure how critical the \"temporary\" access is to your use case?  If you\u0027re sharing millions of objects it might take awhile for the end consumer to download all of them - or perhaps they just need to browse to find a specific one?  How long would you expect the expires to be - months, days, minutes?\n\nTo be 100% clear the link you \"share\" would be the browser endpoint - but it would be using the underlying swift store for authorization, correct?","commit_id":"2d41f397df695587652143b824ae0bbd0a66fb6a"},{"author":{"_account_id":9216,"name":"Joel Wright","email":"joel.wright@gmail.com","username":"jjw-sohonet"},"change_message_id":"1895867d9e26b2dc5dd6463a18f55091fa0f3133","unresolved":false,"context_lines":[{"line_number":39,"context_line":"   for accessing all objects which will live inside it"},{"line_number":40,"context_line":"   (this use-case additionaly needs a temporary container listing, to display which objects live"},{"line_number":41,"context_line":"   inside the pseudofolder and a modification of the formpost middleware, please see spec"},{"line_number":42,"context_line":"   https://review.openstack.org/#/c/225059/)."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Proposed Change"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7a5de9d1_c5b991cd","line":42,"in_reply_to":"7a5de9d1_0ee4daa9","updated":"2016-02-01 10:52:24.000000000","message":"@Clay for my use case the \u0027temporary\u0027 access is vital - access to the prefix is defined as up to 7 days.","commit_id":"2d41f397df695587652143b824ae0bbd0a66fb6a"},{"author":{"_account_id":17245,"name":"Christopher Bartz","email":"bartz@dkrz.de","username":"cbartz"},"change_message_id":"3f58c44c01161b8b8c323c6183c8e01ed93d6913","unresolved":false,"context_lines":[{"line_number":39,"context_line":"   for accessing all objects which will live inside it"},{"line_number":40,"context_line":"   (this use-case additionaly needs a temporary container listing, to display which objects live"},{"line_number":41,"context_line":"   inside the pseudofolder and a modification of the formpost middleware, please see spec"},{"line_number":42,"context_line":"   https://review.openstack.org/#/c/225059/)."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Proposed Change"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7a5de9d1_a4e01ece","line":42,"in_reply_to":"7a5de9d1_0ee4daa9","updated":"2016-02-01 10:50:37.000000000","message":"The shared link would be the browser endpoint. The link would contain the respective tempurl signature(s) and expire date. The webapplication could then use these parameters to authenticate against the swift store.\n\nThe use-case would contain browsing and finding the specific file, and the expiry date could be everything, from days, months to years.","commit_id":"2d41f397df695587652143b824ae0bbd0a66fb6a"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a09bbb0d86afe2cc935236f7eb734cea20b777d6","unresolved":false,"context_lines":[{"line_number":45,"context_line":"Proposed Change"},{"line_number":46,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"The temporary url middleware should be changed. The code change should not be too big."},{"line_number":49,"context_line":"If the client desires to use a prefix-based signature, he can append an URL parameter"},{"line_number":50,"context_line":"\"temp_url_prefix\"  with the desired prefix (an empty prefix would specify the whole container),"},{"line_number":51,"context_line":"and the middleware would only use the container path + prefix for calculating the signature."}],"source_content_type":"text/x-rst","patch_set":7,"id":"7a5de9d1_4e05f243","line":48,"updated":"2016-01-29 20:05:02.000000000","message":"IMHO, the size of the code change is irrelevant to this document.","commit_id":"2d41f397df695587652143b824ae0bbd0a66fb6a"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a09bbb0d86afe2cc935236f7eb734cea20b777d6","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":" $swift tempurl --container-level PUT 86400 /v1/AUTH_account/c/ KEY"},{"line_number":61,"context_line":" /v1/AUTH_account/c/?temp_url_sig\u003d9dd9e9c318a29c6212b01343a2d9f9a4c9deef2d\u0026temp_url_expires\u003d1439280760\u0026temp_url_prefix\u003d"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"The user then uploads a bunch of files using each time the same container-level signature:"},{"line_number":64,"context_line":"::"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"7a5de9d1_4e28929a","line":62,"updated":"2016-01-29 20:05:02.000000000","message":"is the temp_url_prefix automatically prepended because the user did not specify an object path?  On the swift-temp-url tool that currently emits a warning (which is probably better that what `swift tempurl` does):\n\nvagrant@saio:~$ swift-temp-url PUT 86400 /v1/a/c/ asdf\nWARNING: \"/v1/a/c/\" does not refer to an object (e.g. /v1/account/container/object).\nWARNING: Non-object paths will be rejected by tempurl.\n/v1/a/c/?temp_url_sig\u003db68b47e7a89166de6d5ce55873483794526ac1eb\u0026temp_url_expires\u003d1454183359","commit_id":"2d41f397df695587652143b824ae0bbd0a66fb6a"},{"author":{"_account_id":17245,"name":"Christopher Bartz","email":"bartz@dkrz.de","username":"cbartz"},"change_message_id":"3f58c44c01161b8b8c323c6183c8e01ed93d6913","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":" $swift tempurl --container-level PUT 86400 /v1/AUTH_account/c/ KEY"},{"line_number":61,"context_line":" /v1/AUTH_account/c/?temp_url_sig\u003d9dd9e9c318a29c6212b01343a2d9f9a4c9deef2d\u0026temp_url_expires\u003d1439280760\u0026temp_url_prefix\u003d"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"The user then uploads a bunch of files using each time the same container-level signature:"},{"line_number":64,"context_line":"::"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"7a5de9d1_c4319a5b","line":62,"in_reply_to":"7a5de9d1_4e28929a","updated":"2016-02-01 10:50:37.000000000","message":"Yes, temp_url_prefix is appended because the user did not specify an object path.","commit_id":"2d41f397df695587652143b824ae0bbd0a66fb6a"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a09bbb0d86afe2cc935236f7eb734cea20b777d6","unresolved":false,"context_lines":[{"line_number":66,"context_line":" $curl -XPUT --data-binary @file1 https://example.host/v1/AUTH_account/c/o1?temp_url_sig\u003d9dd9e9c318a29c6212b01343a2d9f9a4c9deef2d\u0026temp_url_expires\u003d1439280760\u0026temp_url_prefix\u003d"},{"line_number":67,"context_line":" $curl -XPUT --data-binary @file2 https://example.host/v1/AUTH_account/c/o2?temp_url_sig\u003d9dd9e9c318a29c6212b01343a2d9f9a4c9deef2d\u0026temp_url_expires\u003d1439280760\u0026temp_url_prefix\u003d"},{"line_number":68,"context_line":" $curl -XPUT --data-binary @file3 https://example.host/v1/AUTH_account/c/p/o3?temp_url_sig\u003d9dd9e9c318a29c6212b01343a2d9f9a4c9deef2d\u0026temp_url_expires\u003d1439280760\u0026temp_url_prefix\u003d"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"In the next example, we want to allow an external user to download a whole pseudofolder p:"},{"line_number":71,"context_line":"::"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"7a5de9d1_6e0c6e41","line":69,"updated":"2016-01-29 20:05:02.000000000","message":"So the user (or application) extracts the temp_url_sig, temp_url_expires, and temp_url_prefix query params and builds new urls","commit_id":"2d41f397df695587652143b824ae0bbd0a66fb6a"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a09bbb0d86afe2cc935236f7eb734cea20b777d6","unresolved":false,"context_lines":[{"line_number":77,"context_line":" $curl https://example.host/v1/AUTH_account/c/p/o1?temp_url_sig\u003d4e755839d19762e06c12d807eccf46ff3224cb3f\u0026temp_url_expires\u003d1439281346\u0026temp_url_prefix\u003dp"},{"line_number":78,"context_line":" $curl https://example.host/v1/AUTH_account/c/p/o2?temp_url_sig\u003d4e755839d19762e06c12d807eccf46ff3224cb3f\u0026temp_url_expires\u003d1439281346\u0026temp_url_prefix\u003dp"},{"line_number":79,"context_line":" $curl https://example.host/v1/AUTH_account/c/p/p2/o3?temp_url_sig\u003d4e755839d19762e06c12d807eccf46ff3224cb3f\u0026temp_url_expires\u003d1439281346\u0026temp_url_prefix\u003dp"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"Following requests would be denied, because of missing/wrong prefix:"},{"line_number":82,"context_line":"::"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"7a5de9d1_81565bcc","line":80,"updated":"2016-01-29 20:05:02.000000000","message":"How did the user/actor/agent know that objects o1, o2, p2/03 existed?  (also is there ever a use-case to grant c/p/ but explicitly *not* c/p/p2?)","commit_id":"2d41f397df695587652143b824ae0bbd0a66fb6a"},{"author":{"_account_id":17245,"name":"Christopher Bartz","email":"bartz@dkrz.de","username":"cbartz"},"change_message_id":"3f58c44c01161b8b8c323c6183c8e01ed93d6913","unresolved":false,"context_lines":[{"line_number":77,"context_line":" $curl https://example.host/v1/AUTH_account/c/p/o1?temp_url_sig\u003d4e755839d19762e06c12d807eccf46ff3224cb3f\u0026temp_url_expires\u003d1439281346\u0026temp_url_prefix\u003dp"},{"line_number":78,"context_line":" $curl https://example.host/v1/AUTH_account/c/p/o2?temp_url_sig\u003d4e755839d19762e06c12d807eccf46ff3224cb3f\u0026temp_url_expires\u003d1439281346\u0026temp_url_prefix\u003dp"},{"line_number":79,"context_line":" $curl https://example.host/v1/AUTH_account/c/p/p2/o3?temp_url_sig\u003d4e755839d19762e06c12d807eccf46ff3224cb3f\u0026temp_url_expires\u003d1439281346\u0026temp_url_prefix\u003dp"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"Following requests would be denied, because of missing/wrong prefix:"},{"line_number":82,"context_line":"::"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"7a5de9d1_649ea608","line":80,"in_reply_to":"7a5de9d1_81565bcc","updated":"2016-02-01 10:50:37.000000000","message":"This is part of the discovery problem. If we would allow container-listings with the same temp_url_sig, the user would retrieve this by himself. Elsewhise he could be informed by email for example.\nThe use case to explicitly not grant a sub-path could exist, but is not a priority for me.","commit_id":"2d41f397df695587652143b824ae0bbd0a66fb6a"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a09bbb0d86afe2cc935236f7eb734cea20b777d6","unresolved":false,"context_lines":[{"line_number":82,"context_line":"::"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":" $curl https://example.host/v1/AUTH_account/c/o4?temp_url_sig\u003d4e755839d19762e06c12d807eccf46ff3224cb3f\u0026temp_url_expires\u003d1439281346\u0026temp_url_prefix\u003dp"},{"line_number":85,"context_line":" $curl https://example.host/v1/AUTH_account/c/p3/o5?temp_url_sig\u003d4e755839d19762e06c12d807eccf46ff3224cb3f\u0026temp_url_expires\u003d1439281346\u0026temp_url_prefix\u003dp"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7a5de9d1_e1062f1c","line":85,"updated":"2016-01-29 20:05:02.000000000","message":"How does /p3/o5 not start with the prefix \"p\"?  perhaps the temp_url_prefix should have been \"p/\"?  Seems easy to get wrong - oops.  :D","commit_id":"2d41f397df695587652143b824ae0bbd0a66fb6a"},{"author":{"_account_id":17245,"name":"Christopher Bartz","email":"bartz@dkrz.de","username":"cbartz"},"change_message_id":"3f58c44c01161b8b8c323c6183c8e01ed93d6913","unresolved":false,"context_lines":[{"line_number":82,"context_line":"::"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":" $curl https://example.host/v1/AUTH_account/c/o4?temp_url_sig\u003d4e755839d19762e06c12d807eccf46ff3224cb3f\u0026temp_url_expires\u003d1439281346\u0026temp_url_prefix\u003dp"},{"line_number":85,"context_line":" $curl https://example.host/v1/AUTH_account/c/p3/o5?temp_url_sig\u003d4e755839d19762e06c12d807eccf46ff3224cb3f\u0026temp_url_expires\u003d1439281346\u0026temp_url_prefix\u003dp"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7a5de9d1_04a57245","line":85,"in_reply_to":"7a5de9d1_e1062f1c","updated":"2016-02-01 10:50:37.000000000","message":"You are right. I forgot the slash.","commit_id":"2d41f397df695587652143b824ae0bbd0a66fb6a"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a09bbb0d86afe2cc935236f7eb734cea20b777d6","unresolved":false,"context_lines":[{"line_number":89,"context_line":"------------"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"A new middleware could be introduced. But it seems that this would only lead to a lot of"},{"line_number":92,"context_line":"code-copying, as the changes are really small in comparison to the original middleware."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"Implementation"},{"line_number":95,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7a5de9d1_41e06329","line":92,"updated":"2016-01-29 20:05:02.000000000","message":"maybe temporary container acl\u0027s?  And prefix based acls?  I\u0027ve actually seen a middleware that did prefix acl\u0027s out there somewhere - I thought it was pretty smart.  Again not sure about the expires, maybe a temporary \"user\" signature - so you create a prefix acl for some psudeo folder for a opaque user, then generate a temporary signature that grants an identity of that user.  Not sure, I think I understand that \"temporary access to list and get objects under a prefix\" is a use-case - but authorization wise it\u0027s currently a lot more like ACL\u0027s than it is to tempurls.  If we had a means to do \"authorized to GET and LIST under a prefix\" it may seem more obvious how we could take that from an explicit configuration of the container to a implicit temporary authorization.","commit_id":"2d41f397df695587652143b824ae0bbd0a66fb6a"},{"author":{"_account_id":9216,"name":"Joel Wright","email":"joel.wright@gmail.com","username":"jjw-sohonet"},"change_message_id":"1895867d9e26b2dc5dd6463a18f55091fa0f3133","unresolved":false,"context_lines":[{"line_number":89,"context_line":"------------"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"A new middleware could be introduced. But it seems that this would only lead to a lot of"},{"line_number":92,"context_line":"code-copying, as the changes are really small in comparison to the original middleware."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"Implementation"},{"line_number":95,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7a5de9d1_254985b7","line":92,"in_reply_to":"7a5de9d1_41e06329","updated":"2016-02-01 10:52:24.000000000","message":"@Clay, unless I misunderstand what you\u0027re saying here, generating lots of temporary users in order to create appropriate ACLs seems counter-intuitive. Time limited \u0026 restricted access seems ideally suited to beefed up tempURLs, and without the extra overhead of cleaning up all those temp users...","commit_id":"2d41f397df695587652143b824ae0bbd0a66fb6a"},{"author":{"_account_id":17245,"name":"Christopher Bartz","email":"bartz@dkrz.de","username":"cbartz"},"change_message_id":"3f58c44c01161b8b8c323c6183c8e01ed93d6913","unresolved":false,"context_lines":[{"line_number":89,"context_line":"------------"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"A new middleware could be introduced. But it seems that this would only lead to a lot of"},{"line_number":92,"context_line":"code-copying, as the changes are really small in comparison to the original middleware."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"Implementation"},{"line_number":95,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7a5de9d1_1846354f","line":92,"in_reply_to":"7a5de9d1_41e06329","updated":"2016-02-01 10:50:37.000000000","message":"This is a smart idea. Actually I am interested in the temporary access implemented by the tempurl middleware and the authorization mechanism of container acls. The question would be now, where we are tackling this. With a new middleware?","commit_id":"2d41f397df695587652143b824ae0bbd0a66fb6a"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a09bbb0d86afe2cc935236f7eb734cea20b777d6","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"Implementation"},{"line_number":95,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"Assignee(s)"},{"line_number":98,"context_line":"-----------"},{"line_number":99,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"7a5de9d1_61dd5f6e","line":96,"updated":"2016-01-29 20:05:02.000000000","message":"go ahead and link the review!","commit_id":"2d41f397df695587652143b824ae0bbd0a66fb6a"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a09bbb0d86afe2cc935236f7eb734cea20b777d6","unresolved":false,"context_lines":[{"line_number":103,"context_line":"Work Items"},{"line_number":104,"context_line":"----------"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"Add modifications to tempurl and respective test module."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"Repositories"},{"line_number":109,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7a5de9d1_c1d2135c","line":106,"updated":"2016-01-29 20:05:02.000000000","message":"and docs!","commit_id":"2d41f397df695587652143b824ae0bbd0a66fb6a"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a09bbb0d86afe2cc935236f7eb734cea20b777d6","unresolved":false,"context_lines":[{"line_number":133,"context_line":"the path is shrunk to the prefix. The remaining part of the calculation stays the same."},{"line_number":134,"context_line":"A shorter path induces a shorter message as input to the hmac calculation, which should not reduce"},{"line_number":135,"context_line":"the cryptographic strength. Therefore, I do not see security-related problems with introducing"},{"line_number":136,"context_line":"a prefix-based signature."},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"Testing"},{"line_number":139,"context_line":"-------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7a5de9d1_6b7c601f","line":136,"updated":"2016-01-29 20:05:02.000000000","message":"There\u0027s been a lot more discussion in the comments about what we should be thinking about testing/verifiying regarding security and how it we believe it can or will be addressed - I\u0027d like to see that captured here.","commit_id":"2d41f397df695587652143b824ae0bbd0a66fb6a"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a09bbb0d86afe2cc935236f7eb734cea20b777d6","unresolved":false,"context_lines":[{"line_number":138,"context_line":"Testing"},{"line_number":139,"context_line":"-------"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"Tests should be added to the existing test module."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"Dependencies"},{"line_number":144,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7a5de9d1_81dbbb4e","line":141,"updated":"2016-01-29 20:05:02.000000000","message":"unit and func - worth calling out both explicitly.  I think people already mentioned that DLO\u0027s and versioned containers have the most risk of cross-interaction, might check what we already have in tree for those (probably mostly functests if anything)","commit_id":"2d41f397df695587652143b824ae0bbd0a66fb6a"}]}
