diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..c2658d7d1b --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules/ diff --git a/.jshintrc b/.jshintrc new file mode 100644 index 0000000000..a0f3b329d5 --- /dev/null +++ b/.jshintrc @@ -0,0 +1,7 @@ +{ + "camelcase" : true, + "indent" : 2, + "strict" : true, + "globalstrict" : true, + "node" : true +} diff --git a/.travis.yml b/.travis.yml index c520c59544..e0e240713d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,40 +1,43 @@ sudo: false -#add language, etc. here +language: node_js +node_js: +- "stable" +- "0.10" cache: directories: - - $HOME/gcloud/ + - $HOME/gcloud/ env: - - PATH=$PATH:$HOME/gcloud/google-cloud-sdk/bin GOOGLE_APPLICATION_CREDENTIALS=$TRAVIS_BUILD_DIR/client_secrets.json #Other environment variables on same line +- PATH=$PATH:$HOME/gcloud/google-cloud-sdk/bin GOOGLE_APPLICATION_CREDENTIALS=$TRAVIS_BUILD_DIR/nodejs-docs-samples.json TEST_BUCKET_NAME=cloud-samples-tests TEST_PROJECT_ID=cloud-samples-tests #Other environment variables on same line before_install: - #ENCRYPT YOUR PRIVATE KEY (If you need authentication) - # 1. Install and login to the Travis CLI: - # $ gem install travis - # $ travis login - # 2. Move your json private key to client_secrets.json - # 3. Run: - # $ travis encrypt-file client_secrets.json --add - # 4. Commit changes: - # $ git add client_secrets.json.enc - # $ git commit client_secrets.json.enc .travis.yml +#ENCRYPT YOUR PRIVATE KEY (If you need authentication) +# 1. Install and login to the Travis CLI: +# $ gem install travis +# $ travis login +# 2. Move your json private key to client_secrets.json +# 3. Run: +# $ travis encrypt-file client_secrets.json --add +# 4. Commit changes: +# $ git add client_secrets.json.enc +# $ git commit client_secrets.json.enc .travis.yml - - if [ ! -d $HOME/gcloud/google-cloud-sdk ]; then - mkdir -p $HOME/gcloud && - wget https://dl.google.com/dl/cloudsdk/release/google-cloud-sdk.tar.gz --directory-prefix=$HOME/gcloud && - cd $HOME/gcloud && - tar xzf google-cloud-sdk.tar.gz && - printf '\ny\n\ny\ny\n' | ./google-cloud-sdk/install.sh && - cd $TRAVIS_BUILD_DIR; - fi - - gcloud -q components update - - if [ -a client_secrets.json ]; then - gcloud -q auth activate-service-account --key-file client_secrets.json; - fi +- if [ ! -d $HOME/gcloud/google-cloud-sdk ]; then + mkdir -p $HOME/gcloud && + wget https://dl.google.com/dl/cloudsdk/release/google-cloud-sdk.tar.gz --directory-prefix=$HOME/gcloud && + cd $HOME/gcloud && + tar xzf google-cloud-sdk.tar.gz && + printf '\ny\n\ny\ny\n' | ./google-cloud-sdk/install.sh && + cd $TRAVIS_BUILD_DIR; + fi +- openssl aes-256-cbc -K $encrypted_95e832a36b06_key -iv $encrypted_95e832a36b06_iv -in nodejs-docs-samples.json.enc -out nodejs-docs-samples.json -d +- if [ -a nodejs-docs-samples.json ]; then + gcloud auth activate-service-account --key-file nodejs-docs-samples.json; + fi install: - #Add app specific setup here - #Use '-q' to disable interactive prompts +#Add app specific setup here +#Use '-q' to disable interactive prompts script: - #Test and/or deploy your app with gcloud commands here! +#Test and/or deploy your app with gcloud commands here! diff --git a/README.md b/README.md index f17a3a8016..b4ef96a8ea 100644 --- a/README.md +++ b/README.md @@ -1,52 +1,13 @@ -## Project Name +## Google Cloud Platform NodeJS Samples -Project description. +This repository holds the samples used in the nodejs documentation on [cloud.google.com](https://cloud.google.com). + +[![Build Status](https://travis-ci.org/GoogleCloudPlatform/nodejs-docs-samples.svg)](https://travis-ci.org/GoogleCloudPlatform/nodejs-docs-samples) See our other [Google Cloud Platform github repos](https://github.com/GoogleCloudPlatform) for sample applications and scaffolding for other frameworks and use cases. -## Run Locally -1. Install the [Google Cloud SDK](https://cloud.google.com/sdk/), including the [gcloud tool](https://cloud.google.com/sdk/gcloud/), and [gcloud app component](https://cloud.google.com/sdk/gcloud-app). -2. Setup the gcloud tool. - - ``` - gcloud components update app - gcloud auth login - gcloud config set project - ``` - You don't need a valid app-id to run locally, but will need a valid id to deploy below. - -1. Clone this repo. - - ``` - git clone https://github.com/GoogleCloudPlatform/.git - ``` -1. Run this project locally from the command line. - - ``` - gcloud preview app run / - ``` - -1. Visit the application at [http://localhost:8080](http://localhost:8080). - -## Deploying - -1. Use the [Cloud Developer Console](https://console.developer.google.com) to create a project/app id. (App id and project id are identical) -2. Configure gcloud with your app id. - - ``` - gcloud config set project - ``` -1. Use the [Admin Console](https://appengine.google.com) to view data, queues, and other App Engine specific administration tasks. -1. Use gcloud to deploy your app. - - ``` - gcloud preview app deploy / - ``` - -1. Congratulations! Your application is now live at your-app-id.appspot.com - ## Contributing changes * See [CONTRIBUTING.md](CONTRIBUTING.md) diff --git a/cloud-storage/authSample.js b/cloud-storage/authSample.js new file mode 100644 index 0000000000..74df3060e1 --- /dev/null +++ b/cloud-storage/authSample.js @@ -0,0 +1,54 @@ +/** + * @fileoverview Sample code that grabs default credentials from the + * environment, then uses it to make an api call. + */ + +var google = require('googleapis'); + +/** + * Callback for remote requests. + * + * @callback requestCallback + * @param {Object} error - if there's an error with the request, this is pass + * through to the callback. + * @param {Object} response - the response for the request. + */ + +/** + * Fetches a list of the buckets under the given project id. + * + * @param {String} projectId - the project id that owns the buckets. + * @param {requestCallback} callback - a function to be called when the server + * responds with the list of buckets. + */ +// [START list_buckets] +function listBuckets(projectId, callback) { + google.auth.getApplicationDefault(function(error, authClient) { + if (error) { + return callback(error); + } + + // Depending on the environment that provides the default credentials + // (eg Compute Engine, App Engine), the credentials may require us to + // specify the scopes we need explicitly. + // Check for this case, and inject the Cloud Storage scope if required. + if (authClient.createScopedRequired && + authClient.createScopedRequired()) { + authClient = authClient.createScoped( + ['https://www.googleapis.com/auth/devstorage.read_write']); + } + + // Create the service object. + var storage = google.storage('v1'); + // Make the api call to list the buckets. + storage.buckets.list({ + auth: authClient, + project: projectId + }, callback); + }); +} +// [END list_buckets] + +module.exports = { + listBuckets: listBuckets +}; diff --git a/nodejs-docs-samples.json.enc b/nodejs-docs-samples.json.enc new file mode 100644 index 0000000000..b07eabf98d Binary files /dev/null and b/nodejs-docs-samples.json.enc differ diff --git a/package.json b/package.json new file mode 100644 index 0000000000..f1814da17a --- /dev/null +++ b/package.json @@ -0,0 +1,23 @@ +{ + "name": "nodejs-docs-samples", + "version": "0.0.1", + "description": "Samples used in the nodejs documentation on cloud.google.com", + "main": "index.js", + "scripts": { + "test": "mocha --recursive" + }, + "author": "jerjou@google.com", + "license": "Apache 2", + "private": true, + "dependencies": { + "googleapis": "~2.1.3" + }, + "devDependencies": { + "mocha": "~2.2.5", + "lodash": "~3.10.1" + }, + "repository": { + "type": "git", + "url": "https://github.com/GoogleCloudPlatform/python-docs-samples.git" + } +} diff --git a/test/cloud-storage/testAuthSample.js b/test/cloud-storage/testAuthSample.js new file mode 100644 index 0000000000..22049f8914 --- /dev/null +++ b/test/cloud-storage/testAuthSample.js @@ -0,0 +1,27 @@ +/** + * @fileoverview Tests for the list-buckets module. + */ + +var assert = require("assert"); +var _ = require('lodash'); + +var authSample = require("../../cloud-storage/authSample"); + +describe('listBuckets', function() { + it('returns a list of buckets', function (done) { + authSample.listBuckets( + process.env.TEST_PROJECT_ID, + function(error, success) { + if (error) { + done('Should not have returned an error: ' + error); + } else { + assert(success.items.length > 0); + assert(_.find(success.items, function(item) { + return item.name == process.env.TEST_BUCKET_NAME; + })); + done(); + } + }); + }); +}); +