mirror of
				https://github.com/owncloud/android-library.git
				synced 2025-10-31 10:27:45 +00:00 
			
		
		
		
	Merge pull request #111 from owncloud/federated_sharing
Support for federated sharing
This commit is contained in:
		
						commit
						cf3baa6cd5
					
				| @ -35,6 +35,7 @@ env: | ||||
|   - secure: gPCBnpGLA2sdSMtfhT+/InThmXNEU8XrrS54uuIP8iXBLvVe0yZrNl76GbMosV0ry3YtDngsmsbHwRjPPb0+3mTTdAqZ60HHzGaNPgEm6b5t0t4bpJ3LW9osLZsuf9jRsI2LD66zxblaMrK2+8hN/dUrj707ijsZHp3SPSQJ6g8= | ||||
|   - secure: AnxLVarfwM7IhJ7Sca35USyRlFHFvlcBhWTt2TVDcyQ+ldDyb+U6IWXFK0Yy82QP0ZH/RCLu7FnmHK/rKG0BHNRt1Ymco1VkTQql0MZcHXP+4IKgEvgJyUn1TqYj+hSVmM6lgTA+QUjZYGSfwU8mhUFiU7644ZTdTe6ALdqa+v8= | ||||
|   - secure: ezKyZbb3q1Phcv/vJntuJe0C2req+Hp4/C+tFZIWZ3o8wRO9jVI3bnED9TWQyQOOT0SoRYjJ5zqp0UcEOGCzPeWFO6bA7RWp+zA/R9sziLNcVWMVv3WXnuClQjPBHJeXRnP7YmNjxDmSfV97a14dk5d9LgJZYliTDepH4dLsxro= | ||||
|   - secure: HV8REF7bB1i6cBEe4YCZvjgTf6tGiptAPzp9qZXGUH9Lxh6yUjYMXXP8flDaIFcE2JuAakW6P4SPr7/SQ+X4f8/84cNhmU1I+6Y1nG37WvelRHQVslOUDbl1TNUnynYZ+ybkb3BtrQvggCGMdQKvGZXYiggFhN/TWuDo0c7Q2Ro= | ||||
|   matrix: | ||||
|   - ANDROID_TARGET=android-23 ANDROID_ABI=armeabi-v7a | ||||
| addons: | ||||
|  | ||||
| @ -78,7 +78,7 @@ public class GetRemoteShareesOperation extends RemoteOperation{ | ||||
| 
 | ||||
|     // Arguments - constant values | ||||
|     private static final String VALUE_FORMAT = "json"; | ||||
|     private static final String VALUE_ITEM_TYPE = "search";         //  to get the server search for users / groups | ||||
|     private static final String VALUE_ITEM_TYPE = "file";         //  to get the server search for users / groups | ||||
| 
 | ||||
| 
 | ||||
|     // JSON Node names | ||||
| @ -87,15 +87,12 @@ public class GetRemoteShareesOperation extends RemoteOperation{ | ||||
|     private static final String NODE_EXACT = "exact"; | ||||
|     private static final String NODE_USERS = "users"; | ||||
|     private static final String NODE_GROUPS = "groups"; | ||||
|     private static final String NODE_REMOTES = "remotes"; | ||||
|     public static final String NODE_VALUE = "value"; | ||||
|     public static final String PROPERTY_LABEL = "label"; | ||||
|     public static final String PROPERTY_SHARE_TYPE = "shareType"; | ||||
|     public static final String PROPERTY_SHARE_WITH = "shareWith"; | ||||
| 
 | ||||
|     // Result types | ||||
|     public static final Byte USER_TYPE = 0; | ||||
|     public static final Byte GROUP_TYPE = 1; | ||||
| 
 | ||||
|     private String mSearchString; | ||||
|     private int mPage; | ||||
|     private int mPerPage; | ||||
| @ -146,17 +143,21 @@ public class GetRemoteShareesOperation extends RemoteOperation{ | ||||
|                 JSONObject respExact = respData.getJSONObject(NODE_EXACT); | ||||
|                 JSONArray respExactUsers = respExact.getJSONArray(NODE_USERS); | ||||
|                 JSONArray respExactGroups = respExact.getJSONArray(NODE_GROUPS); | ||||
|                 JSONArray respExactRemotes = respExact.getJSONArray(NODE_REMOTES); | ||||
|                 JSONArray respPartialUsers = respData.getJSONArray(NODE_USERS); | ||||
|                 JSONArray respPartialGroups = respData.getJSONArray(NODE_GROUPS); | ||||
|                 JSONArray respPartialRemotes = respData.getJSONArray(NODE_REMOTES); | ||||
|                 JSONArray[] jsonResults = { | ||||
|                         respExactUsers, | ||||
|                         respExactGroups, | ||||
|                         respExactRemotes, | ||||
|                         respPartialUsers, | ||||
|                         respPartialGroups | ||||
|                         respPartialGroups, | ||||
|                         respPartialRemotes | ||||
|                 }; | ||||
| 
 | ||||
|                 ArrayList<Object> data = new ArrayList<Object>(); // For result data | ||||
|                 for (int i=0; i<4; i++) { | ||||
|                 for (int i=0; i<6; i++) { | ||||
|                     for(int j=0; j< jsonResults[i].length(); j++){ | ||||
|                         JSONObject jsonResult = jsonResults[i].getJSONObject(j); | ||||
|                         data.add(jsonResult); | ||||
|  | ||||
| @ -62,6 +62,16 @@ public class OCShare implements Parcelable, Serializable { | ||||
|             CREATE_PERMISSION_FLAG + | ||||
|             DELETE_PERMISSION_FLAG | ||||
|     ; | ||||
|     public static final int FEDERATED_PERMISSIONS_FOR_FILE = | ||||
|             READ_PERMISSION_FLAG + | ||||
|             UPDATE_PERMISSION_FLAG | ||||
|     ; | ||||
|     public static final int FEDERATED_PERMISSIONS_FOR_FOLDER = | ||||
|             READ_PERMISSION_FLAG + | ||||
|             UPDATE_PERMISSION_FLAG + | ||||
|             CREATE_PERMISSION_FLAG + | ||||
|             DELETE_PERMISSION_FLAG | ||||
|     ; | ||||
| 
 | ||||
|     private long mId; | ||||
|     private long mFileSource; | ||||
|  | ||||
| @ -15,6 +15,20 @@ | ||||
| 			</then> | ||||
| 		</if> | ||||
| 		 | ||||
| 		<!-- Replace OC server URL 2 if set in environment --> | ||||
| 		<if> | ||||
| 			<condition> | ||||
| 				<isset property="env.OCTEST_SERVER_BASE_URL_2" /> | ||||
| 			</condition> | ||||
| 			<then> | ||||
| 				<replaceregexp | ||||
| 					file="res/values/setup.xml" | ||||
| 					match='("server_base_url_2">)\s*(<)' | ||||
| 					replace="\1${env.OCTEST_SERVER_BASE_URL_2}\2" | ||||
| 					byline="true" /> | ||||
| 			</then> | ||||
| 		</if> | ||||
| 		 | ||||
| 		<!-- Replace test username if set in environment --> | ||||
| 		<if> | ||||
| 			<condition> | ||||
|  | ||||
| @ -26,6 +26,7 @@ | ||||
| <resources> | ||||
|     <string name="build_number"></string> | ||||
|     <string name="server_base_url"></string> | ||||
|     <string name="server_base_url_2"></string> | ||||
|     <string name="username"></string> | ||||
|     <string name="password"></string> | ||||
|     <string name ="user_agent">Mozilla/5.0 (Android) ownCloud test project</string> | ||||
|  | ||||
| @ -29,6 +29,7 @@ import java.io.File; | ||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult; | ||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; | ||||
| import com.owncloud.android.lib.resources.shares.ShareType; | ||||
| import com.owncloud.android.lib.test_project.R; | ||||
| import com.owncloud.android.lib.test_project.TestActivity; | ||||
| 
 | ||||
| /** | ||||
| @ -47,6 +48,7 @@ public class CreateShareTest extends RemoteTest { | ||||
| 	private TestActivity mActivity; | ||||
| 	private String mFullPath2FileToShare; | ||||
| 	private String mFullPath2NonExistentFile; | ||||
| 	private String mRemoteServer; | ||||
| 	 | ||||
| 	@Override | ||||
| 	protected void setUp() throws Exception { | ||||
| @ -55,6 +57,7 @@ public class CreateShareTest extends RemoteTest { | ||||
| 	    mActivity = getActivity(); | ||||
| 	    mFullPath2FileToShare = mBaseFolderPath + FILE_TO_SHARE; | ||||
| 	    mFullPath2NonExistentFile = mBaseFolderPath + NON_EXISTENT_FILE; | ||||
| 	    mRemoteServer = getActivity().getString(R.string.server_base_url_2); | ||||
| 	    		 | ||||
| 		File textFile = mActivity.extractAsset(TestActivity.ASSETS__TEXT_FILE_NAME); | ||||
| 		RemoteOperationResult result = mActivity.uploadFile( | ||||
| @ -217,6 +220,82 @@ public class CreateShareTest extends RemoteTest { | ||||
| 		 | ||||
| 	} | ||||
| 	 | ||||
| 	/** | ||||
| 	 * Test creation of federated shares with remote users | ||||
| 	 */ | ||||
| 	public void testCreateFederatedShareWithUser() { | ||||
| 		 | ||||
| 		String remoteDomain = mRemoteServer.split("//")[1]; | ||||
| 		 | ||||
| 		/// Successful cases | ||||
| 		RemoteOperationResult result = mActivity.createShare( | ||||
| 				mFullPath2FileToShare,  | ||||
| 				ShareType.FEDERATED,  | ||||
| 				"admin@" + remoteDomain,  | ||||
| 				false,  | ||||
| 				"",  | ||||
| 				1); | ||||
| 		assertTrue(result.isSuccess()); | ||||
| 		 | ||||
| 		 | ||||
| 		/// Failed cases | ||||
| 		 | ||||
| 		// sharee doesn't exist in an existing remote server | ||||
| 		result = mActivity.createShare( | ||||
| 				mFullPath2FileToShare,  | ||||
| 				ShareType.FEDERATED,  | ||||
| 				"no_exist@" + remoteDomain,  | ||||
| 				false,  | ||||
| 				"",  | ||||
| 				31); | ||||
| 		assertFalse(result.isSuccess()); | ||||
| 		assertEquals( | ||||
| 				RemoteOperationResult.ResultCode.SHARE_FORBIDDEN,  | ||||
| 				result.getCode() | ||||
| 		); | ||||
| 		assertTrue(		// error message from server as part of the result | ||||
| 				result.getData().size() == 1 &&  | ||||
| 				result.getData().get(0) instanceof String | ||||
| 		); | ||||
| 		 | ||||
| 		// remote server doesn't exist | ||||
| 		result = mActivity.createShare( | ||||
| 				mFullPath2FileToShare, | ||||
| 				ShareType.FEDERATED, | ||||
| 				"no_exist", | ||||
| 				false, | ||||
| 				"", | ||||
| 				31); | ||||
| 		assertFalse(result.isSuccess()); | ||||
| 		assertEquals( | ||||
| 				RemoteOperationResult.ResultCode.SHARE_WRONG_PARAMETER, | ||||
| 				result.getCode() | ||||
| 		); | ||||
| 		assertTrue(		// error message from server as part of the result | ||||
| 				result.getData().size() == 1 && | ||||
| 				result.getData().get(0) instanceof String | ||||
| 		); | ||||
| 		 | ||||
| 		// file doesn't exist | ||||
| 		result = mActivity.createShare( | ||||
| 				mFullPath2NonExistentFile,  | ||||
| 				ShareType.FEDERATED,  | ||||
| 				"admin@" + remoteDomain,  | ||||
| 				false,  | ||||
| 				"",  | ||||
| 				31); | ||||
| 		assertFalse(result.isSuccess()); | ||||
| 		assertEquals( | ||||
| 				RemoteOperationResult.ResultCode.SHARE_NOT_FOUND,  | ||||
| 				result.getCode() | ||||
| 		); | ||||
| 		assertTrue(		// error message from server as part of the result | ||||
| 				result.getData().size() == 1 &&  | ||||
| 				result.getData().get(0) instanceof String | ||||
| 		); | ||||
| 		 | ||||
| 	} | ||||
| 	 | ||||
| 	 | ||||
| 	@Override | ||||
| 	protected void tearDown() throws Exception { | ||||
|  | ||||
| @ -41,6 +41,7 @@ import com.owncloud.android.lib.common.OwnCloudCredentialsFactory; | ||||
| import com.owncloud.android.lib.common.network.NetworkUtils; | ||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult; | ||||
| import com.owncloud.android.lib.resources.shares.GetRemoteShareesOperation; | ||||
| import com.owncloud.android.lib.resources.shares.ShareType; | ||||
| import com.owncloud.android.lib.test_project.R; | ||||
| import com.owncloud.android.lib.test_project.SelfSignedConfidentSslSocketFactory; | ||||
| 
 | ||||
| @ -68,7 +69,7 @@ public class GetShareesTest extends RemoteTest { | ||||
| 
 | ||||
| 	private static final String LOG_TAG = GetShareesTest.class.getCanonicalName(); | ||||
| 		 | ||||
| 	String mServerUri, mUser, mPass; | ||||
| 	String mServerUri, mUser, mPass, mServerUri2; | ||||
| 	OwnCloudClient mClient = null; | ||||
| 	 | ||||
| 	public GetShareesTest() { | ||||
| @ -125,15 +126,15 @@ public class GetShareesTest extends RemoteTest { | ||||
| 		RemoteOperationResult result = getShareesOperation.execute(mClient); | ||||
| 		JSONObject resultItem; | ||||
| 		JSONObject value; | ||||
| 		byte type; | ||||
| 		int type; | ||||
| 		int userCount = 0, groupCount = 0; | ||||
| 		assertTrue(result.isSuccess() && result.getData().size() > 0); | ||||
| 		try { | ||||
| 			for (int i=0; i<result.getData().size(); i++) { | ||||
| 				resultItem = (JSONObject) result.getData().get(i); | ||||
| 	            value = resultItem.getJSONObject(GetRemoteShareesOperation.NODE_VALUE); | ||||
| 	            type = (byte) value.getInt(GetRemoteShareesOperation.PROPERTY_SHARE_TYPE); | ||||
| 				if (GetRemoteShareesOperation.GROUP_TYPE.equals(type)) { | ||||
| 	            type = value.getInt(GetRemoteShareesOperation.PROPERTY_SHARE_TYPE); | ||||
| 				if (type == ShareType.GROUP.getValue()) { | ||||
| 					groupCount++; | ||||
| 				} else { | ||||
| 					userCount++; | ||||
| @ -156,8 +157,8 @@ public class GetShareesTest extends RemoteTest { | ||||
| 			for (int i=0; i<2; i++) { | ||||
| 				resultItem = (JSONObject) result.getData().get(i); | ||||
| 	            value = resultItem.getJSONObject(GetRemoteShareesOperation.NODE_VALUE); | ||||
| 	            type = (byte) value.getInt(GetRemoteShareesOperation.PROPERTY_SHARE_TYPE); | ||||
| 				if (GetRemoteShareesOperation.GROUP_TYPE.equals(type)) { | ||||
| 	            type = value.getInt(GetRemoteShareesOperation.PROPERTY_SHARE_TYPE); | ||||
| 				if (type == ShareType.GROUP.getValue()) { | ||||
| 					groupCount++; | ||||
| 				} else { | ||||
| 					userCount++; | ||||
| @ -190,6 +191,59 @@ public class GetShareesTest extends RemoteTest { | ||||
| 		assertTrue(!result.isSuccess() && result.getHttpCode() == HttpStatus.SC_BAD_REQUEST); | ||||
| 	} | ||||
| 	 | ||||
| 	/** | ||||
| 	 *  Test get federated sharees | ||||
| 	 *  | ||||
| 	 *  Requires OC server 8.2 or later | ||||
| 	 */ | ||||
| 	public void testGetFederatedShareesOperation() { | ||||
| 		Log.v(LOG_TAG, "testGetFederatedSharees in"); | ||||
| 
 | ||||
| 		/// successful cases | ||||
| 
 | ||||
| 		// search for sharees including "@" | ||||
| 		GetRemoteShareesOperation getShareesOperation = new GetRemoteShareesOperation("@", 1, 50); | ||||
| 		RemoteOperationResult result = getShareesOperation.execute(mClient); | ||||
| 		JSONObject resultItem; | ||||
| 		JSONObject value; | ||||
| 		int type; | ||||
| 		int fedCount = 0; | ||||
| 		assertTrue(result.isSuccess() && result.getData().size() > 0); | ||||
| 		try { | ||||
| 			for (int i=0; i<result.getData().size(); i++) { | ||||
| 				resultItem = (JSONObject) result.getData().get(i); | ||||
| 				value = resultItem.getJSONObject(GetRemoteShareesOperation.NODE_VALUE); | ||||
| 				type = value.getInt(GetRemoteShareesOperation.PROPERTY_SHARE_TYPE); | ||||
| 				if (type == ShareType.FEDERATED.getValue()) { | ||||
| 					fedCount++; | ||||
| 				} | ||||
| 			} | ||||
| 			assertTrue(fedCount > 0); | ||||
| 		} catch (JSONException e) { | ||||
| 			AssertionFailedError afe = new AssertionFailedError(e.getLocalizedMessage()); | ||||
| 			afe.setStackTrace(e.getStackTrace()); | ||||
| 			throw afe; | ||||
| 		} | ||||
| 
 | ||||
| 		// search for 'admin' sharee from external server - expecting at least 1 result | ||||
| 		String remoteSharee = "admin@" + mServerUri2.split("//")[1]; | ||||
| 		getShareesOperation = new GetRemoteShareesOperation(remoteSharee, 1, 50); | ||||
| 		result = getShareesOperation.execute(mClient); | ||||
| 		assertTrue(result.isSuccess() && result.getData().size() > 0); | ||||
| 
 | ||||
| 		 | ||||
| 		/// failed cases | ||||
| 		 | ||||
| 		// search for sharees including wrong page values | ||||
| 		getShareesOperation = new GetRemoteShareesOperation("@", 0, 50); | ||||
| 		result = getShareesOperation.execute(mClient); | ||||
| 		assertTrue(!result.isSuccess() && result.getHttpCode() == HttpStatus.SC_BAD_REQUEST); | ||||
| 		 | ||||
| 		getShareesOperation = new GetRemoteShareesOperation("@", 1, 0); | ||||
| 		result = getShareesOperation.execute(mClient); | ||||
| 		assertTrue(!result.isSuccess() && result.getHttpCode() == HttpStatus.SC_BAD_REQUEST); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	protected void tearDown() throws Exception { | ||||
| 	    Log.v(LOG_TAG, "Deleting remote fixture..."); | ||||
| @ -202,6 +256,7 @@ public class GetShareesTest extends RemoteTest { | ||||
| 	    Log.v(LOG_TAG, "Setting up client instance to access OC server..."); | ||||
| 		 | ||||
| 		mServerUri = context.getString(R.string.server_base_url); | ||||
| 		mServerUri2 = context.getString(R.string.server_base_url_2); | ||||
| 		mUser = context.getString(R.string.username); | ||||
| 		mPass = context.getString(R.string.password); | ||||
| 		 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user