mirror of
				https://github.com/owncloud/android-library.git
				synced 2025-10-31 02:17:41 +00:00 
			
		
		
		
	Adapt authentication with basic credentials to reuse server sessions for server >= 9.1
This commit is contained in:
		
							parent
							
								
									7647a4974b
								
							
						
					
					
						commit
						7b88fb4e6c
					
				| @ -34,10 +34,18 @@ public class OwnCloudBasicCredentials implements OwnCloudCredentials { | ||||
| 
 | ||||
|     private String mUsername; | ||||
|     private String mPassword; | ||||
|     private boolean mAuthenticationPreemptive; | ||||
| 
 | ||||
|     public OwnCloudBasicCredentials(String username, String password) { | ||||
|         mUsername = username != null ? username : ""; | ||||
|         mPassword = password != null ? password : ""; | ||||
|         mAuthenticationPreemptive = true; | ||||
|     } | ||||
| 
 | ||||
|     public OwnCloudBasicCredentials(String username, String password, boolean sessionEnabled) { | ||||
|         mUsername = username != null ? username : ""; | ||||
|         mPassword = password != null ? password : ""; | ||||
|         mAuthenticationPreemptive = !sessionEnabled; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
| @ -46,7 +54,7 @@ public class OwnCloudBasicCredentials implements OwnCloudCredentials { | ||||
|         authPrefs.add(AuthPolicy.BASIC); | ||||
|         client.getParams().setParameter(AuthPolicy.AUTH_SCHEME_PRIORITY, authPrefs); | ||||
| 
 | ||||
|         client.getParams().setAuthenticationPreemptive(true); | ||||
|         client.getParams().setAuthenticationPreemptive(mAuthenticationPreemptive); | ||||
|         client.getParams().setCredentialCharset(OwnCloudCredentialsFactory.CREDENTIAL_CHARSET); | ||||
|         client.getState().setCredentials( | ||||
|             AuthScope.ANY, | ||||
|  | ||||
| @ -42,6 +42,7 @@ import com.owncloud.android.lib.common.accounts.AccountUtils; | ||||
| import com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException; | ||||
| import com.owncloud.android.lib.common.network.NetworkUtils; | ||||
| import com.owncloud.android.lib.common.utils.Log_OC; | ||||
| import com.owncloud.android.lib.resources.status.OwnCloudVersion; | ||||
| 
 | ||||
| public class OwnCloudClientFactory { | ||||
|      | ||||
| @ -69,7 +70,11 @@ public class OwnCloudClientFactory { | ||||
|      * @throws IOException                  If there was some I/O error while getting the | ||||
|      *                                      authorization token for the account. | ||||
|      * @throws AccountNotFoundException     If 'account' is unknown for the AccountManager | ||||
|      * | ||||
|      * @deprecated :    Will be deleted in version 1.0. | ||||
|      *                  Use {@link #createOwnCloudClient(Account, Context, Activity)} instead. | ||||
|      */ | ||||
|     @Deprecated | ||||
|     public static OwnCloudClient createOwnCloudClient (Account account, Context appContext) | ||||
|             throws OperationCanceledException, AuthenticatorException, IOException, | ||||
|             AccountNotFoundException { | ||||
| @ -111,8 +116,13 @@ public class OwnCloudClientFactory { | ||||
|                 AccountTypeUtils.getAuthTokenTypePass(account.type), | ||||
|                 false); | ||||
| 
 | ||||
|             OwnCloudVersion version = AccountUtils.getServerVersionForAccount(account, appContext); | ||||
|             client.setCredentials( | ||||
|             		OwnCloudCredentialsFactory.newBasicCredentials(username, password) | ||||
|                 OwnCloudCredentialsFactory.newBasicCredentials( | ||||
|                     username, | ||||
|                     password, | ||||
|                     (version != null && version.isSessionMonitoringSupported()) | ||||
|                 ) | ||||
|             ); | ||||
| 
 | ||||
|         } | ||||
| @ -181,12 +191,18 @@ public class OwnCloudClientFactory { | ||||
|                 null, | ||||
|                 currentActivity, | ||||
|                 null, | ||||
|             		null); | ||||
|                 null | ||||
|             ); | ||||
|              | ||||
|             Bundle result = future.getResult(); | ||||
|             String password = result.getString(AccountManager.KEY_AUTHTOKEN); | ||||
|             OwnCloudVersion version = AccountUtils.getServerVersionForAccount(account, appContext); | ||||
|             client.setCredentials( | ||||
|             		OwnCloudCredentialsFactory.newBasicCredentials(username, password) | ||||
|                 OwnCloudCredentialsFactory.newBasicCredentials( | ||||
|                     username, | ||||
|                     password, | ||||
|                     (version != null && version.isSessionMonitoringSupported()) | ||||
|                 ) | ||||
|             ); | ||||
|         } | ||||
|          | ||||
|  | ||||
| @ -34,6 +34,12 @@ public class OwnCloudCredentialsFactory { | ||||
|         return new OwnCloudBasicCredentials(username, password); | ||||
|     } | ||||
| 
 | ||||
|     public static OwnCloudCredentials newBasicCredentials( | ||||
|         String username, String password, boolean sessionEnabled | ||||
|     ) { | ||||
|         return new OwnCloudBasicCredentials(username, password, sessionEnabled); | ||||
|     } | ||||
| 
 | ||||
|     public static OwnCloudCredentials newBearerCredentials(String authToken) { | ||||
|         return new OwnCloudBearerCredentials(authToken); | ||||
|     } | ||||
|  | ||||
| @ -60,10 +60,10 @@ public class AccountUtils { | ||||
|      * Returns the proper URL path to access the WebDAV interface of an ownCloud server, | ||||
|      * according to its version and the authorization method used. | ||||
|      * | ||||
|      * @param	version         	Version of ownCloud server. | ||||
|      * @param supportsOAuth   If true, access with OAuth 2 authorization is considered. | ||||
|      * @param supportsSamlSso If true, and supportsOAuth is false, access with SAML-based single-sign-on is considered. | ||||
|      * @return WebDAV path for given OC version, null if OC version unknown | ||||
|      * @param    version Version of ownCloud server. | ||||
|      */ | ||||
|     public static String getWebdavPath(OwnCloudVersion version, boolean supportsOAuth, boolean supportsSamlSso) { | ||||
|         if (version != null) { | ||||
| @ -87,12 +87,11 @@ public class AccountUtils { | ||||
|     /** | ||||
|      * Constructs full url to host and webdav resource basing on host version | ||||
|      * | ||||
|      * @deprecated 		To be removed in release 1.0.  | ||||
|      *  | ||||
|      * @param context | ||||
|      * @param account | ||||
|      * @return url or null on failure | ||||
|      * @throws AccountNotFoundException When 'account' is unknown for the AccountManager | ||||
|      * @deprecated To be removed in release 1.0. | ||||
|      */ | ||||
|     @Deprecated | ||||
|     public static String constructFullURLForAccount(Context context, Account account) throws AccountNotFoundException { | ||||
| @ -113,14 +112,13 @@ public class AccountUtils { | ||||
|     /** | ||||
|      * Extracts url server from the account | ||||
|      * | ||||
|      * @deprecated 	This method will be removed in version 1.0. | ||||
|      *  			Use {@link #getBaseUrlForAccount(Context, Account)} | ||||
|      *  		 	instead.    | ||||
|      *  | ||||
|      * @param context | ||||
|      * @param account | ||||
|      * @return url server or null on failure | ||||
|      * @throws AccountNotFoundException When 'account' is unknown for the AccountManager | ||||
|      * @deprecated This method will be removed in version 1.0. | ||||
|      * Use {@link #getBaseUrlForAccount(Context, Account)} | ||||
|      * instead. | ||||
|      */ | ||||
|     @Deprecated | ||||
|     public static String constructBasicURLForAccount(Context context, Account account) | ||||
| @ -130,6 +128,7 @@ public class AccountUtils { | ||||
| 
 | ||||
|     /** | ||||
|      * Extracts url server from the account | ||||
|      * | ||||
|      * @param context | ||||
|      * @param account | ||||
|      * @return url server or null on failure | ||||
| @ -140,7 +139,7 @@ public class AccountUtils { | ||||
|         AccountManager ama = AccountManager.get(context.getApplicationContext()); | ||||
|         String baseurl = ama.getUserData(account, Constants.KEY_OC_BASE_URL); | ||||
| 
 | ||||
|         if (baseurl == null )  | ||||
|         if (baseurl == null) | ||||
|             throw new AccountNotFoundException(account, "Account not found", null); | ||||
| 
 | ||||
|         return baseurl; | ||||
| @ -164,7 +163,26 @@ public class AccountUtils { | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Get the stored server version corresponding to an OC account. | ||||
|      * | ||||
|      * @param account   An OC account | ||||
|      * @param context   Application context | ||||
|      * @return Version of the OC server, according to last check | ||||
|      */ | ||||
|     public static OwnCloudVersion getServerVersionForAccount(Account account, Context context) { | ||||
|         AccountManager ama = AccountManager.get(context); | ||||
|         OwnCloudVersion version = null; | ||||
|         try { | ||||
|             String versionString = ama.getUserData(account, Constants.KEY_OC_VERSION); | ||||
|             version = new OwnCloudVersion(versionString); | ||||
| 
 | ||||
|         } catch (Exception e) { | ||||
|             Log_OC.e(TAG, "Couldn't get a the server version for an account", e); | ||||
|         } | ||||
|         return version; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * @return | ||||
|      * @throws IOException | ||||
|      * @throws AuthenticatorException | ||||
| @ -185,6 +203,7 @@ public class AccountUtils { | ||||
|             AccountUtils.Constants.KEY_SUPPORTS_SAML_WEB_SSO) != null; | ||||
| 
 | ||||
|         String username = AccountUtils.getUsernameForAccount(account); | ||||
|         OwnCloudVersion version = new OwnCloudVersion(am.getUserData(account, Constants.KEY_OC_VERSION)); | ||||
| 
 | ||||
|         if (isOauth2) { | ||||
|             String accessToken = am.blockingGetAuthToken( | ||||
| @ -208,7 +227,11 @@ public class AccountUtils { | ||||
|                 AccountTypeUtils.getAuthTokenTypePass(account.type), | ||||
|                 false); | ||||
| 
 | ||||
|             credentials = OwnCloudCredentialsFactory.newBasicCredentials(username, password); | ||||
|             credentials = OwnCloudCredentialsFactory.newBasicCredentials( | ||||
|                 username, | ||||
|                 password, | ||||
|                 version.isSessionMonitoringSupported() | ||||
|             ); | ||||
|         } | ||||
| 
 | ||||
|         return credentials; | ||||
| @ -260,6 +283,7 @@ public class AccountUtils { | ||||
| 
 | ||||
|     /** | ||||
|      * Restore the client cookies | ||||
|      * | ||||
|      * @param account | ||||
|      * @param client | ||||
|      * @param context | ||||
| @ -271,13 +295,13 @@ public class AccountUtils { | ||||
|         // Account Manager | ||||
|         AccountManager am = AccountManager.get(context.getApplicationContext()); | ||||
| 
 | ||||
| 		Uri serverUri = (client.getBaseUri() != null)? client.getBaseUri() : client.getWebdavUri(); | ||||
|         Uri serverUri = (client.getBaseUri() != null) ? client.getBaseUri() : client.getWebdavUri(); | ||||
| 
 | ||||
|         String cookiesString = am.getUserData(account, Constants.KEY_COOKIES); | ||||
| 		if (cookiesString !=null) { | ||||
|         if (cookiesString != null) { | ||||
|             String[] cookies = cookiesString.split(";"); | ||||
|             if (cookies.length > 0) { | ||||
| 				for (int i=0; i< cookies.length; i++) { | ||||
|                 for (int i = 0; i < cookies.length; i++) { | ||||
|                     Cookie cookie = new Cookie(); | ||||
|                     int equalPos = cookies[i].indexOf('='); | ||||
|                     cookie.setName(cookies[i].substring(0, equalPos)); | ||||
| @ -293,6 +317,7 @@ public class AccountUtils { | ||||
| 
 | ||||
|     /** | ||||
|      * Restore the client cookies from accountName | ||||
|      * | ||||
|      * @param accountName | ||||
|      * @param client | ||||
|      * @param context | ||||
| @ -321,7 +346,9 @@ public class AccountUtils { | ||||
| 
 | ||||
|     public static class AccountNotFoundException extends AccountsException { | ||||
| 
 | ||||
| 		/** Generated - should be refreshed every time the class changes!! */ | ||||
|         /** | ||||
|          * Generated - should be refreshed every time the class changes!! | ||||
|          */ | ||||
|         private static final long serialVersionUID = -1684392454798508693L; | ||||
| 
 | ||||
|         private Account mFailedAccount; | ||||
| @ -367,6 +394,7 @@ public class AccountUtils { | ||||
|         public static final String KEY_SUPPORTS_SAML_WEB_SSO = "oc_supports_saml_web_sso"; | ||||
|         /** | ||||
|          * Flag signaling if the ownCloud server supports Share API" | ||||
|          * | ||||
|          * @deprecated | ||||
|          */ | ||||
|         public static final String KEY_SUPPORTS_SHARE_API = "oc_supports_share_api"; | ||||
|  | ||||
| @ -53,6 +53,8 @@ public class OwnCloudVersion implements Comparable<OwnCloudVersion> { | ||||
| 
 | ||||
|     private static final int MINIMUM_VERSION_WITH_NOT_RESHAREABLE_FEDERATED = 0x09010000;   // 9.1 | ||||
| 
 | ||||
|     private static final int MINIMUM_VERSION_WITH_SESSION_MONITORING = 0x09010000;   // 9.1 | ||||
| 
 | ||||
|     private static final int MAX_DOTS = 3; | ||||
| 
 | ||||
|     // format is in version | ||||
| @ -162,4 +164,8 @@ public class OwnCloudVersion implements Comparable<OwnCloudVersion> { | ||||
|     public boolean isNotReshareableFederatedSupported() { | ||||
|         return (mVersion >= MINIMUM_VERSION_WITH_NOT_RESHAREABLE_FEDERATED); | ||||
|     } | ||||
| 
 | ||||
|     public boolean isSessionMonitoringSupported() { | ||||
|         return (mVersion >= MINIMUM_VERSION_WITH_SESSION_MONITORING); | ||||
|     } | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user