Skip to content

No IP address in request when directAccess: true #8806

Open
@mtrezza

Description

@mtrezza

New Issue Checklist

Issue Description

When setting the Parse Server option directAccess: true, the request object in triggers have no IP address set.

This could be considered a characteristic of the direct access feature, but there are a few test cases that expect the IP address to be set, so it should probably be considered a bug.

describe('cloud functions', () => {
it('Should have request ip', done => {
Parse.Cloud.define('myFunction', req => {
expect(req.ip).toBeDefined();
return 'success';
});
Parse.Cloud.run('myFunction', {}).then(() => done());
});
});

it('should have request ip', done => {
Parse.Cloud.afterSave('MyObject', req => {
expect(req.ip).toBeDefined();
});
const MyObject = Parse.Object.extend('MyObject');
const myObject = new MyObject();
myObject.save().then(() => done());
});

it('should have request ip', done => {
Parse.Cloud.beforeFind('MyObject', req => {
expect(req.ip).toBeDefined();
});
const MyObject = Parse.Object.extend('MyObject');
const myObject = new MyObject();
myObject
.save()
.then(myObj => {
const query = new Parse.Query('MyObject');
query.equalTo('objectId', myObj.id);
return Promise.all([query.get(myObj.id), query.first(), query.find()]);
})
.then(() => done());
});

All these tests pass, only because the test suite does not actually use the ParseServerRESTController because the test helper always sets the normal REST controller:

Parse.CoreManager.setRESTController(RESTController);

See #8808 for context about this override.

Steps to reproduce

  1. Set Parse Server option directAccess: true.
  2. Save a Parse.User.
  3. The request object in Parse.Cloud.beforeSave('_User', async request => { ... }); has the property request.ip set to undefined.

Actual Outcome

request.ip set to undefined

Expected Outcome

request.ip set to localhost, e.g. 127.0.0.1 in IPv4 environments or ::1 in IPv6 environments.

Possibly just set the IP with a simple:

function getLoopbackAddress() {
  const isIPv6Supported = os.networkInterfaces().lo0?.some(iface => iface.family === 'IPv6');
  return isIPv6Supported ? '::1' : '127.0.0.1';
}

Environment

Server

  • Parse Server version: 6.3.1

Metadata

Metadata

Assignees

No one assigned

    Labels

    type:bugImpaired feature or lacking behavior that is likely assumed

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions