Skip to content

Commit 1c67404

Browse files
committed
Added Pub/Sub samples.
1 parent add9bf6 commit 1c67404

File tree

6 files changed

+594
-0
lines changed

6 files changed

+594
-0
lines changed

pubsub/README.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
## Pub/Sub Samples
2+
3+
These samples require two environment variables to be set:
4+
5+
- `GOOGLE_APPLICATION_CREDENTIALS` - Path to a service account file. You can
6+
download one from your Google project's "permissions" page.
7+
- `TEST_PROJECT_ID` - Id of your Google project.
8+
9+
## Run a sample
10+
11+
Install dependencies:
12+
13+
npm install
14+
15+
To print available commands:
16+
17+
npm run
18+
19+
Execute a sample:
20+
21+
npm run <sample>
22+
23+
Example:
24+
25+
npm run subscription

pubsub/iam.js

Lines changed: 183 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,183 @@
1+
// Copyright 2016, Google, Inc.
2+
// Licensed under the Apache License, Version 2.0 (the "License");
3+
// you may not use this file except in compliance with the License.
4+
// You may obtain a copy of the License at
5+
//
6+
// http://www.apache.org/licenses/LICENSE-2.0
7+
//
8+
// Unless required by applicable law or agreed to in writing, software
9+
// distributed under the License is distributed on an "AS IS" BASIS,
10+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11+
// See the License for the specific language governing permissions and
12+
// limitations under the License.
13+
14+
'use strict';
15+
16+
var async = require('async');
17+
var utils = require('./subscription');
18+
var createTopic = utils.createTopic;
19+
var subscribe = utils.subscribe;
20+
21+
// [START get_topic_policy]
22+
function getTopicPolicy(topic, callback) {
23+
// Retrieve the IAM policy for the provided topic
24+
topic.iam.getPolicy(callback);
25+
}
26+
// [END get_topic_policy]
27+
28+
// [START get_subscription_policy]
29+
function getSubscriptionPolicy(subscription, callback) {
30+
// Retrieve the IAM policy for the provided subscription
31+
subscription.iam.getPolicy(callback);
32+
}
33+
// [END get_subscription_policy]
34+
35+
// [START set_topic_policy]
36+
function setTopicPolicy(topic, callback) {
37+
// Policy update
38+
var myPolicy = {
39+
bindings: [
40+
{
41+
role: 'roles/pubsub.subscriber',
42+
members: ['serviceAccount:myotherproject@appspot.gserviceaccount.com']
43+
}
44+
]
45+
};
46+
47+
// Retrieve the IAM policy for the provided topic
48+
topic.iam.setPolicy(myPolicy, callback);
49+
}
50+
// [END set_topic_policy]
51+
52+
// [START set_subscription_policy]
53+
function setSubscriptionPolicy(subscription, callback) {
54+
// Policy update
55+
var myPolicy = {
56+
bindings: [
57+
{
58+
role: 'roles/pubsub.subscriber',
59+
members: ['serviceAccount:myotherproject@appspot.gserviceaccount.com']
60+
}
61+
]
62+
};
63+
64+
// Retrieve the IAM policy for the provided subscription
65+
subscription.iam.setPolicy(myPolicy, callback);
66+
}
67+
// [END set_subscription_policy]
68+
69+
// [START test_topic_permissions]
70+
function testTopicPermissions(topic, callback) {
71+
var tests = [
72+
'pubsub.topics.attachSubscription',
73+
'pubsub.topics.publish',
74+
'pubsub.topics.update'
75+
];
76+
77+
// Retrieve the IAM policy for the provided topic
78+
topic.iam.testPermissions(tests, callback);
79+
}
80+
// [END test_topic_permissions]
81+
82+
// [START test_subscription_permissions]
83+
function testSubscriptionPermissions(subscription, callback) {
84+
var tests = [
85+
'pubsub.subscriptions.consume',
86+
'pubsub.subscriptions.update'
87+
];
88+
89+
// Retrieve the IAM policy for the provided subscription
90+
subscription.iam.testPermissions(tests, callback);
91+
}
92+
// [END test_subscription_permissions]
93+
94+
exports.getTopicPolicy = getTopicPolicy;
95+
exports.getSubscriptionPolicy = getSubscriptionPolicy;
96+
exports.setTopicPolicy = setTopicPolicy;
97+
exports.setSubscriptionPolicy = setSubscriptionPolicy;
98+
exports.testTopicPermissions = testTopicPermissions;
99+
exports.testSubscriptionPermissions = testSubscriptionPermissions;
100+
exports.runSample = runSample;
101+
102+
function runSample(callback) {
103+
var _subscription;
104+
var _topic;
105+
// Gather responses
106+
var responses = [];
107+
async.waterfall([
108+
function (cb) {
109+
console.log('create topic...');
110+
createTopic(cb);
111+
},
112+
function (topic, apiResponse, cb) {
113+
_topic = topic;
114+
responses.push([topic, apiResponse]);
115+
console.log('created topic');
116+
console.log('get topic IAM policy...');
117+
getTopicPolicy(topic, cb);
118+
},
119+
function (policy, apiResponse, cb) {
120+
responses.push([policy, apiResponse]);
121+
console.log('got topic policy', policy);
122+
// IAM server is down?
123+
// console.log('updating topic policy...');
124+
// setTopicPolicy(_topic, cb);
125+
// },
126+
// function (policy, apiResponse, cb) {
127+
// responses.push([policy, apiResponse]);
128+
// console.log('updated topic policy', policy);
129+
console.log('testing topic permissions...');
130+
testTopicPermissions(_topic, cb);
131+
},
132+
function (permissions, apiResponse, cb) {
133+
responses.push([permissions, apiResponse]);
134+
console.log('tested topic permissions', permissions);
135+
console.log('create subscription...');
136+
subscribe(cb);
137+
},
138+
function (subscription, apiResponse, cb) {
139+
_subscription = subscription;
140+
responses.push([subscription, apiResponse]);
141+
console.log('created subscription');
142+
console.log('get subscription IAM policy...');
143+
getSubscriptionPolicy(subscription, cb);
144+
},
145+
function (policy, apiResponse, cb) {
146+
responses.push([policy, apiResponse]);
147+
console.log('got subscription policy', policy);
148+
// IAM server is down?
149+
// console.log('updating subscription policy...');
150+
// setSubscriptionPolicy(_subscription, cb);
151+
// },
152+
// function (policy, apiResponse, cb) {
153+
// responses.push([policy, apiResponse]);
154+
// console.log('updated subscription policy', policy);
155+
console.log('testing subscription permissions...');
156+
testSubscriptionPermissions(_subscription, cb);
157+
},
158+
function (permissions, apiResponse, cb) {
159+
responses.push([permissions, apiResponse]);
160+
console.log('tested subscription permissions', permissions);
161+
console.log('deleting subscription...');
162+
_subscription.delete(cb);
163+
},
164+
function (apiResponse, cb) {
165+
console.log('deleted subscription');
166+
console.log('deleting topic...');
167+
_topic.delete(cb);
168+
}
169+
], function (err) {
170+
if (err) {
171+
console.error(err);
172+
} else {
173+
console.log('deleted topic');
174+
}
175+
if (typeof callback === 'function') {
176+
callback(err, responses);
177+
}
178+
});
179+
}
180+
181+
if (module === require.main) {
182+
runSample();
183+
}

pubsub/package.json

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"name": "nodejs-docs-samples-pubsub",
3+
"description": "Node.js samples for Google Cloud Pub/Sub.",
4+
"version": "0.0.1",
5+
"private": true,
6+
"license": "Apache Version 2.0",
7+
"engines": {
8+
"node": ">=0.10.x"
9+
},
10+
"scripts": {
11+
"iam": "node iam.js",
12+
"subscription": "node subscription.js"
13+
},
14+
"dependencies": {
15+
"gcloud": "^0.27.0"
16+
}
17+
}

0 commit comments

Comments
 (0)