mirror of
				https://github.com/owncloud/android-library.git
				synced 2025-11-04 12:28:25 +00:00 
			
		
		
		
	The ShareXMLParser has been removed from CreateRemoteShareOperation.kt class.
This commit is contained in:
		
							parent
							
								
									037a2b30df
								
							
						
					
					
						commit
						b40a394ab1
					
				@ -1,53 +1,51 @@
 | 
				
			|||||||
/* ownCloud Android Library is available under MIT license
 | 
					/*
 | 
				
			||||||
 | 
					 * ownCloud Android client application
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 * @author masensio
 | 
					 * @author masensio
 | 
				
			||||||
 * @author David A. Velasco
 | 
					 * @author David A. Velasco
 | 
				
			||||||
 * @author David González Verdugo
 | 
					 * @author David González Verdugo
 | 
				
			||||||
 *   Copyright (C) 2020 ownCloud GmbH
 | 
					 * @author Fernando Sanz Velasco
 | 
				
			||||||
 | 
					 * Copyright (C) 2021 ownCloud GmbH.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is free software: you can redistribute it and/or modify
 | 
				
			||||||
 | 
					 * it under the terms of the GNU General Public License version 2,
 | 
				
			||||||
 | 
					 * as published by the Free Software Foundation.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					 * GNU General Public License for more details.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 *   Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
					 | 
				
			||||||
 *   of this software and associated documentation files (the "Software"), to deal
 | 
					 | 
				
			||||||
 *   in the Software without restriction, including without limitation the rights
 | 
					 | 
				
			||||||
 *   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
					 | 
				
			||||||
 *   copies of the Software, and to permit persons to whom the Software is
 | 
					 | 
				
			||||||
 *   furnished to do so, subject to the following conditions:
 | 
					 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 *   The above copyright notice and this permission notice shall be included in
 | 
					 | 
				
			||||||
 *   all copies or substantial portions of the Software.
 | 
					 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 | 
					 | 
				
			||||||
 *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 | 
					 | 
				
			||||||
 *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 | 
					 | 
				
			||||||
 *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
 | 
					 | 
				
			||||||
 *   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
 | 
					 | 
				
			||||||
 *   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 | 
					 | 
				
			||||||
 *   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
					 | 
				
			||||||
 *   THE SOFTWARE.
 | 
					 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package com.owncloud.android.lib.resources.shares
 | 
					package com.owncloud.android.lib.resources.shares
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import android.net.Uri
 | 
				
			||||||
import com.owncloud.android.lib.common.OwnCloudClient
 | 
					import com.owncloud.android.lib.common.OwnCloudClient
 | 
				
			||||||
import com.owncloud.android.lib.common.http.HttpConstants
 | 
					import com.owncloud.android.lib.common.http.HttpConstants
 | 
				
			||||||
import com.owncloud.android.lib.common.http.methods.nonwebdav.PostMethod
 | 
					import com.owncloud.android.lib.common.http.methods.nonwebdav.PostMethod
 | 
				
			||||||
import com.owncloud.android.lib.common.operations.RemoteOperation
 | 
					import com.owncloud.android.lib.common.operations.RemoteOperation
 | 
				
			||||||
import com.owncloud.android.lib.common.operations.RemoteOperationResult
 | 
					import com.owncloud.android.lib.common.operations.RemoteOperationResult
 | 
				
			||||||
 | 
					import com.owncloud.android.lib.resources.CommonOcsResponse
 | 
				
			||||||
import com.owncloud.android.lib.resources.shares.RemoteShare.Companion.INIT_EXPIRATION_DATE_IN_MILLIS
 | 
					import com.owncloud.android.lib.resources.shares.RemoteShare.Companion.INIT_EXPIRATION_DATE_IN_MILLIS
 | 
				
			||||||
 | 
					import com.owncloud.android.lib.resources.shares.responses.ShareItem
 | 
				
			||||||
 | 
					import com.squareup.moshi.JsonAdapter
 | 
				
			||||||
 | 
					import com.squareup.moshi.Moshi
 | 
				
			||||||
 | 
					import com.squareup.moshi.Types
 | 
				
			||||||
import okhttp3.FormBody
 | 
					import okhttp3.FormBody
 | 
				
			||||||
import timber.log.Timber
 | 
					import timber.log.Timber
 | 
				
			||||||
 | 
					import java.lang.reflect.Type
 | 
				
			||||||
import java.net.URL
 | 
					import java.net.URL
 | 
				
			||||||
import java.text.SimpleDateFormat
 | 
					import java.text.SimpleDateFormat
 | 
				
			||||||
import java.util.Calendar
 | 
					import java.util.Calendar
 | 
				
			||||||
import java.util.Locale
 | 
					import java.util.Locale
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * Creates a new share.  This allows sharing with a user or group or as a link.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * @author masensio
 | 
					 | 
				
			||||||
 * @author David A. Velasco
 | 
					 | 
				
			||||||
 * @author David González Verdugo
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Constructor
 | 
					 * Constructor
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
@ -71,6 +69,7 @@ class CreateRemoteShareOperation(
 | 
				
			|||||||
    private val shareWith: String,
 | 
					    private val shareWith: String,
 | 
				
			||||||
    private val permissions: Int
 | 
					    private val permissions: Int
 | 
				
			||||||
) : RemoteOperation<ShareResponse>() {
 | 
					) : RemoteOperation<ShareResponse>() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var name = "" // Name to set for the public link
 | 
					    var name = "" // Name to set for the public link
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var password: String = "" // Password to set for the public link
 | 
					    var password: String = "" // Password to set for the public link
 | 
				
			||||||
@ -81,10 +80,44 @@ class CreateRemoteShareOperation(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    var retrieveShareDetails = false // To retrieve more info about the just created share
 | 
					    var retrieveShareDetails = false // To retrieve more info about the just created share
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    override fun run(client: OwnCloudClient): RemoteOperationResult<ShareResponse> {
 | 
					    private fun buildRequestUri(baseUri: Uri) =
 | 
				
			||||||
        var result: RemoteOperationResult<ShareResponse>
 | 
					        baseUri.buildUpon()
 | 
				
			||||||
 | 
					            .appendEncodedPath(OCS_ROUTE)
 | 
				
			||||||
 | 
					            .appendQueryParameter(PARAM_FORMAT, VALUE_FORMAT)
 | 
				
			||||||
 | 
					            .build()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private fun parseResponse(response: String): ShareResponse? {
 | 
				
			||||||
 | 
					        val moshi = Moshi.Builder().build()
 | 
				
			||||||
 | 
					        val commonOcsType: Type = Types.newParameterizedType(CommonOcsResponse::class.java, ShareItem::class.java)
 | 
				
			||||||
 | 
					        val adapter: JsonAdapter<CommonOcsResponse<ShareItem>> = moshi.adapter(commonOcsType)
 | 
				
			||||||
 | 
					        val remoteShare = adapter.fromJson(response)?.ocs?.data?.toRemoteShare()
 | 
				
			||||||
 | 
					        return ShareResponse(remoteShare?.let { listOf(it) } ?: listOf())
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private fun onResultUnsuccessful(
 | 
				
			||||||
 | 
					        method: PostMethod,
 | 
				
			||||||
 | 
					        response: String?,
 | 
				
			||||||
 | 
					        status: Int
 | 
				
			||||||
 | 
					    ): RemoteOperationResult<ShareResponse> {
 | 
				
			||||||
 | 
					        Timber.e("Failed response while while creating new remote share operation ")
 | 
				
			||||||
 | 
					        if (response != null) {
 | 
				
			||||||
 | 
					            Timber.e("*** status code: $status; response message: $response")
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            Timber.e("*** status code: $status")
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return RemoteOperationResult(method)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private fun onRequestSuccessful(response: String?): RemoteOperationResult<ShareResponse> {
 | 
				
			||||||
 | 
					        val result = RemoteOperationResult<ShareResponse>(RemoteOperationResult.ResultCode.OK)
 | 
				
			||||||
 | 
					        Timber.d("Successful response: $response")
 | 
				
			||||||
 | 
					        result.data = parseResponse(response!!)
 | 
				
			||||||
 | 
					        Timber.d("*** Creating new remote share operation completed ")
 | 
				
			||||||
 | 
					        return result
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private fun createFormBodyBuilder(): FormBody.Builder {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        try {
 | 
					 | 
				
			||||||
        val formBodyBuilder = FormBody.Builder()
 | 
					        val formBodyBuilder = FormBody.Builder()
 | 
				
			||||||
            .add(PARAM_PATH, remoteFilePath)
 | 
					            .add(PARAM_PATH, remoteFilePath)
 | 
				
			||||||
            .add(PARAM_SHARE_TYPE, shareType.value.toString())
 | 
					            .add(PARAM_SHARE_TYPE, shareType.value.toString())
 | 
				
			||||||
@ -112,62 +145,55 @@ class CreateRemoteShareOperation(
 | 
				
			|||||||
            formBodyBuilder.add(PARAM_PERMISSIONS, permissions.toString())
 | 
					            formBodyBuilder.add(PARAM_PERMISSIONS, permissions.toString())
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            val requestUri = client.baseUri
 | 
					        return formBodyBuilder
 | 
				
			||||||
            val uriBuilder = requestUri.buildUpon()
 | 
					 | 
				
			||||||
            uriBuilder.appendEncodedPath(ShareUtils.SHARING_API_PATH)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            val postMethod = PostMethod(URL(uriBuilder.build().toString()), formBodyBuilder.build())
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            postMethod.setRequestHeader(HttpConstants.CONTENT_TYPE_HEADER, HttpConstants.CONTENT_TYPE_URLENCODED_UTF8)
 | 
					 | 
				
			||||||
            postMethod.addRequestHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            val status = client.executeHttpMethod(postMethod)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            val parser = ShareToRemoteOperationResultParser(
 | 
					 | 
				
			||||||
                ShareXMLParser()
 | 
					 | 
				
			||||||
            )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if (isSuccess(status)) {
 | 
					 | 
				
			||||||
                parser.oneOrMoreSharesRequired = true
 | 
					 | 
				
			||||||
                parser.ownCloudVersion = client.ownCloudVersion
 | 
					 | 
				
			||||||
                parser.serverBaseUri = client.baseUri
 | 
					 | 
				
			||||||
                result = parser.parse(postMethod.getResponseBodyAsString())
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (result.isSuccess && retrieveShareDetails) {
 | 
					 | 
				
			||||||
                    // retrieve more info - POST only returns the index of the new share
 | 
					 | 
				
			||||||
                    val emptyShare = result.data.shares[0]
 | 
					 | 
				
			||||||
                    val getShares = GetRemoteShareOperation(
 | 
					 | 
				
			||||||
                        emptyShare.id
 | 
					 | 
				
			||||||
                    )
 | 
					 | 
				
			||||||
                    val remoteOperationResult = getShares.execute(client)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    result = RemoteOperationResult(remoteOperationResult)
 | 
					 | 
				
			||||||
                    result.data = remoteOperationResult.data
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    override fun run(client: OwnCloudClient): RemoteOperationResult<ShareResponse> {
 | 
				
			||||||
 | 
					        val requestUri = buildRequestUri(client.baseUri)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        val formBodyBuilder = createFormBodyBuilder()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        val postMethod = PostMethod(URL(requestUri.toString()), formBodyBuilder.build()).apply {
 | 
				
			||||||
 | 
					            setRequestHeader(HttpConstants.CONTENT_TYPE_HEADER, HttpConstants.CONTENT_TYPE_URLENCODED_UTF8)
 | 
				
			||||||
 | 
					            addRequestHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE)
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return try {
 | 
				
			||||||
 | 
					            val status = client.executeHttpMethod(postMethod)
 | 
				
			||||||
 | 
					            val response = postMethod.getResponseBodyAsString()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (!isSuccess(status)) {
 | 
				
			||||||
 | 
					                onResultUnsuccessful(postMethod, response, status)
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                result = parser.parse(postMethod.getResponseBodyAsString())
 | 
					                onRequestSuccessful(response)
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        } catch (e: Exception) {
 | 
					        } catch (e: Exception) {
 | 
				
			||||||
            result = RemoteOperationResult(e)
 | 
					            Timber.e(e, "Exception while creating new remote share operation ")
 | 
				
			||||||
            Timber.e(e, "Exception while Creating New Share")
 | 
					            RemoteOperationResult(e)
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					 | 
				
			||||||
        return result
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private fun isSuccess(status: Int): Boolean = status == HttpConstants.HTTP_OK
 | 
					    private fun isSuccess(status: Int): Boolean = status == HttpConstants.HTTP_OK
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    companion object {
 | 
					    companion object {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //OCS Route
 | 
				
			||||||
 | 
					        private const val OCS_ROUTE = "ocs/v2.php/apps/files_sharing/api/v1/shares"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //Arguments - names
 | 
				
			||||||
 | 
					        private const val PARAM_FORMAT = "format"
 | 
				
			||||||
        private const val PARAM_NAME = "name"
 | 
					        private const val PARAM_NAME = "name"
 | 
				
			||||||
        private const val PARAM_PASSWORD = "password"
 | 
					 | 
				
			||||||
        private const val PARAM_EXPIRATION_DATE = "expireDate"
 | 
					        private const val PARAM_EXPIRATION_DATE = "expireDate"
 | 
				
			||||||
        private const val PARAM_PUBLIC_UPLOAD = "publicUpload"
 | 
					 | 
				
			||||||
        private const val PARAM_PATH = "path"
 | 
					        private const val PARAM_PATH = "path"
 | 
				
			||||||
        private const val PARAM_SHARE_TYPE = "shareType"
 | 
					        private const val PARAM_SHARE_TYPE = "shareType"
 | 
				
			||||||
        private const val PARAM_SHARE_WITH = "shareWith"
 | 
					        private const val PARAM_SHARE_WITH = "shareWith"
 | 
				
			||||||
 | 
					        private const val PARAM_PASSWORD = "password"
 | 
				
			||||||
 | 
					        private const val PARAM_PUBLIC_UPLOAD = "publicUpload"
 | 
				
			||||||
        private const val PARAM_PERMISSIONS = "permissions"
 | 
					        private const val PARAM_PERMISSIONS = "permissions"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //Arguments - constant values
 | 
				
			||||||
 | 
					        private const val VALUE_FORMAT = "json"
 | 
				
			||||||
        private const val FORMAT_EXPIRATION_DATE = "yyyy-MM-dd"
 | 
					        private const val FORMAT_EXPIRATION_DATE = "yyyy-MM-dd"
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user