@@ -10,6 +10,7 @@ public static function addRoutes($routing)
1010 {
1111 $ routing ->get ('/client/request_token/authorization_code ' , array (new self (), 'requestTokenWithAuthCode ' ))->bind ('request_token_with_authcode ' );
1212 $ routing ->get ('/client/request_token/user_credentials ' , array (new self (), 'requestTokenWithUserCredentials ' ))->bind ('request_token_with_usercredentials ' );
13+ $ routing ->get ('/client/request_token/refresh_token ' , array (new self (), 'requestTokenWithRefreshToken ' ))->bind ('request_token_with_refresh_token ' );
1314
1415 }
1516
@@ -24,13 +25,17 @@ public function requestTokenWithAuthCode(Application $app)
2425
2526 $ code = $ app ['request ' ]->get ('code ' );
2627
28+ $ redirect_uri_params = array_filter (array (
29+ 'show_refresh_token ' => $ app ['request ' ]->get ('show_refresh_token ' ),
30+ ));
31+
2732 // exchange authorization code for access token
2833 $ query = array (
2934 'grant_type ' => 'authorization_code ' ,
3035 'code ' => $ code ,
3136 'client_id ' => $ config ['client_id ' ],
3237 'client_secret ' => $ config ['client_secret ' ],
33- 'redirect_uri ' => $ urlgen ->generate ('authorize_redirect ' , array () , true ),
38+ 'redirect_uri ' => $ urlgen ->generate ('authorize_redirect ' , $ redirect_uri_params , true ),
3439 );
3540
3641 // determine the token endpoint to call based on our config (do this somewhere else?)
@@ -43,7 +48,11 @@ public function requestTokenWithAuthCode(Application $app)
4348
4449 // if it is succesful, display the token in our app
4550 if (isset ($ json ['access_token ' ])) {
46- return $ twig ->render ('client/show_access_token.twig ' , array ('token ' => $ json ['access_token ' ]));
51+ if ($ app ['request ' ]->get ('show_refresh_token ' )) {
52+ return $ twig ->render ('client/show_refresh_token.twig ' , array ('response ' => $ json ));
53+ }
54+
55+ return $ twig ->render ('client/show_access_token.twig ' , array ('response ' => $ json ));
4756 }
4857
4958 return $ twig ->render ('client/failed_token_request.twig ' , array ('response ' => $ json ? $ json : $ response ));
@@ -80,7 +89,40 @@ public function requestTokenWithUserCredentials(Application $app)
8089
8190 // if it is succesful, display the token in our app
8291 if (isset ($ json ['access_token ' ])) {
83- return $ twig ->render ('client/show_access_token.twig ' , array ('token ' => $ json ['access_token ' ]));
92+ return $ twig ->render ('client/show_access_token.twig ' , array ('response ' => $ json ));
93+ }
94+
95+ return $ twig ->render ('client/failed_token_request.twig ' , array ('response ' => $ json ? $ json : $ response ));
96+ }
97+
98+ public function requestTokenWithRefreshToken (Application $ app )
99+ {
100+ $ twig = $ app ['twig ' ]; // used to render twig templates
101+ $ config = $ app ['parameters ' ]; // the configuration for the current oauth implementation
102+ $ urlgen = $ app ['url_generator ' ]; // generates URLs based on our routing
103+ $ http = $ app ['http_client ' ]; // simple class used to make http requests
104+
105+ $ refreshToken = $ app ['request ' ]->get ('refresh_token ' );
106+
107+ // exchange user credentials for access token
108+ $ query = array (
109+ 'grant_type ' => 'refresh_token ' ,
110+ 'client_id ' => $ config ['client_id ' ],
111+ 'client_secret ' => $ config ['client_secret ' ],
112+ 'refresh_token ' => $ refreshToken ,
113+ );
114+
115+ // determine the token endpoint to call based on our config (do this somewhere else?)
116+ $ grantRoute = $ config ['token_route ' ];
117+ $ endpoint = 0 === strpos ($ grantRoute , 'http ' ) ? $ grantRoute : $ urlgen ->generate ($ grantRoute , array (), true );
118+
119+ // make the token request via http and decode the json response
120+ $ response = $ http ->post ($ endpoint , null , $ query , $ config ['http_options ' ])->send ();
121+ $ json = json_decode ((string ) $ response ->getBody (), true );
122+
123+ // if it is succesful, display the token in our app
124+ if (isset ($ json ['access_token ' ])) {
125+ return $ twig ->render ('client/show_access_token.twig ' , array ('response ' => $ json ));
84126 }
85127
86128 return $ twig ->render ('client/failed_token_request.twig ' , array ('response ' => $ json ? $ json : $ response ));
0 commit comments