Skip to content

Commit adea9f0

Browse files
committed
Add support to secured endpoints throught Authorization header
1 parent 2956dec commit adea9f0

File tree

4 files changed

+32
-1
lines changed

4 files changed

+32
-1
lines changed

src/CoreManager.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ var config: Config & { [key: string]: mixed } = {
145145
!process.versions.electron),
146146
REQUEST_ATTEMPT_LIMIT: 5,
147147
SERVER_URL: 'https://api.parse.com/1',
148+
CREDENTIALS: null,
148149
LIVEQUERY_SERVER_URL: null,
149150
VERSION: 'js' + require('../package.json').version,
150151
APPLICATION_ID: null,

src/Parse.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,14 @@ Object.defineProperty(Parse, 'serverURL', {
8080
CoreManager.set('SERVER_URL', value);
8181
}
8282
});
83+
Object.defineProperty(Parse, 'credentials', {
84+
get() {
85+
return CoreManager.get('CREDENTIALS');
86+
},
87+
set(value) {
88+
CoreManager.set('CREDENTIALS', value);
89+
}
90+
});
8391
Object.defineProperty(Parse, 'liveQueryServerURL', {
8492
get() {
8593
return CoreManager.get('LIVEQUERY_SERVER_URL');

src/RESTController.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,9 @@ const RESTController = {
132132
headers['User-Agent'] = 'Parse/' + CoreManager.get('VERSION') +
133133
' (NodeJS ' + process.versions.node + ')';
134134
}
135-
135+
if (CoreManager.get('CREDENTIALS')) {
136+
headers['Authorization'] = 'Bearer ' + CoreManager.get('CREDENTIALS');
137+
}
136138
xhr.open(method, url, true);
137139
for (var h in headers) {
138140
xhr.setRequestHeader(h, headers[h]);

src/__tests__/RESTController-test.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,4 +329,24 @@ describe('RESTController', () => {
329329
'Cannot use the Master Key, it has not been provided.'
330330
);
331331
});
332+
333+
it('sends credentials header when the config flag is set', () => {
334+
CoreManager.set('CREDENTIALS', 'some_random_token');
335+
var credentialsHeader = function(header){ return "Authorization" === header[0] }
336+
var xhr = {
337+
setRequestHeader: jest.genMockFn(),
338+
open: jest.genMockFn(),
339+
send: jest.genMockFn()
340+
};
341+
RESTController._setXHR(function() { return xhr; });
342+
RESTController.request('GET', 'classes/MyObject', {}, {});
343+
jest.runAllTicks();
344+
expect(xhr.setRequestHeader.mock.calls.filter(credentialsHeader)).toEqual(
345+
[["Authorization", "Bearer some_random_token"]]
346+
);
347+
console.log()
348+
CoreManager.set('CREDENTIALS', null); // Clean up
349+
});
350+
351+
332352
});

0 commit comments

Comments
 (0)