Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2,472 changes: 2,472 additions & 0 deletions storage/README.md

Large diffs are not rendered by default.

109 changes: 109 additions & 0 deletions storage/addBucketConditionalBinding.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
// Copyright 2020 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.

'use strict';

/**
* This application demonstrates how to perform basic operations on bucket and
* file Access Control Lists with the Google Cloud Storage API.
*
* For more information, see the README.md under /storage and the documentation
* at https://cloud.google.com/storage/docs.
*/

function main(
bucketName = 'my-bucket',
roleName = 'roles/storage.objectViewer',
title = 'match-prefix',
description = 'Applies to objects matching a prefix',
expression = 'resource.name.startsWith("projects/_/buckets/bucket-name/objects/prefix-a-")',
members = 'user:test@example.com'
) {
members = members.split(',');
// [START storage_add_bucket_conditional_iam_binding]
/**
* TODO(developer): Uncomment the following lines before running the sample.
*/
// The ID of your GCS bucket
// const bucketName = 'your-unique-bucket-name';

// The role to grant
// const roleName = 'roles/storage.objectViewer';

// The members to grant the new role to
// const members = [
// 'user:jdoe@example.com',
// 'group:admins@example.com',
// ];

// Create a condition
// const title = 'Title';
// const description = 'Description';
// const expression = 'resource.name.startsWith(\"projects/_/buckets/bucket-name/objects/prefix-a-\")';

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

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

async function addBucketConditionalBinding() {
try {
// Get a reference to a Google Cloud Storage bucket
const bucket = storage.bucket(bucketName);

// Gets and updates the bucket's IAM policy
const [policy] = await bucket.iam.getPolicy({requestedPolicyVersion: 3});

// Set the policy's version to 3 to use condition in bindings.
policy.version = 3;

// Adds the new roles to the bucket's IAM policy
policy.bindings.push({
role: roleName,
members: members,
condition: {
title: title,
description: description,
expression: expression,
},
});

// Updates the bucket's IAM policy
await bucket.iam.setPolicy(policy);

console.log(
`Added the following member(s) with role ${roleName} to ${bucketName}:`
);

members.forEach(member => {
console.log(` ${member}`);
});

console.log('with condition:');
console.log(` Title: ${title}`);
console.log(` Description: ${description}`);
console.log(` Expression: ${expression}`);
} catch (error) {
console.error(
'Error executing add bucket conditional binding:',
error.message || error
);
}
}

addBucketConditionalBinding();
// [END storage_add_bucket_conditional_iam_binding]
Comment on lines +61 to +107
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

To standardize error handling and provide more descriptive error messages, please wrap the logic inside addBucketConditionalBinding in a try...catch block. This is inconsistent with other new samples like addBucketLabel.js which use this pattern.

  async function addBucketConditionalBinding() {
    try {
      // Get a reference to a Google Cloud Storage bucket
      const bucket = storage.bucket(bucketName);

      // Gets and updates the bucket's IAM policy
      const [policy] = await bucket.iam.getPolicy({requestedPolicyVersion: 3});

      // Set the policy's version to 3 to use condition in bindings.
      policy.version = 3;

      // Adds the new roles to the bucket's IAM policy
      policy.bindings.push({
        role: roleName,
        members: members,
        condition: {
          title: title,
          description: description,
          expression: expression,
        },
      });

      // Updates the bucket's IAM policy
      await bucket.iam.setPolicy(policy);

      console.log(
        `Added the following member(s) with role ${roleName} to ${bucketName}:`
      );

      members.forEach(member => {
        console.log(`  ${member}`);
      });

      console.log('with condition:');
      console.log(`  Title: ${title}`);
      console.log(`  Description: ${description}`);
      console.log(`  Expression: ${expression}`);
    } catch (error) {
      console.error(
        'Error executing add bucket conditional binding:',
        error.message || error
      );
    }
  }

  addBucketConditionalBinding();
  // [END storage_add_bucket_conditional_iam_binding]

}
main(...process.argv.slice(2));
64 changes: 64 additions & 0 deletions storage/addBucketDefaultOwnerAcl.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
// Copyright 2020 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.

'use strict';

/**
* This application demonstrates how to perform basic operations on bucket and
* file Access Control Lists with the Google Cloud Storage API.
*
* For more information, see the README.md under /storage and the documentation
* at https://cloud.google.com/storage/docs.
*/

