Skip to content

Commit b8d458e

Browse files
authored
Merge pull request #35 from amkirwan/release-2.4-beta
Release 2.4 beta
2 parents c01e2ca + ed9dc38 commit b8d458e

File tree

8 files changed

+128
-75
lines changed

8 files changed

+128
-75
lines changed

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ language: node_js
55
node_js:
66
- "6.11"
77

8-
sudo: false
8+
sudo: required
99

1010
cache:
1111
directories:

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Changelog Ember-OAuth2
22

3+
## v2.0.4-beta
4+
(Full Changelog)[https://github.com/amkirwan/ember-oauth2/compare/v2.0.3-beta...v2.0.4-beta]
5+
- Move ember-cli-babel to dev dependencies
6+
37
## v2.0.3-beta
48
(Full Changelog)[https://github.com/amkirwan/ember-oauth2/compare/v2.0.2-beta...v2.0.3-beta]
59
- fix typo in scope

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ JavaScript library for using OAuth 2.0 Implicit Grant flow (Client-Side Flow) or
88

99
This creates an OAuth 2.0 Ember object class for handling authentication with OAuth 2.0 providers.
1010

11-
Current Version: **[2.0.3-beta](https://github.com/amkirwan/ember-oauth2/releases/tag/v2.0.3-beta)**
11+
Current Version: **[2.0.4-beta](https://github.com/amkirwan/ember-oauth2/releases/tag/v2.0.4-beta)**
1212

1313
The EmberCli addon [EmberTokenAuth](https://github.com/amkirwan/ember-token-auth) demonstrates how to use Ember-OAuth2 library for authentication.
1414

addon/services/ember-oauth2.js

Lines changed: 109 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
import Ember from 'ember';
22

33
/**
4-
* @overview OAuth2 addon for Emberjs that stores tokens in the browsers localStorage
5-
* @license Licensed under MIT license
6-
* See https://raw.github.com/amkirwan/ember-oauth2/master/LICENSE
7-
* @version 2.0.3-beta
8-
*
9-
* @module ember-oauth2
10-
* @class ember-oauth2
11-
*/
4+
* @overview OAuth2 addon for Emberjs that stores tokens in the browsers localStorage
5+
* @license Licensed under MIT license
6+
* See https://raw.github.com/amkirwan/ember-oauth2/master/LICENSE
7+
* @version 2.0.4-beta
8+
*
9+
* @module ember-oauth2
10+
* @class ember-oauth2
11+
*/
1212
export default Ember.Service.extend(Ember.Evented, {
13-
VERSION: '2.0.3-beta',
13+
VERSION: '2.0.4-beta',
1414
/**
1515
* initialize with the providerId to find in
1616
* EmberENV['ember-oauth2'] config
@@ -38,7 +38,9 @@ export default Ember.Service.extend(Ember.Evented, {
3838
this.set('providerId', providerId);
3939
// if the provider id doesn't exist in the config throw an error
4040
if (!this.get('config')[this.get('providerId')]) {
41-
throw new Error(`Cannot find the providerId: ${this.get('providerId')} in the config.`);
41+
throw new Error(
42+
`Cannot find the providerId: ${this.get('providerId')} in the config.`
43+
);
4244
} else {
4345
this.set('providerConfig', this.get('config')[this.get('providerId')]);
4446
this.setProperties(this.providerConfig);
@@ -53,10 +55,18 @@ export default Ember.Service.extend(Ember.Evented, {
5355
* @return {Promise}
5456
*/
5557
authorize() {
56-
if (!this.get('providerId')) { throw new Error('No provider id given.'); }
57-
if (!this.get('clientId')) { throw new Error('No client id given.'); }
58-
if (!this.get('authBaseUri')) { throw new Error('No auth base uri given.'); }
59-
if (!this.get('redirectUri')) { throw new Error('No redirect uri given.'); }
58+
if (!this.get('providerId')) {
59+
throw new Error('No provider id given.');
60+
}
61+
if (!this.get('clientId')) {
62+
throw new Error('No client id given.');
63+
}
64+
if (!this.get('authBaseUri')) {
65+
throw new Error('No auth base uri given.');
66+
}
67+
if (!this.get('redirectUri')) {
68+
throw new Error('No redirect uri given.');
69+
}
6070
this.clearStates();
6171
this.saveState(this.requestObj());
6272
return this.openWindow(this.authUri());
@@ -72,10 +82,15 @@ export default Ember.Service.extend(Ember.Evented, {
7282
*/
7383
openWindow(url) {
7484
let dialog = window.open(url, 'Authorize', 'height=600, width=450');
75-
if (window.focus && dialog) { dialog.focus(); }
85+
if (window.focus && dialog) {
86+
dialog.focus();
87+
}
7688
return new Ember.RSVP.Promise(function(resolve, reject) {
77-
if (dialog) { resolve(dialog); }
78-
else { reject(new Error('Opening dialog login window failed.')); }
89+
if (dialog) {
90+
resolve(dialog);
91+
} else {
92+
reject(new Error('Opening dialog login window failed.'));
93+
}
7994
});
8095
},
8196

@@ -96,22 +111,25 @@ export default Ember.Service.extend(Ember.Evented, {
96111
if (self.get('responseType') === 'token') {
97112
self.saveToken(self.generateToken(params));
98113
// verify the token on the client end
99-
self.verifyToken().then(function(result) {
100-
/*jshint unused:false*/
101-
self.trigger('success');
102-
}, function(error) {
103-
/*jshint unused:false*/
104-
self.removeToken();
105-
self.trigger('error', 'Error: verifying token', params);
106-
});
114+
self.verifyToken().then(
115+
function(result) {
116+
/*jshint unused:false*/
117+
self.trigger('success');
118+
},
119+
function(error) {
120+
/*jshint unused:false*/
121+
self.removeToken();
122+
self.trigger('error', 'Error: verifying token', params);
123+
}
124+
);
107125
} else {
108126
self.trigger('success', params.code);
109127
}
110128
} else {
111129
self.trigger('error', 'Error: authorization', params);
112130
}
113131

114-
if (callback && typeof(callback) === 'function') {
132+
if (callback && typeof callback === 'function') {
115133
callback();
116134
}
117135
}),
@@ -122,8 +140,10 @@ export default Ember.Service.extend(Ember.Evented, {
122140
@return {Boolean} True if success false otherwise
123141
*/
124142
authSuccess: function(params) {
125-
return (this.get('responseType') === 'token' && params.access_token) ||
126-
(this.get('responseType') === 'code' && params.code);
143+
return (
144+
(this.get('responseType') === 'token' && params.access_token) ||
145+
(this.get('responseType') === 'code' && params.code)
146+
);
127147
},
128148

129149
/**
@@ -189,13 +209,17 @@ export default Ember.Service.extend(Ember.Evented, {
189209
* @return {Boolean} Will return true if the states false if they do not match
190210
*/
191211
checkState: function(state) {
192-
if (!state) { return false; }
212+
if (!state) {
213+
return false;
214+
}
193215
// check the state returned with state saved in localstorage
194216
if (state === this.readState().state) {
195217
this.removeState(this.stateKeyName());
196218
return true;
197219
} else {
198-
Ember.Logger.warn("State returned from the server did not match the local saved state.");
220+
Ember.Logger.warn(
221+
'State returned from the server did not match the local saved state.'
222+
);
199223
return false;
200224
}
201225
},
@@ -230,12 +254,18 @@ export default Ember.Service.extend(Ember.Evented, {
230254
*/
231255
authUri: function() {
232256
var uri = this.get('authBaseUri');
233-
uri += '?response_type=' + encodeURIComponent(this.get('responseType')) +
234-
'&redirect_uri=' + encodeURIComponent(this.get('redirectUri')) +
235-
'&client_id=' + encodeURIComponent(this.get('clientId')) +
236-
'&state=' + encodeURIComponent(this.get('state'));
257+
uri +=
258+
'?response_type=' +
259+
encodeURIComponent(this.get('responseType')) +
260+
'&redirect_uri=' +
261+
encodeURIComponent(this.get('redirectUri')) +
262+
'&client_id=' +
263+
encodeURIComponent(this.get('clientId')) +
264+
'&state=' +
265+
encodeURIComponent(this.get('state'));
237266
if (this.get('scope')) {
238-
uri += '&scope=' + encodeURIComponent(this.get('scope')).replace('%20', '+');
267+
uri +=
268+
'&scope=' + encodeURIComponent(this.get('scope')).replace('%20', '+');
239269
}
240270
return uri;
241271
},
@@ -252,7 +282,9 @@ export default Ember.Service.extend(Ember.Evented, {
252282
request.providerId = this.get('providerId');
253283
request.clientId = this.get('clientId');
254284
request.state = this.generateState();
255-
if (this.get('scope')) { request.scope = this.get('scope'); }
285+
if (this.get('scope')) {
286+
request.scope = this.get('scope');
287+
}
256288
return request;
257289
},
258290

@@ -261,27 +293,30 @@ export default Ember.Service.extend(Ember.Evented, {
261293
* @param {Object} requestObj Properties of the request state to save in localStorage
262294
*/
263295
saveState: function(requestObj) {
264-
window.localStorage.setItem(this.stateKeyName(), JSON.stringify(requestObj));
296+
window.localStorage.setItem(
297+
this.stateKeyName(),
298+
JSON.stringify(requestObj)
299+
);
265300
},
266301

267302
/**
268-
* Remove any states from localStorage if they exist
269-
* @method clearStates
270-
* @return {Array} Keys used to remove states from localStorage
271-
*/
303+
* Remove any states from localStorage if they exist
304+
* @method clearStates
305+
* @return {Array} Keys used to remove states from localStorage
306+
*/
272307
clearStates: function() {
273-
let regex = new RegExp( '^' + this.get('statePrefix') + '-.*', 'g');
308+
let regex = new RegExp('^' + this.get('statePrefix') + '-.*', 'g');
274309

275310
let name;
276311
let toRemove = [];
277-
for(let i = 0, l = window.localStorage.length; i < l; i++) {
312+
for (let i = 0, l = window.localStorage.length; i < l; i++) {
278313
name = window.localStorage.key(i);
279314
if (name.match(regex)) {
280315
toRemove.push(name);
281316
}
282317
}
283318

284-
for(let j = 0, len = toRemove.length; j < len; j++) {
319+
for (let j = 0, len = toRemove.length; j < len; j++) {
285320
name = toRemove[j];
286321
this.removeState(name);
287322
}
@@ -311,7 +346,9 @@ export default Ember.Service.extend(Ember.Evented, {
311346
*/
312347
readState: function() {
313348
var stateObj = JSON.parse(window.localStorage.getItem(this.stateKeyName()));
314-
if (!stateObj) { return false; }
349+
if (!stateObj) {
350+
return false;
351+
}
315352

316353
return stateObj;
317354
},
@@ -322,8 +359,9 @@ export default Ember.Service.extend(Ember.Evented, {
322359
*/
323360
uuid() {
324361
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
325-
var r = Math.random()*16|0, v = c === 'x' ? r : (r&0x3|0x8);
326-
return v.toString(16);
362+
var r = (Math.random() * 16) | 0,
363+
v = c === 'x' ? r : (r & 0x3) | 0x8;
364+
return v.toString(16);
327365
});
328366
},
329367

@@ -332,7 +370,7 @@ export default Ember.Service.extend(Ember.Evented, {
332370
* @return {Number} The current time in seconds rounded
333371
*/
334372
now() {
335-
return Math.round(new Date().getTime()/1000.0);
373+
return Math.round(new Date().getTime() / 1000.0);
336374
},
337375

338376
/**
@@ -342,7 +380,9 @@ export default Ember.Service.extend(Ember.Evented, {
342380
* @return {String} The state key name used for localstorage
343381
*/
344382
stateKeyName() {
345-
if (!this.get('state')) { this.generateState(); }
383+
if (!this.get('state')) {
384+
this.generateState();
385+
}
346386
return this.get('statePrefix') + '-' + this.get('state');
347387
},
348388

@@ -351,7 +391,9 @@ export default Ember.Service.extend(Ember.Evented, {
351391
* @return {String} The state
352392
*/
353393
generateState(clear = false) {
354-
if (!this.get('state') || clear === true) { this.set('state', this.uuid()); }
394+
if (!this.get('state') || clear === true) {
395+
this.set('state', this.uuid());
396+
}
355397
return this.get('state');
356398
},
357399

@@ -361,8 +403,12 @@ export default Ember.Service.extend(Ember.Evented, {
361403
*/
362404
getToken: function() {
363405
var token = JSON.parse(window.localStorage.getItem(this.tokenKeyName()));
364-
if (!token) { return null; }
365-
if (!token.access_token) { return null; }
406+
if (!token) {
407+
return null;
408+
}
409+
if (!token.access_token) {
410+
return null;
411+
}
366412
return token;
367413
},
368414

@@ -372,7 +418,9 @@ export default Ember.Service.extend(Ember.Evented, {
372418
*/
373419
getAccessToken: function() {
374420
var token = this.getToken();
375-
if (!token) { return null; }
421+
if (!token) {
422+
return null;
423+
}
376424
return token.access_token;
377425
},
378426

@@ -390,7 +438,7 @@ export default Ember.Service.extend(Ember.Evented, {
390438
* @method expiresIn
391439
* @param {String} expires lifetime left of token in seconds
392440
* @return {Number} When the token expires in seconds.
393-
*/
441+
*/
394442
expiresIn: function(expires) {
395443
return this.now() + parseInt(expires, 10);
396444
},
@@ -401,7 +449,9 @@ export default Ember.Service.extend(Ember.Evented, {
401449
*/
402450
accessTokenIsExpired: function() {
403451
let token = this.getToken();
404-
if (!token) { return true; }
452+
if (!token) {
453+
return true;
454+
}
405455
if (this.now() >= token.expires_in) {
406456
return true;
407457
} else {
@@ -415,8 +465,10 @@ export default Ember.Service.extend(Ember.Evented, {
415465
*/
416466
expireAccessToken: function() {
417467
var token = this.getToken();
418-
if (!token) { return null; }
468+
if (!token) {
469+
return null;
470+
}
419471
token.expires_in = 0;
420472
this.saveToken(token);
421-
}
473+
},
422474
});

bower.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "ember-oauth2",
3-
"version": "2.0.3-beta",
3+
"version": "2.0.4-beta",
44
"homepage": "https://github.com/amkirwan/ember-oauth2",
55
"authors": [
66
"Anthony Kirwan <[email protected]>"

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "ember-oauth2",
3-
"version": "2.0.3-beta",
3+
"version": "2.0.4-beta",
44
"description": "OAuth2 library for Emberjs that stores tokens in the browsers localStorage",
55
"homepage": "https://github.com/amkirwan/ember-ouath2",
66
"directories": {

0 commit comments

Comments
 (0)