Skip to content

Commit 70ad9e9

Browse files
Gyranflovilmart
authored andcommitted
Add request ip to request object (#4265)
* add the client ip to the request config object * add the config ip to the trigger request object * add the config ip to the functions request object * add tests * remove log * remove log
1 parent 9376b4d commit 70ad9e9

File tree

4 files changed

+109
-3
lines changed

4 files changed

+109
-3
lines changed

spec/CloudCode.spec.js

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1239,6 +1239,17 @@ describe('Cloud Code', () => {
12391239
});
12401240
});
12411241

1242+
describe('cloud functions', () => {
1243+
it('Should have request ip', (done) => {
1244+
Parse.Cloud.define('myFunction', (req, res) => {
1245+
expect(req.ip).toBeDefined();
1246+
res.success("success");
1247+
});
1248+
1249+
Parse.Cloud.run('myFunction', {}).then(() => done());
1250+
});
1251+
});
1252+
12421253
describe('beforeSave hooks', () => {
12431254
it('should have request headers', (done) => {
12441255
Parse.Cloud.beforeSave('MyObject', (req, res) => {
@@ -1250,6 +1261,17 @@ describe('beforeSave hooks', () => {
12501261
const myObject = new MyObject();
12511262
myObject.save().then(() => done());
12521263
});
1264+
1265+
it('should have request ip', (done) => {
1266+
Parse.Cloud.beforeSave('MyObject', (req, res) => {
1267+
expect(req.ip).toBeDefined();
1268+
res.success();
1269+
});
1270+
1271+
const MyObject = Parse.Object.extend('MyObject');
1272+
const myObject = new MyObject();
1273+
myObject.save().then(() => done());
1274+
});
12531275
});
12541276

12551277
describe('afterSave hooks', () => {
@@ -1263,6 +1285,17 @@ describe('afterSave hooks', () => {
12631285
myObject.save()
12641286
.then(() => done());
12651287
});
1288+
1289+
it('should have request ip', (done) => {
1290+
Parse.Cloud.afterSave('MyObject', (req, res) => {
1291+
expect(req.ip).toBeDefined();
1292+
res.success();
1293+
});
1294+
1295+
const MyObject = Parse.Object.extend('MyObject');
1296+
const myObject = new MyObject();
1297+
myObject.save().then(() => done());
1298+
});
12661299
});
12671300

12681301
describe('beforeDelete hooks', () => {
@@ -1278,6 +1311,19 @@ describe('beforeDelete hooks', () => {
12781311
.then(myObj => myObj.destroy())
12791312
.then(() => done());
12801313
});
1314+
1315+
it('should have request ip', (done) => {
1316+
Parse.Cloud.beforeDelete('MyObject', (req, res) => {
1317+
expect(req.ip).toBeDefined();
1318+
res.success();
1319+
});
1320+
1321+
const MyObject = Parse.Object.extend('MyObject');
1322+
const myObject = new MyObject();
1323+
myObject.save()
1324+
.then(myObj => myObj.destroy())
1325+
.then(() => done());
1326+
});
12811327
});
12821328

12831329
describe('afterDelete hooks', () => {
@@ -1292,6 +1338,18 @@ describe('afterDelete hooks', () => {
12921338
.then(myObj => myObj.destroy())
12931339
.then(() => done());
12941340
});
1341+
1342+
it('should have request ip', (done) => {
1343+
Parse.Cloud.afterDelete('MyObject', (req) => {
1344+
expect(req.ip).toBeDefined();
1345+
});
1346+
1347+
const MyObject = Parse.Object.extend('MyObject');
1348+
const myObject = new MyObject();
1349+
myObject.save()
1350+
.then(myObj => myObj.destroy())
1351+
.then(() => done());
1352+
});
12951353
});
12961354

12971355
describe('beforeFind hooks', () => {
@@ -1448,6 +1506,26 @@ describe('beforeFind hooks', () => {
14481506
})
14491507
.then(() => done());
14501508
});
1509+
1510+
it('should have request ip', (done) => {
1511+
Parse.Cloud.beforeFind('MyObject', (req) => {
1512+
expect(req.ip).toBeDefined();
1513+
});
1514+
1515+
const MyObject = Parse.Object.extend('MyObject');
1516+
const myObject = new MyObject();
1517+
myObject.save()
1518+
.then((myObj) => {
1519+
const query = new Parse.Query('MyObject');
1520+
query.equalTo('objectId', myObj.id);
1521+
return Promise.all([
1522+
query.get(myObj.id),
1523+
query.first(),
1524+
query.find(),
1525+
]);
1526+
})
1527+
.then(() => done());
1528+
});
14511529
});
14521530

14531531
describe('afterFind hooks', () => {
@@ -1667,6 +1745,27 @@ describe('afterFind hooks', () => {
16671745
.then(() => done());
16681746
});
16691747

1748+
it('should have request ip', (done) => {
1749+
Parse.Cloud.afterFind('MyObject', (req, res) => {
1750+
expect(req.ip).toBeDefined();
1751+
res.success();
1752+
});
1753+
1754+
const MyObject = Parse.Object.extend('MyObject');
1755+
const myObject = new MyObject();
1756+
myObject.save()
1757+
.then((myObj) => {
1758+
const query = new Parse.Query('MyObject');
1759+
query.equalTo('objectId', myObj.id);
1760+
return Promise.all([
1761+
query.get(myObj.id),
1762+
query.first(),
1763+
query.find(),
1764+
]);
1765+
})
1766+
.then(() => done());
1767+
});
1768+
16701769
it('should validate triggers correctly', () => {
16711770
expect(() => {
16721771
Parse.Cloud.beforeSave('_Session', () => {});

src/Routers/FunctionsRouter.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ export class FunctionsRouter extends PromiseRouter {
5454
const request = {
5555
params: params,
5656
log: req.config.loggerController,
57-
headers: req.headers,
57+
headers: req.config.headers,
58+
ip: req.config.ip,
5859
jobName
5960
};
6061
const status = {
@@ -111,7 +112,8 @@ export class FunctionsRouter extends PromiseRouter {
111112
user: req.auth && req.auth.user,
112113
installationId: req.info.installationId,
113114
log: req.config.loggerController,
114-
headers: req.headers,
115+
headers: req.config.headers,
116+
ip: req.config.ip,
115117
functionName
116118
};
117119

src/middlewares.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,12 +106,15 @@ export function handleParseHeaders(req, res, next) {
106106
req.body = new Buffer(base64, 'base64');
107107
}
108108

109+
const clientIp = getClientIp(req);
110+
109111
info.app = AppCache.get(info.appId);
110112
req.config = new Config(info.appId, mount);
111113
req.config.headers = req.headers || {};
114+
req.config.ip = clientIp;
112115
req.info = info;
113116

114-
if (info.masterKey && req.config.masterKeyIps && req.config.masterKeyIps.length !== 0 && req.config.masterKeyIps.indexOf(getClientIp(req)) === -1) {
117+
if (info.masterKey && req.config.masterKeyIps && req.config.masterKeyIps.length !== 0 && req.config.masterKeyIps.indexOf(clientIp) === -1) {
115118
return invalidRequest(req, res);
116119
}
117120

src/triggers.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ export function getRequestObject(triggerType, auth, parseObject, originalParseOb
144144
master: false,
145145
log: config.loggerController,
146146
headers: config.headers,
147+
ip: config.ip,
147148
};
148149

149150
if (originalParseObject) {
@@ -176,6 +177,7 @@ export function getRequestQueryObject(triggerType, auth, query, count, config, i
176177
log: config.loggerController,
177178
isGet,
178179
headers: config.headers,
180+
ip: config.ip,
179181
};
180182

181183
if (!auth) {

0 commit comments

Comments
 (0)