8000 Added auto token refresh if available · oauth-io/sdk-node@5244e19 · GitHub
[go: up one dir, main page]

Skip to content

Commit 5244e19

Browse files
committed
Added auto token refresh if available
1 parent ff0f4fa commit 5244e19

File tree

1 file changed

+41
-7
lines changed

1 file changed

+41
-7
lines changed

coffee/lib/authentication.coffee

Lines changed: 41 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,44 @@ Q = require 'q'
33

44
module.exports = (cache, requestio) ->
55
a = {
6-
refresh_tokens: (credentials, force) ->
6+
refresh_tokens: (credentials, session, force) ->
77
defer = Q.defer()
8-
# call refresher here
9-
defer.resolve credentials
10-
# set credentials.refreshed to true if refreshed
8+
credentials.refreshed = false
9+
now = new Date()
10+
if credentials.refresh_token and ((credentials.expires and now.getTime() > credentials.expires) or force)
11+
request.post {
12+
url: cache.oauthd_url + '/auth/refresh_token/' + credentials.provider,
13+
form: {
14+
token: credentials.refresh_token,
15+
key: cache.public_key,
16+
secret: cache.secret_key
17+
}
18+
}, (e, r, body) ->
19+
if (e)
20+
defer.reject e
21+
return defer.promise
22+
else
23+
if typeof body is "string"
24+
try
25+
body = JSON.parse body
26+
catch e
27+
defer.reject e
< 10000 /td>28+
console.log 'BODY', body
29+
if typeof body == "object" and body.access_token and body.expires_in
30+
credentials.expires = new Date().getTime() + body.expires_in * 1000
31+
for k of body
32+
credentials[k] = body[k]
33+
console.log 'NEW CREDS', credentials
34+
if (session?)
35+
session.oauth = session.oauth || {}
36+
session.oauth[credentials.provider] = credentials
37+
credentials.refreshed = true
38+
credentials.last_refresh = new Date().getTime()
39+
defer.resolve credentials
40+
else
41+
defer.resolve credentials
42+
else
43+
defer.resolve credentials
1144
return defer.promise
1245
auth: (provider, session, opts) ->
1346
defer = Q.defer()
@@ -16,13 +49,13 @@ module.exports = (cache, requestio) ->
1649
return a.authenticate(opts.code, session)
1750

1851
if opts?.credentials
19-
a.refresh_tokens(opts.credentials, opts?.force_refresh)
52+
a.refresh_tokens(opts.credentials, session, opts?.force_refresh)
2053
.then (credentials) ->
2154
defer.resolve(a.construct_request_object(credentials))
2255
return defer.promise
2356
if (not opts?.credentials) and (not opts?.code)
2457
if session.oauth[provider]
25-
a.refresh_tokens(session.oauth[provider], opts?.force_refresh)
58+
a.refresh_tokens(session.oauth[provider], session, opts?.force_refresh)
2659
.then (credentials) ->
2760
defer.resolve(a.construct_request_object(credentials))
2861
else
@@ -77,7 +110,8 @@ module.exports = (cache, requestio) ->
77110
return
78111
if (not session?.csrf_tokens? or response.state not in session.csrf_tokens)
79112
defer.reject new Error 'State is not matching'
80-
113+
if response.expires_in
114+
response.expires = new Date().getTime() + response.expires_in * 1000
81115
response = a.construct_request_object response
82116
if (session?)
83117
session.oauth = session.oauth || {}

0 commit comments

Comments
 (0)
0