Skip to content

Commit 738a730

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

4 files changed

Lines changed: 432 additions & 0 deletions

File tree

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: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
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+
101+
if (module === require.main) {
102+
var _subscription;
103+
var _topic;
104+
async.waterfall([
105+
function (cb) {
106+
console.log('create topic...');
107+
createTopic(cb);
108+
},
109+
function (topic, apiResponse, cb) {
110+
_topic = topic;
111+
console.log('created topic');
112+
console.log('get topic IAM policy...');
113+
getTopicPolicy(topic, cb);
114+
},
115+
function (policy, apiResponse, cb) {
116+
console.log('got topic policy', policy);
117+
// IAM server is down?
118+
// console.log('updating topic policy...');
119+
// setTopicPolicy(_topic, cb);
120+
// },
121+
// function (policy, apiResponse, cb) {
122+
// console.log('updated topic policy', policy);
123+
console.log('testing topic permissions...');
124+
testTopicPermissions(_topic, cb);
125+
},
126+
function (permissions, apiResponse, cb) {
127+
console.log('tested topic permissions', permissions);
128+
console.log('create subscription...');
129+
subscribe(cb);
130+
},
131+
function (subscription, apiResponse, cb) {
132+
_subscription = subscription;
133+
console.log('created subscription');
134+
console.log('get subscription IAM policy...');
135+
getSubscriptionPolicy(subscription, cb);
136+
},
137+
function (policy, apiResponse, cb) {
138+
console.log('got subscription policy', policy);
139+
// IAM server is down?
140+
// console.log('updating subscription policy...');
141+
// setSubscriptionPolicy(_subscription, cb);
142+
// },
143+
// function (policy, apiResponse, cb) {
144+
// console.log('updated subscription policy', policy);
145+
console.log('testing subscription permissions...');
146+
testSubscriptionPermissions(_subscription, cb);
147+
},
148+
function (permissions, apiResponse, cb) {
149+
console.log('tested subscription permissions', permissions);
150+
console.log('deleting subscription...');
151+
_subscription.delete(cb);
152+
},
153+
function (apiResponse, cb) {
154+
console.log('deleted subscription');
155+
console.log('deleting topic...');
156+
_topic.delete(cb);
157+
}
158+
], function (err) {
159+
if (err) {
160+
console.error(err);
161+
} else {
162+
console.log('deleted topic');
163+
}
164+
});
165+
}

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)