Skip to content

Commit ba4d402

Browse files
frankynjkwlui
andauthored
[storage] feat: add post policy sample (GoogleCloudPlatform#3231)
* feat: add post policy sample * use 1.27.0 * fix * simplify iterator Co-authored-by: Jonathan Lui <jonathanlui@google.com>
1 parent eb6a7a2 commit ba4d402

File tree

3 files changed

+80
-1
lines changed

3 files changed

+80
-1
lines changed

storage/cloud-client/requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
google-cloud-pubsub==1.1.0
2-
google-cloud-storage==1.26.0
2+
google-cloud-storage==1.27.0

storage/cloud-client/snippets_test.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import storage_generate_signed_url_v2
4141
import storage_generate_signed_url_v4
4242
import storage_generate_upload_signed_url_v4
43+
import storage_generate_signed_post_policy_v4
4344
import storage_set_bucket_default_kms_key
4445

4546
KMS_KEY = os.environ["CLOUD_KMS_KEY"]
@@ -202,6 +203,22 @@ def test_generate_upload_signed_url_v4(test_bucket, capsys):
202203
assert blob.download_as_string() == content
203204

204205

206+
def test_generate_signed_policy_v4(test_bucket, capsys):
207+
blob_name = "storage_snippets_test_form"
208+
short_name = storage_generate_signed_post_policy_v4
209+
form = short_name.generate_signed_post_policy_v4(
210+
test_bucket.name, blob_name
211+
)
212+
assert "name='key' value='{}'".format(blob_name) in form
213+
assert "name='x-goog-signature'" in form
214+
assert "name='x-goog-date'" in form
215+
assert "name='x-goog-credential'" in form
216+
assert "name='x-goog-algorithm' value='GOOG4-RSA-SHA256'" in form
217+
assert "name='policy'" in form
218+
assert "name='x-goog-meta-test' value='data'" in form
219+
assert "type='file' name='file'/>" in form
220+
221+
205222
def test_rename_blob(test_blob):
206223
bucket = storage.Client().bucket(test_blob.bucket.name)
207224

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
#!/usr/bin/env python
2+
3+
# Copyright 2020 Google Inc. All Rights Reserved.
4+
#
5+
# Licensed under the Apache License, Version 2.0 (the 'License');
6+
# you may not use this file except in compliance with the License.
7+
# You may obtain a copy of the License at
8+
#
9+
# http://www.apache.org/licenses/LICENSE-2.0
10+
#
11+
# Unless required by applicable law or agreed to in writing, software
12+
# distributed under the License is distributed on an "AS IS" BASIS,
13+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
# See the License for the specific language governing permissions and
15+
# limitations under the License.
16+
17+
import sys
18+
19+
# [START storage_generate_signed_post_policy_v4]
20+
from google.cloud import storage
21+
import datetime
22+
23+
24+
def generate_signed_post_policy_v4(bucket_name, blob_name):
25+
"""Generates a v4 POST Policy and prints an HTML form."""
26+
# bucket_name = 'your-bucket-name'
27+
# blob_name = 'your-object-name'
28+
29+
storage_client = storage.Client()
30+
31+
policy = storage_client.generate_signed_post_policy_v4(
32+
bucket_name,
33+
blob_name,
34+
expiration=datetime.timedelta(minutes=10),
35+
fields={
36+
'x-goog-meta-test': 'data'
37+
}
38+
)
39+
40+
# Create an HTML form with the provided policy
41+
header = "<form action='{}' method='POST' enctype='multipart/form-data'>\n"
42+
form = header.format(policy["url"])
43+
44+
# Include all fields returned in the HTML form as they're required
45+
for key, value in policy["fields"].items():
46+
form += " <input name='{}' value='{}' type='hidden'/>\n".format(key, value)
47+
48+
form += " <input type='file' name='file'/><br />\n"
49+
form += " <input type='submit' value='Upload File' name='submit'/><br />\n"
50+
form += "</form>"
51+
52+
print(form)
53+
54+
return form
55+
56+
57+
# [END storage_generate_signed_post_policy_v4]
58+
59+
if __name__ == "__main__":
60+
generate_signed_post_policy_v4(
61+
bucket_name=sys.argv[1], blob_name=sys.argv[2]
62+
)

0 commit comments

Comments
 (0)