@@ -3,11 +3,44 @@ Q = require 'q'
3
3
4
4
module .exports = (cache , requestio ) ->
5
5
a = {
6
- refresh_tokens : (credentials , force ) ->
6
+ refresh_tokens : (credentials , session , force ) ->
7
7
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
11
44
return defer .promise
12
45
auth : (provider , session , opts ) ->
13
46
defer = Q .defer ()
@@ -16,13 +49,13 @@ module.exports = (cache, requestio) ->
16
49
return a .authenticate (opts .code , session)
17
50
18
51
if opts ? .credentials
19
- a .refresh_tokens (opts .credentials , opts ? .force_refresh )
52
+ a .refresh_tokens (opts .credentials , session, opts ? .force_refresh )
20
53
.then (credentials) ->
21
54
defer .resolve (a .construct_request_object (credentials))
22
55
return defer .promise
23
56
if (not opts ? .credentials ) and (not opts ? .code )
24
57
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 )
26
59
.then (credentials) ->
27
60
defer .resolve (a .construct_request_object (credentials))
28
61
else
@@ -77,7 +110,8 @@ module.exports = (cache, requestio) ->
77
110
return
78
111
if (not session ? .csrf_tokens ? or response .state not in session .csrf_tokens )
79
112
defer .reject new Error ' State is not matching'
80
-
113
+ if response .expires_in
114
+ response .expires = new Date ().getTime () + response .expires_in * 1000
81
115
response = a .construct_request_object response
82
116
if (session? )
83
117
session .oauth = session .oauth || {}
0 commit comments