function main(bucketName = 'my-bucket', userEmail = 'jdobry@google.com') {
// [START storage_add_bucket_default_owner]
/**
* TODO(developer): Uncomment the following lines before running the sample.
*/
// The ID of your GCS bucket
// const bucketName = 'your-unique-bucket-name';

// The email address of the user to add
// const userEmail = 'user-email-to-add';

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

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

async function addBucketDefaultOwner() {
try {
// Makes the user an owner in the default ACL of the bucket. You can use
// addAllUsers(), addDomain(), addProject(), addGroup(), and
// addAllAuthenticatedUsers() to grant access to different types of entities.
// You can also use "readers" and "writers" to grant different roles.
await storage.bucket(bucketName).acl.default.owners.addUser(userEmail);

console.log(
`Added user ${userEmail} as an owner on bucket ${bucketName}.`
);
} catch (error) {
console.error(
'Error executing add bucket default owner ACL:',
error.message || error
);
}
}

addBucketDefaultOwner();
// [END storage_add_bucket_default_owner]
}
main(...process.argv.slice(2));
82 changes: 82 additions & 0 deletions storage/addBucketIamMember.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
// Copyright 2020 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.

'use strict';

function main(
bucketName = 'my-bucket',
roleName = 'roles/storage.objectViewer',
members = 'user:test@example.com'
) {
//including this logic so as to not use yargs
members = members.split(',');
// [START storage_add_bucket_iam_member]
/**
* TODO(developer): Uncomment the following lines before running the sample.
*/
// The ID of your GCS bucket
// const bucketName = 'your-unique-bucket-name';

// The role to grant
// const roleName = 'roles/storage.objectViewer';

// The members to grant the new role to
// const members = [
// 'user:jdoe@example.com',
// 'group:admins@example.com',
// ];

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

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

async function addBucketIamMember() {
try {
// Get a reference to a Google Cloud Storage bucket
const bucket = storage.bucket(bucketName);

// For more information please read:
// https://cloud.google.com/storage/docs/access-control/iam
const [policy] = await bucket.iam.getPolicy({requestedPolicyVersion: 3});

// Adds the new roles to the bucket's IAM policy
policy.bindings.push({
role: roleName,
members: members,
});

// Updates the bucket's IAM policy
await bucket.iam.setPolicy(policy);

console.log(
`Added the following member(s) with role ${roleName} to ${bucketName}:`
);

members.forEach(member => {
console.log(` ${member}`);
});
} catch (error) {
console.error(
'Error executing add bucket iam member:',
error.message || error
);
}
}

addBucketIamMember();
// [END storage_add_bucket_iam_member]
}
main(...process.argv.slice(2));
69 changes: 69 additions & 0 deletions storage/addBucketLabel.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
// Copyright 2020 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.

'use strict';

// sample-metadata:
// title: Storage Add Bucket Label.
// description: Adds bucket label.
// usage: node addBucketLabel.js <BUCKET_NAME> <LABEL_KEY> <LABEL_VALUE>

function main(
bucketName = 'my-bucket',
labelKey = 'labelone',
labelValue = 'labelonevalue'
) {
// [START storage_add_bucket_label]
/**
* TODO(developer): Uncomment the following lines before running the sample.
*/
// The ID of your GCS bucket
// const bucketName = 'your-unique-bucket-name';

// The key of the label to add
// const labelKey = 'label-key-to-add';

// The value of the label to add
// const labelValue = 'label-value-to-add';

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

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

const labels = {
[labelKey]: labelValue,
};

async function addBucketLabel() {
try {
await storage.bucket(bucketName).setMetadata({labels});
console.log(`Added label to bucket ${bucketName}`);
} catch (error) {
console.error(
'Error executing add bucket label:',
error.message || error
);
}
}

addBucketLabel();
// [END storage_add_bucket_label]
}
process.on('unhandledRejection', err => {
console.error(err.message);
process.exitCode = 1;
});
main(...process.argv.slice(2));
64 changes: 64 additions & 0 deletions storage/addBucketOwnerAcl.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
// Copyright 2020 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.

'use strict';

/**
* This application demonstrates how to perform basic operations on bucket and
* file Access Control Lists with the Google Cloud Storage API.
*
* For more information, see the README.md under /storage and the documentation
* at https://cloud.google.com/storage/docs.
*/

function main(bucketName = 'my-bucket', userEmail = 'jdobry@google.com') {
// [START storage_add_bucket_owner]
/**
* TODO(developer): Uncomment the following lines before running the sample.
*/
// The ID of your GCS bucket
// const bucketName = 'your-unique-bucket-name';

// The email address of the user to add
// const userEmail = 'user-email-to-add';

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

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

async function addBucketOwner() {
try {
// Makes the user an owner of the bucket. You can use addAllUsers(),
// addDomain(), addProject(), addGroup(), and addAllAuthenticatedUsers()
// to grant access to different types of entities. You can also use "readers"
// and "writers" to grant different roles.
await storage.bucket(bucketName).acl.owners.addUser(userEmail);

console.log(
`Added user ${userEmail} as an owner on bucket ${bucketName}.`
);
} catch (error) {
console.error(
'Error executing add bucket owner ACL:',
error.message || error
);
}
}

addBucketOwner();
// [END storage_add_bucket_owner]
}
main(...process.argv.slice(2));
Loading
Loading