0

I setup SAIO on VirtualBox and want to check how's temp url feature works for Swift.

here is the object I created call test.txt under container "testCon", you can see the content and swift list the object

swift@swift-VirtualBox:~/bin$ curl -X GET -H 'X-Auth-Token: AUTH_tkba199b23eeec4998b7119d2c9c903216' http://127.0.0.1:8080/v1/AUTH_test/testCon/test.txt
this is a test
swift@swift-VirtualBox:~/bin$ swift -A http://127.0.0.1:8080/auth/v1.0 -U test:tester -K testing list testCon
test.txt

I follow the link (http://ceph.com/docs/master/radosgw/swift/tempurl/) to setup temp url key for temp url

swift@swift-VirtualBox:~/bin$ curl -X POST -H 'X-Auth-Token: AUTH_tkba199b23eeec4998b7119d2c9c903216' -H 'X-Account-Meta-Temp-URL-Key: secret' http://127.0.0.1:8080/v1/AUTH_test/testCon/test.txt
<html><h1>Accepted</h1><p>The request is accepted for processing.</p></html>swift@swift-VirtualBox:~/bin$ 
swift@swift-VirtualBox:~/bin$ swift -A http://127.0.0.1:8080/auth/v1.0 -U test:tester -K testing post -m "Temp-URL-Key:secret" 

and follow the python example to generate the temp url links


import hmac
from hashlib import sha1
from time import time

method = 'GET'

host = "http://127.0.0.1:8080"
duration_in_seconds = 300  # Duration for which the url is valid
expires = int(time() + duration_in_seconds)

path = '/v1/AUTH_test/testCon/test.txt'
key = 'secret'

hmac_body = '%s\n%s\n%s' % (method, expires, path)
hmac_body = hmac.new(key, hmac_body, sha1).hexdigest()

sig = hmac.new(key, hmac_body, sha1).hexdigest()
rest_uri = "{host}{path}?temp_url_sig={sig}&temp_url_expires={expires}".format(
             host=host, path=path, sig=sig, expires=expires)
print rest_uri

but when i put the link in cli, it always show: No such file or directory

swift@swift-VirtualBox:~/bin$ http://127.0.0.1:8080/v1/AUTH_test/testCon/test.txt?temp_url_sig=83fa35362613a18c2ca0b48203ccda61d2229daa&temp_url_expires=1439938672
[1] 6125
swift@swift-VirtualBox:~/bin$ -bash: http://127.0.0.1:8080/v1/AUTH_test/testCon/test.txt?temp_url_sig=83fa35362613a18c2ca0b48203ccda61d2229daa: **No such file or directory**

can anyone help ? Please provide some suggestions to me ?

Thanks Million !

Johnny Wang
  • 15
  • 1
  • 5

2 Answers2

1

You need to browse to the URL generated by the python script. You can do this either in a web browser or using the curl command from the command line:

curl http://127.0.0.1:8080/v1/AUTH_test/testCon/test.txt?temp_url_sig=83fa35362613a18c2ca0b48203ccda61d2229daa&temp_url_expires=1439938672

Just placing the url on the command line by itself won't do anything.

Joe Young
  • 5,749
  • 3
  • 28
  • 27
  • Thanks ! but I re-generate the link but I got "swift@swift-VirtualBox:~/bin$ 401 Unauthorized: Temp URL invalid", anything wrong with post the X-Account-Meta-Temp-URL-Key or wrong path in above python ? – Johnny Wang Aug 19 '15 at 00:30
  • Here are the cli I try: – Johnny Wang Aug 19 '15 at 01:44
  • I found the end of python has change line and curl command have to be used above then can get the file download w/o 401. curl -L -o 'download.txt' 'https://region-a.geo-1.objects.hpcloudsvc.com/v1/10846130789747/USERMETAFILE/10846130789747_xxxxxxxx?temp_url_sig=10846130789747:AWHYVDR62M98H1JKE3W2:92842990c61d1a063476a1e583a3dbef7d6c0ae0&temp_url_expires=1440012858' – Johnny Wang Aug 19 '15 at 18:19
  • good example for curl: ## ****************** TIP *************************************** ## ## a) Put all urls in single-quotes to avoid nasty shell surprises ## b) The -L option follows url redirection ## c) The -o 'file' write file to given name ## ****************** TIP *************************************** ## curl -L -o 'filezilla.tar.bz2' 'http://downloads.sourceforge.net/project/filezilla/FileZilla_Client/3.7.3/FileZilla_3.7.3_i686-apple-darwin9.app.tar.bz2?r=http%3A%2F%2Fsourceforge.net%2F&ts=1381651492&use_mirror=ncu' – Johnny Wang Aug 19 '15 at 18:51
0

Anyone else can provide useful answer for tempURL issue ? Here is the swift stat you can see, the tempurl key should be there.

swift@swift-VirtualBox:~$ swift -A http://127.0.0.1:8080/auth/v1.0 -U test:tester -K testing stat
                         Account: AUTH_test
                      Containers: 1
                         Objects: 0
                           Bytes: 0
     Containers in policy "gold": 1
        Objects in policy "gold": 0
          Bytes in policy "gold": 0
Meta X-Account-Meta-Temp-Url-Key: secret
               Meta Temp-Url-Key: secret
                     X-Timestamp: 1439949170.11921
                      X-Trans-Id: tx38b5a254caf34023b96c3-0055d3e3e0
                    Content-Type: text/plain; charset=utf-8
                   Accept-Ranges: bytes
swift@swift-VirtualBox:~$ swift -A http://127.0.0.1:8080/auth/v1.0 -U test:tester -K testing stat testCon
                         Account: AUTH_test
                       Container: testCon
                         Objects: 1
                           Bytes: 15
                        Read ACL:
                       Write ACL:
                         Sync To:
                        Sync Key:
Meta X-Account-Meta-Temp-Url-Key: secret
                   Accept-Ranges: bytes
                X-Storage-Policy: gold
                     X-Timestamp: 1439949251.62009
                      X-Trans-Id: tx80638d6e3bb24764945fb-0055d3e3e6
                    Content-Type: text/plain; charset=utf-8
swift@swift-VirtualBox:~$ swift -A http://127.0.0.1:8080/auth/v1.0 -U test:tester -K testing stat testCon test.txt
                         Account: AUTH_test
                       Container: testCon
                          Object: test.txt
                    Content Type: text/plain
                  Content Length: 15
                   Last Modified: Wed, 19 Aug 2015 02:03:04 GMT
                            ETag: 81967071826aa902b0fa890876499cbb
Meta X-Account-Meta-Temp-Url-Key: secret
                   Accept-Ranges: bytes
                     X-Timestamp: 1439949783.34589
                      X-Trans-Id: tx8d4566c37c9b4f598193e-0055d3e3ee

I try both browser and curl + link, non of them are work for me.

swift@swift-VirtualBox:~$ curl http://127.0.0.1:8080/testCon/test.txt?temp_url_sig=e005d33b515a2e7900ff58f86e062f8a5682217f&temp_url_expires=1439952878
[1] 18540
swift@swift-VirtualBox:~$ 401 Unauthorized: Temp URL invalid

swift@swift-VirtualBox:~$ curl http://127.0.0.1:8080/v1/AUTH_test/testCon/test.txt?temp_url_sig=b65dae8902026c3ade58d91a2f4c4ee135d564b0&temp_url_expires=1439952980
[1] 18542
swift@swift-VirtualBox:~$ 401 Unauthorized: Temp URL invalid

I'm not sure the path in python is correct or not, since I saw people has two different suggestion but include /V1/Auth_User/container/object looks like necessary.

import hmac
from hashlib import sha1
from time import time

method = 'GET'
#host = 'https://objectstore.example.com'
host = "http://127.0.0.1:8080"
#host = "http://127.0.0.1:8080/testCon/test.txt"
duration_in_seconds = 3000  # Duration for which the url is valid
expires = int(time() + duration_in_seconds)
#path = '/v1/your-bucket/your-object'
#path = '/v1/tempfolder/test.txt'
path = '/v1/AUTH_test/testCon/test.txt'
key = 'secret'
#key2 = 'secret2'
hmac_body = '%s\n%s\n%s' % (method, expires, path)
hmac_body = hmac.new(key, hmac_body, sha1).hexdigest()
#hmac_body = hmac.new(key, key2, hmac_body, sha1).hexdigest()
sig = hmac.new(key, hmac_body, sha1).hexdigest()
rest_uri = "{host}{path}?temp_url_sig={sig}&temp_url_expires={expires}".format(
            #host=host, path="", sig=sig, expires=expires)
            host=host, path=path, sig=sig, expires=expires)
print rest_uri

It will be great if you could share the advice with me.

Johnny Wang
  • 15
  • 1
  • 5