Skip to content

Commit 6708261

Browse files
sebasjmdplewis
authored andcommitted
Add support to secured endpoints throught Authorization header (#358)
* Add support to secured endpoints throught Authorization header * Adding the ability to set AUTH_TYPE * clean up * improve coverage
1 parent 1257623 commit 6708261

File tree

5 files changed

+63
-0
lines changed

5 files changed

+63
-0
lines changed

src/CoreManager.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,8 @@ const config: Config & { [key: string]: mixed } = {
165165
!process.versions.electron),
166166
REQUEST_ATTEMPT_LIMIT: 5,
167167
SERVER_URL: 'https://api.parse.com/1',
168+
SERVER_AUTH_TYPE: null,
169+
SERVER_AUTH_TOKEN: null,
168170
LIVEQUERY_SERVER_URL: null,
169171
VERSION: 'js' + require('../package.json').version,
170172
APPLICATION_ID: null,

src/Parse.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,35 @@ Object.defineProperty(Parse, 'serverURL', {
127127
CoreManager.set('SERVER_URL', value);
128128
}
129129
});
130+
131+
/**
132+
* @member Parse.serverAuthToken
133+
* @type string
134+
* @static
135+
*/
136+
Object.defineProperty(Parse, 'serverAuthToken', {
137+
get() {
138+
return CoreManager.get('SERVER_AUTH_TOKEN');
139+
},
140+
set(value) {
141+
CoreManager.set('SERVER_AUTH_TOKEN', value);
142+
}
143+
});
144+
145+
/**
146+
* @member Parse.serverAuthType
147+
* @type string
148+
* @static
149+
*/
150+
Object.defineProperty(Parse, 'serverAuthType', {
151+
get() {
152+
return CoreManager.get('SERVER_AUTH_TYPE');
153+
},
154+
set(value) {
155+
CoreManager.set('SERVER_AUTH_TYPE', value);
156+
}
157+
});
158+
130159
/**
131160
* @member Parse.liveQueryServerURL
132161
* @type string

src/RESTController.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,9 @@ const RESTController = {
146146
headers['User-Agent'] = 'Parse/' + CoreManager.get('VERSION') +
147147
' (NodeJS ' + process.versions.node + ')';
148148
}
149+
if (CoreManager.get('SERVER_AUTH_TYPE') && CoreManager.get('SERVER_AUTH_TOKEN')) {
150+
headers['Authorization'] = CoreManager.get('SERVER_AUTH_TYPE') + ' ' + CoreManager.get('SERVER_AUTH_TOKEN');
151+
}
149152

150153
if(options && typeof options.progress === 'function') {
151154
if (xhr.upload) {

src/__tests__/Parse-test.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,16 @@ describe('Parse module', () => {
4646
expect(Parse.masterKey).toBe('789');
4747
});
4848

49+
it('can set auth type and token', () => {
50+
Parse.serverAuthType = 'bearer';
51+
expect(CoreManager.get('SERVER_AUTH_TYPE')).toBe('bearer');
52+
expect(Parse.serverAuthType).toBe('bearer');
53+
54+
Parse.serverAuthToken = 'some_token';
55+
expect(CoreManager.get('SERVER_AUTH_TOKEN')).toBe('some_token');
56+
expect(Parse.serverAuthToken).toBe('some_token');
57+
});
58+
4959
it('can set LocalDatastoreController', () => {
5060
const controller = {
5161
fromPinWithName: function() {},

src/__tests__/RESTController-test.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,25 @@ describe('RESTController', () => {
377377
);
378378
});
379379

380+
it('sends auth header when the auth type and token flags are set', async () => {
381+
CoreManager.set('SERVER_AUTH_TYPE', 'Bearer');
382+
CoreManager.set('SERVER_AUTH_TOKEN', 'some_random_token');
383+
const credentialsHeader = (header) => "Authorization" === header[0];
384+
const xhr = {
385+
setRequestHeader: jest.fn(),
386+
open: jest.fn(),
387+
send: jest.fn()
388+
};
389+
RESTController._setXHR(function() { return xhr; });
390+
RESTController.request('GET', 'classes/MyObject', {}, {});
391+
await flushPromises();
392+
expect(xhr.setRequestHeader.mock.calls.filter(credentialsHeader)).toEqual(
393+
[["Authorization", "Bearer some_random_token"]]
394+
);
395+
CoreManager.set('SERVER_AUTH_TYPE', null);
396+
CoreManager.set('SERVER_AUTH_TOKEN', null);
397+
});
398+
380399
it('reports upload progress of the AJAX request when callback is provided', (done) => {
381400
const xhr = mockXHR([{ status: 200, response: { success: true }}], {
382401
addEventListener: (name, callback) => {

0 commit comments

Comments
 (0)