Skip to content

Commit 53dd620

Browse files
committed
Added Facebook support
1 parent 78ffea9 commit 53dd620

File tree

6 files changed

+241
-357
lines changed

6 files changed

+241
-357
lines changed

android/src/main/java/io/fullstack/oauth/OAuthManagerDialogFragment.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -113,11 +113,7 @@ public void onReceivedError(WebView view, int code, String desc, String failingU
113113

114114
private boolean interceptUrl(WebView view, String url, boolean loadUrl) {
115115
if (isCallbackUri(url, mController.getCallbackUrl())) {
116-
// We are on callback page
117-
Uri responseUri = Uri.parse(url);
118-
String oauthToken = responseUri.getQueryParameter("oauth_token");
119-
String oauthVerifier = responseUri.getQueryParameter("oauth_verifier");
120-
mController.getAccessToken(mWebView, oauthVerifier);
116+
mController.getAccessToken(mWebView, url);
121117

122118
return true;
123119
}

android/src/main/java/io/fullstack/oauth/OAuthManagerFragmentController.java

Lines changed: 104 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import android.text.TextUtils;
99
import im.delight.android.webview.AdvancedWebView;
1010

11+
import android.net.Uri;
1112
import android.util.Log;
1213
import android.view.View;
1314
import android.view.ViewGroup;
@@ -18,10 +19,13 @@
1819

1920
import com.github.scribejava.core.model.OAuth1RequestToken;
2021
import com.github.scribejava.core.model.OAuth1AccessToken;
22+
import com.github.scribejava.core.model.OAuth2AccessToken;
23+
import com.github.scribejava.core.model.Token;
2124

2225
import com.github.scribejava.core.model.OAuthRequest;
2326
import com.github.scribejava.core.oauth.OAuthService;
2427
import com.github.scribejava.core.oauth.OAuth10aService;
28+
import com.github.scribejava.core.oauth.OAuth20Service;
2529
import com.github.scribejava.core.exceptions.OAuthConnectionException;
2630

2731
// Credit where credit is due:
@@ -36,8 +40,10 @@ public class OAuthManagerFragmentController {
3640

3741
private String authVersion;
3842
private OAuth10aService oauth10aService;
43+
private OAuth20Service oauth20Service;
3944
private String callbackUrl;
4045
private OAuth1RequestToken oauth1RequestToken;
46+
4147
private Runnable onAccessToken;
4248
private OAuthManagerOnAccessTokenListener mListener;
4349

@@ -59,6 +65,21 @@ public OAuthManagerFragmentController(
5965
this.callbackUrl = callbackUrl;
6066
}
6167

68+
public OAuthManagerFragmentController(
69+
android.app.FragmentManager fragmentManager,
70+
final String providerName,
71+
OAuth20Service oauthService,
72+
final String callbackUrl
73+
) {
74+
this.uiHandler = new Handler(Looper.getMainLooper());
75+
this.fragmentManager = fragmentManager;
76+
77+
this.authVersion = "2.0";
78+
this.oauth20Service = oauthService;
79+
this.callbackUrl = callbackUrl;
80+
}
81+
82+
6283
public void requestAuth(OAuthManagerOnAccessTokenListener listener) {
6384
mListener = listener;
6485

@@ -116,12 +137,13 @@ public void loaded10aAccessToken(final OAuth1AccessToken accessToken) {
116137
Log.d(TAG, "Loaded access token in OAuthManagerFragmentController");
117138
Log.d(TAG, "AccessToken: " + accessToken + " (raw: " + accessToken.getRawResponse() + ")");
118139

119-
if (authVersion.equals("1.0")) {
120-
this.dismissDialog();
121-
mListener.onOauth1AccessToken(accessToken);
122-
} else {
140+
this.dismissDialog();
141+
mListener.onOAuth1AccessToken(accessToken);
142+
}
123143

124-
}
144+
public void loaded20AccessToken(final OAuth2AccessToken accessToken) {
145+
this.dismissDialog();
146+
mListener.onOAuth2AccessToken(accessToken);
125147
}
126148

127149
public void onError() {
@@ -135,11 +157,21 @@ public void getRequestTokenUrlAndLoad(AdvancedWebView webView) {
135157

136158
public void getAccessToken(
137159
final AdvancedWebView webView,
138-
final String oauthVerifier
160+
final String url
139161
) {
140-
Load10aAccessTokenTask task = new Load10aAccessTokenTask(
141-
this, webView, oauth1RequestToken, oauthVerifier);
142-
task.execute();
162+
Uri responseUri = Uri.parse(url);
163+
if (authVersion.equals("1.0")) {
164+
String oauthToken = responseUri.getQueryParameter("oauth_token");
165+
String oauthVerifier = responseUri.getQueryParameter("oauth_verifier");
166+
Load1AccessTokenTask task = new Load1AccessTokenTask(
167+
this, webView, oauth1RequestToken, oauthVerifier);
168+
task.execute();
169+
} else if (authVersion.equals("2.0")) {
170+
String code = responseUri.getQueryParameter("code");
171+
Load2AccessTokenTask task = new Load2AccessTokenTask(
172+
this, webView, code);
173+
task.execute();
174+
}
143175
}
144176

145177
////// TASKS
@@ -185,6 +217,10 @@ protected String doInBackground(Void... params) {
185217
final String requestTokenUrl =
186218
oauth10aService.getAuthorizationUrl(oauth1RequestToken);
187219
return requestTokenUrl;
220+
} else if (authVersion.equals("2.0")) {
221+
final String authorizationUrl =
222+
oauth20Service.getAuthorizationUrl();
223+
return authorizationUrl;
188224
} else {
189225
return null;
190226
}
@@ -204,21 +240,25 @@ protected void onPostExecute(final String url) {
204240
runOnMainThread(new Runnable() {
205241
@Override
206242
public void run() {
207-
if (url != null) {
243+
if (url == null) {
244+
mCtrl.onError();
245+
return;
246+
}
247+
if (authVersion.equals("1.0")) {
208248
mCtrl.setRequestToken(oauth1RequestToken);
209249
mWebView.loadUrl(url);
210-
} else {
211-
mCtrl.onError();
250+
} else if (authVersion.equals("2.0")) {
251+
mWebView.loadUrl(url);
212252
}
213253
}
214254
});
215255
}
216256
}
217257

218-
private class Load10aAccessTokenTask extends OAuthTokenTask<OAuth1AccessToken> {
258+
private class Load1AccessTokenTask extends OAuthTokenTask<OAuth1AccessToken> {
219259
private String oauthVerifier;
220260

221-
public Load10aAccessTokenTask(
261+
public Load1AccessTokenTask(
222262
OAuthManagerFragmentController ctrl,
223263
AdvancedWebView view,
224264
OAuth1RequestToken requestToken,
@@ -231,13 +271,9 @@ public Load10aAccessTokenTask(
231271
@Override
232272
protected OAuth1AccessToken doInBackground(Void... params) {
233273
try {
234-
if (authVersion.equals("1.0")) {
235-
final OAuth1AccessToken accessToken =
236-
oauth10aService.getAccessToken(oauth1RequestToken, oauthVerifier);
237-
return accessToken;
238-
} else {
239-
return null;
240-
}
274+
final OAuth1AccessToken accessToken =
275+
(OAuth1AccessToken) oauth10aService.getAccessToken(oauth1RequestToken, oauthVerifier);
276+
return accessToken;
241277
} catch (OAuthConnectionException ex) {
242278
Log.e(TAG, "OAuth connection exception: " + ex.getMessage());
243279
ex.printStackTrace();
@@ -254,11 +290,55 @@ protected void onPostExecute(final OAuth1AccessToken accessToken) {
254290
runOnMainThread(new Runnable() {
255291
@Override
256292
public void run() {
257-
if (accessToken != null) {
258-
mCtrl.loaded10aAccessToken(accessToken);
259-
} else {
293+
if (accessToken == null) {
294+
mCtrl.onError();
295+
return;
296+
}
297+
mCtrl.loaded10aAccessToken(accessToken);
298+
}
299+
});
300+
}
301+
}
302+
303+
private class Load2AccessTokenTask extends OAuthTokenTask<OAuth2AccessToken> {
304+
private String authorizationCode;
305+
306+
public Load2AccessTokenTask(
307+
OAuthManagerFragmentController ctrl,
308+
AdvancedWebView view,
309+
String authorizationCode
310+
) {
311+
super(ctrl, view);
312+
this.authorizationCode = authorizationCode;
313+
}
314+
315+
@Override
316+
protected OAuth2AccessToken doInBackground(Void... params) {
317+
try {
318+
final OAuth2AccessToken accessToken =
319+
(OAuth2AccessToken) oauth20Service.getAccessToken(authorizationCode);
320+
return accessToken;
321+
} catch (OAuthConnectionException ex) {
322+
Log.e(TAG, "OAuth connection exception: " + ex.getMessage());
323+
ex.printStackTrace();
324+
return null;
325+
} catch (IOException ex) {
326+
Log.e(TAG, "An exception occurred getRequestToken: " + ex.getMessage());
327+
ex.printStackTrace();
328+
return null;
329+
}
330+
}
331+
332+
@Override
333+
protected void onPostExecute(final OAuth2AccessToken accessToken) {
334+
runOnMainThread(new Runnable() {
335+
@Override
336+
public void run() {
337+
if (accessToken == null) {
260338
mCtrl.onError();
339+
return;
261340
}
341+
mCtrl.loaded20AccessToken(accessToken);
262342
}
263343
});
264344
}

0 commit comments

Comments
 (0)