@@ -143,7 +143,7 @@ public class AuthActivity extends Activity {
143143 private static final String SIS_KEY_AUTH_STATE_NONCE = "SIS_KEY_AUTH_STATE_NONCE" ;
144144
145145 // saved instance PKCE manger key
146- private static final String SIS_KEY_PKCE_MANAGER = "SIS_KEY_PKCE_MANAGER " ;
146+ private static final String SIS_KEY_PKCE_CODE_VERIFIER = "SIS_KEY_PKCE_CODE_VERIFIER " ;
147147 /**
148148 * Provider of the local security needs of an AuthActivity.
149149 *
@@ -228,7 +228,8 @@ static void setAuthParams(String appKey, String desiredUid,
228228 }
229229
230230 /**
231- * Set static authentication parameters
231+ * Set static authentication parameters. If both host and webHost are provided, we take use
232+ * host as source of truth.
232233 */
233234 static void setAuthParams (String appKey , String desiredUid ,
234235 String [] alreadyAuthedUids , String sessionId , String webHost ,
@@ -291,12 +292,17 @@ public static Intent makeIntent(Context context, String appKey, String webHost,
291292 */
292293 public static Intent makeIntent (Context context , String appKey , String desiredUid , String [] alreadyAuthedUids ,
293294 String sessionId , String webHost , String apiType ) {
294- if (appKey == null ) throw new IllegalArgumentException ("'appKey' can't be null" );
295+ if (appKey == null ) {
296+ throw new IllegalArgumentException ("'appKey' can't be null" );
297+ }
295298 setAuthParams (appKey , desiredUid , alreadyAuthedUids , sessionId , webHost , apiType , null ,
296299 null , null );
297300 return new Intent (context , AuthActivity .class );
298301 }
299302
303+ /**
304+ * If both host and webHost are provided, we take use host as source of truth.
305+ */
300306 static Intent makeIntent (
301307 Context context , String appKey , String desiredUid , String [] alreadyAuthedUids ,
302308 String sessionId , String webHost , String apiType , TokenAccessType tokenAccessType ,
@@ -430,7 +436,7 @@ protected void onCreate(Bundle savedInstanceState) {
430436 mPKCEManager = new DbxPKCEManager ();
431437 } else {
432438 mAuthStateNonce = savedInstanceState .getString (SIS_KEY_AUTH_STATE_NONCE );
433- mPKCEManager = ( DbxPKCEManager ) savedInstanceState .getSerializable ( SIS_KEY_PKCE_MANAGER );
439+ mPKCEManager = new DbxPKCEManager ( savedInstanceState .getString ( SIS_KEY_PKCE_CODE_VERIFIER ) );
434440 }
435441
436442 setTheme (android .R .style .Theme_Translucent_NoTitleBar );
@@ -442,7 +448,7 @@ protected void onCreate(Bundle savedInstanceState) {
442448 protected void onSaveInstanceState (Bundle outState ) {
443449 super .onSaveInstanceState (outState );
444450 outState .putString (SIS_KEY_AUTH_STATE_NONCE , mAuthStateNonce );
445- outState .putSerializable ( SIS_KEY_PKCE_MANAGER , mPKCEManager );
451+ outState .putString ( SIS_KEY_PKCE_CODE_VERIFIER , mPKCEManager . getCodeVerifier () );
446452 }
447453
448454 /**
@@ -604,14 +610,16 @@ protected void onNewIntent(Intent intent) {
604610 newResult .putExtra (EXTRA_UID , uid );
605611 } else if (token .equals (TokenType .OAUTH2CODE .toString ())) {
606612 // code flow with PKCE
607- TokenRequest tokenRequest = new TokenRequest (secret );
613+ TokenRequestAsyncTask tokenRequest = new TokenRequestAsyncTask (secret );
608614 try {
609615 DbxAuthFinish dbxAuthFinish = tokenRequest .execute ().get ();
610616
611617 if (dbxAuthFinish == null ) {
612618 newResult = null ;
613619 } else {
614620 newResult = new Intent ();
621+ // access_token and access_secret are OAuth1 concept. In OAuth2 we only
622+ // have access token. So I put both of them to be the same.
615623 newResult .putExtra (EXTRA_ACCESS_TOKEN , dbxAuthFinish .getAccessToken ());
616624 newResult .putExtra (EXTRA_ACCESS_SECRET , dbxAuthFinish .getAccessToken ());
617625 newResult .putExtra (EXTRA_REFRESH_TOKEN , dbxAuthFinish .getRefreshToken ());
@@ -677,7 +685,7 @@ private String createStateNonce() {
677685 }
678686
679687 private String createPKCEStateNonce () {
680- return String .format ("oauth2code:%s:%s:%s" ,
688+ return String .format (Locale . US , "oauth2code:%s:%s:%s" ,
681689 mPKCEManager .getCodeChallenge (),
682690 DbxPKCEManager .CODE_CHALLENGE_METHODS ,
683691 mTokenAccessType .toString ());
@@ -709,18 +717,18 @@ public String toString() {
709717 }
710718 }
711719
712- private class TokenRequest extends AsyncTask <Void , Void , DbxAuthFinish > {
720+ private class TokenRequestAsyncTask extends AsyncTask <Void , Void , DbxAuthFinish > {
713721 private final String code ;
714722
715- private TokenRequest (String code ) {
723+ private TokenRequestAsyncTask (String code ) {
716724 this .code = code ;
717725 }
718726
719727
720728 @ Override
721729 protected DbxAuthFinish doInBackground (Void ... p ) {
722730 try {
723- return mPKCEManager .makeTokenRequest (mRequestConfig , code , mAppKey , null ,mHost );
731+ return mPKCEManager .makeTokenRequest (mRequestConfig , code , mAppKey , null , mHost );
724732 } catch (DbxException e ) {
725733 Log .e (TAG , "Token Request Failed: " + e .getMessage ());
726734 return null ;
0 commit comments