Skip to content

Commit

Permalink
samples: upload without authentication (#1711)
Browse files Browse the repository at this point in the history
* samples: upload without authentication

* 馃 Updates from OwlBot

See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md

* updated license header

* fixed function call

* refactored location

* removed space to make options more clear

* 馃 Updates from OwlBot

See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md

* updated comments

* 馃 Updates from OwlBot

See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md

* responsed to PR comments

* responded to PR comments

* moved node-fetch dep

* refactored into two samples

* renamed file

* 馃 Updates from OwlBot

See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md

* 馃 Updates from OwlBot

See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md

* added tests

* fixed test

Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>
  • Loading branch information
shaffeeullah and gcf-owl-bot[bot] committed Nov 22, 2021
1 parent d77979b commit db4e2df
Show file tree
Hide file tree
Showing 6 changed files with 208 additions and 1 deletion.
2 changes: 2 additions & 0 deletions README.md
Expand Up @@ -198,6 +198,8 @@ Samples are in the [`samples/`](https://github.com/googleapis/nodejs-storage/tre
| Upload Encrypted File | [source code](https://github.com/googleapis/nodejs-storage/blob/main/samples/uploadEncryptedFile.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-storage&page=editor&open_in_editor=samples/uploadEncryptedFile.js,samples/README.md) |
| Upload File | [source code](https://github.com/googleapis/nodejs-storage/blob/main/samples/uploadFile.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-storage&page=editor&open_in_editor=samples/uploadFile.js,samples/README.md) |
| Upload File With Kms Key | [source code](https://github.com/googleapis/nodejs-storage/blob/main/samples/uploadFileWithKmsKey.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-storage&page=editor&open_in_editor=samples/uploadFileWithKmsKey.js,samples/README.md) |
| Upload Without Authentication Resumable | [source code](https://github.com/googleapis/nodejs-storage/blob/main/samples/uploadWithoutAuthenticationResumable.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-storage&page=editor&open_in_editor=samples/uploadWithoutAuthenticationResumable.js,samples/README.md) |
| Upload Without Authentication Signed Url | [source code](https://github.com/googleapis/nodejs-storage/blob/main/samples/uploadWithoutAuthenticationSignedUrl.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-storage&page=editor&open_in_editor=samples/uploadWithoutAuthenticationSignedUrl.js,samples/README.md) |
| View Bucket Iam Members | [source code](https://github.com/googleapis/nodejs-storage/blob/main/samples/viewBucketIamMembers.js) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-storage&page=editor&open_in_editor=samples/viewBucketIamMembers.js,samples/README.md) |


Expand Down
36 changes: 36 additions & 0 deletions samples/README.md
Expand Up @@ -116,6 +116,8 @@ objects to users via direct download.
* [Upload Encrypted File](#upload-encrypted-file)
* [Upload File](#upload-file)
* [Upload File With Kms Key](#upload-file-with-kms-key)
* [Upload Without Authentication Resumable](#upload-without-authentication-resumable)
* [Upload Without Authentication Signed Url](#upload-without-authentication-signed-url)
* [View Bucket Iam Members](#view-bucket-iam-members)

## Before you begin
Expand Down Expand Up @@ -1855,6 +1857,40 @@ __Usage:__



### Upload Without Authentication Resumable

View the [source code](https://github.com/googleapis/nodejs-storage/blob/main/samples/uploadWithoutAuthenticationResumable.js).

[![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-storage&page=editor&open_in_editor=samples/uploadWithoutAuthenticationResumable.js,samples/README.md)

__Usage:__


`node samples/uploadWithoutAuthenticationResumable.js`


-----




### Upload Without Authentication Signed Url

View the [source code](https://github.com/googleapis/nodejs-storage/blob/main/samples/uploadWithoutAuthenticationSignedUrl.js).

[![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/nodejs-storage&page=editor&open_in_editor=samples/uploadWithoutAuthenticationSignedUrl.js,samples/README.md)

__Usage:__


`node samples/uploadWithoutAuthenticationSignedUrl.js`


-----




### View Bucket Iam Members

View the [source code](https://github.com/googleapis/nodejs-storage/blob/main/samples/viewBucketIamMembers.js).
Expand Down
2 changes: 1 addition & 1 deletion samples/package.json
Expand Up @@ -18,13 +18,13 @@
"dependencies": {
"@google-cloud/pubsub": "^2.0.0",
"@google-cloud/storage": "^5.16.0",
"node-fetch": "^2.3.0",
"uuid": "^8.0.0",
"yargs": "^16.0.0"
},
"devDependencies": {
"chai": "^4.2.0",
"mocha": "^8.0.0",
"node-fetch": "^2.3.0",
"p-limit": "^3.1.0"
}
}
19 changes: 19 additions & 0 deletions samples/system-test/files.test.js
Expand Up @@ -30,6 +30,7 @@ const storage = new Storage();
const cwd = path.join(__dirname, '..');
const bucketName = generateName();
const bucket = storage.bucket(bucketName);
const fileContents = 'these-are-my-contents';
const fileName = 'test.txt';
const movedFileName = 'test2.txt';
const copiedFileName = 'test3.txt';
Expand Down Expand Up @@ -64,6 +65,24 @@ describe('file', () => {
assert.strictEqual(exists, true);
});

it('should upload a file without authentication using resumable strategy', async () => {
const output = execSync(
`node uploadWithoutAuthenticationResumable.js ${bucketName} ${fileContents} ${fileName}`
);
assert.match(output, new RegExp(`${fileName} uploaded to ${bucketName}`));
const [exists] = await bucket.file(fileName).exists();
assert.strictEqual(exists, true);
});

it('should upload a file without authentication using signed url strategy', async () => {
const output = execSync(
`node uploadWithoutAuthenticationSignedUrl.js ${bucketName} ${fileContents} ${fileName}`
);
assert.match(output, new RegExp(`${fileName} uploaded to ${bucketName}`));
const [exists] = await bucket.file(fileName).exists();
assert.strictEqual(exists, true);
});

it('should upload a file using a stream', async () => {
const output = execSync(
`node streamFileUpload.js ${bucketName} ${fileName}`
Expand Down
66 changes: 66 additions & 0 deletions samples/uploadWithoutAuthenticationResumable.js
@@ -0,0 +1,66 @@
// Copyright 2021 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

function main(
bucketName = 'my-bucket',
contents = 'these are my file contents',
destFileName = 'file.txt'
) {
// [START storage_upload_without_authentication_create_resumable]
/**
* TODO(developer): Uncomment the following lines before running the sample.
*/
// The ID of your GCS bucket
// const bucketName = 'your-unique-bucket-name';

// The contents that you want to upload
// const contents = 'these are my contents';

// The new ID for your GCS file
// const destFileName = 'your-new-file-name';

// Imports the Google Cloud Node.js client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

async function uploadWithoutAuthenticationCreateResumableUploadStrategy() {
const file = storage.bucket(bucketName).file(destFileName);

// Returns an authenticated endpoint to which
// you can make requests without credentials.
const [location] = await file.createResumableUpload(); //auth required

// Passes the location to file.save so you don't need to
// authenticate this call
await file.save(contents, {
uri: location,
resumable: true,
validation: false,
});

console.log(`${destFileName} uploaded to ${bucketName}`);
}

uploadWithoutAuthenticationCreateResumableUploadStrategy().catch(
console.error
);
// [END storage_upload_without_authentication_create_resumable]
}
process.on('unhandledRejection', err => {
console.error(err.message);
process.exitCode = 1;
});
main(...process.argv.slice(2));
84 changes: 84 additions & 0 deletions samples/uploadWithoutAuthenticationSignedUrl.js
@@ -0,0 +1,84 @@
// Copyright 2021 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

function main(
bucketName = 'my-bucket',
contents = 'these are my file contents',
destFileName = 'file.txt'
) {
// [START storage_upload_without_authentication_signed_url]
/**
* TODO(developer): Uncomment the following lines before running the sample.
*/
// The ID of your GCS bucket
// const bucketName = 'your-unique-bucket-name';

// The contents that you want to upload
// const contents = 'these are my contents';

// The new ID for your GCS file
// const destFileName = 'your-new-file-name';

// Imports the Google Cloud Node.js client library
const {Storage} = require('@google-cloud/storage');

const fetch = require('node-fetch');

// Creates a client
const storage = new Storage();

async function uploadWithoutAuthenticationSignedUrlStrategy() {
const file = storage.bucket(bucketName).file(destFileName);

// Use signed URLs to manually start resumable uploads.
// Authenticating is required to get the signed URL, but isn't
// required to start the resumable upload
const options = {
version: 'v4',
action: 'resumable',
expires: Date.now() + 30 * 60 * 1000, // 30 mins
};
//auth required
const [signedUrl] = await file.getSignedUrl(options);

// no auth required
const resumableSession = await fetch(signedUrl, {
method: 'POST',
headers: {
'x-goog-resumable': 'start',
},
});

// Endpoint to which we should upload the file
const location = resumableSession.headers.location;

// Passes the location to file.save so you don't need to
// authenticate this call
await file.save(contents, {
uri: location,
resumable: true,
validation: false,
});

console.log(`${destFileName} uploaded to ${bucketName}`);
}

uploadWithoutAuthenticationSignedUrlStrategy().catch(console.error);
// [END storage_upload_without_authentication_signed_url]
}
process.on('unhandledRejection', err => {
console.error(err.message);
process.exitCode = 1;
});
main(...process.argv.slice(2));

0 comments on commit db4e2df

Please sign in to comment.