Skip to content

Commit cc36cfe

Browse files
Merge pull request #17251 from MaqsudMallick/ingestModRewriteWorking
Use clean internal link when server mod_rewrite_working is true
2 parents c2775a1 + 4824325 commit cc36cfe

9 files changed

Lines changed: 1461 additions & 11 deletions

File tree

app/schemas/com.nextcloud.client.database.NextcloudDatabase/101.json

Lines changed: 1313 additions & 0 deletions
Large diffs are not rendered by default.

app/src/androidTest/java/com/owncloud/android/ui/fragment/FileDetailSharingFragmentIT.kt

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ import com.owncloud.android.lib.resources.shares.OCShare.Companion.NO_PERMISSION
3838
import com.owncloud.android.lib.resources.shares.OCShare.Companion.READ_PERMISSION_FLAG
3939
import com.owncloud.android.lib.resources.shares.OCShare.Companion.SHARE_PERMISSION_FLAG
4040
import com.owncloud.android.lib.resources.shares.ShareType
41+
import com.owncloud.android.lib.resources.status.CapabilityBooleanType
42+
import com.owncloud.android.lib.resources.status.OCCapability
4143
import com.owncloud.android.ui.activity.FileDisplayActivity
4244
import com.owncloud.android.ui.fragment.util.SharePermissionManager
4345
import com.owncloud.android.utils.ScreenshotTest
@@ -46,6 +48,8 @@ import org.hamcrest.CoreMatchers.anyOf
4648
import org.hamcrest.CoreMatchers.`is`
4749
import org.hamcrest.CoreMatchers.not
4850
import org.junit.Assert.assertEquals
51+
import org.junit.Assert.assertFalse
52+
import org.junit.Assert.assertTrue
4953
import org.junit.Before
5054
import org.junit.Rule
5155
import org.junit.Test
@@ -892,4 +896,55 @@ class FileDetailSharingFragmentIT : AbstractIT() {
892896
assertEquals("Failed for permission: $permission", expected, SharePermissionManager.isFileRequest(share))
893897
}
894898
}
899+
900+
@Test
901+
fun internalLinkUsesPrettyPathWhenModRewriteWorking() {
902+
launchActivity<TestActivity>().use { scenario ->
903+
var sut: FileDetailSharingFragment? = null
904+
scenario.onActivity { activity ->
905+
sut = FileDetailSharingFragment.newInstance(file, user)
906+
activity.addFragment(sut)
907+
activity.supportFragmentManager.executePendingTransactions()
908+
}
909+
910+
val capabilities = OCCapability().apply { modRewriteWorking = CapabilityBooleanType.TRUE }
911+
val link = sut!!.createInternalLink(user, file, capabilities)
912+
913+
assertTrue(link.endsWith("/f/" + file.localId))
914+
assertFalse(link.contains("/index.php/"))
915+
}
916+
}
917+
918+
@Test
919+
fun internalLinkUsesDefaultPathWhenModRewriteNotWorking() {
920+
launchActivity<TestActivity>().use { scenario ->
921+
var sut: FileDetailSharingFragment? = null
922+
scenario.onActivity { activity ->
923+
sut = FileDetailSharingFragment.newInstance(file, user)
924+
activity.addFragment(sut)
925+
activity.supportFragmentManager.executePendingTransactions()
926+
}
927+
928+
val capabilities = OCCapability().apply { modRewriteWorking = CapabilityBooleanType.FALSE }
929+
val link = sut!!.createInternalLink(user, file, capabilities)
930+
931+
assertTrue(link.endsWith("/index.php/f/" + file.localId))
932+
}
933+
}
934+
935+
@Test
936+
fun internalLinkFallsBackToDefaultPathWhenCapabilitiesNull() {
937+
launchActivity<TestActivity>().use { scenario ->
938+
var sut: FileDetailSharingFragment? = null
939+
scenario.onActivity { activity ->
940+
sut = FileDetailSharingFragment.newInstance(file, user)
941+
activity.addFragment(sut)
942+
activity.supportFragmentManager.executePendingTransactions()
943+
}
944+
945+
val link = sut!!.createInternalLink(user, file, null)
946+
947+
assertTrue(link.endsWith("/index.php/f/" + file.localId))
948+
}
949+
}
895950
}

app/src/main/java/com/nextcloud/client/database/NextcloudDatabase.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,9 @@ import com.owncloud.android.db.ProviderMeta
9797
AutoMigration(from = 95, to = 96),
9898
AutoMigration(from = 96, to = 97, spec = DatabaseMigrationUtil.ResetCapabilitiesPostMigration::class),
9999
// manual migration used for 97 to 98
100-
AutoMigration(from = 98, to = 99)
100+
AutoMigration(from = 98, to = 99),
101101
// manual migration used for 99 to 100
102+
AutoMigration(from = 100, to = 101, spec = DatabaseMigrationUtil.ResetCapabilitiesPostMigration::class)
102103
],
103104
exportSchema = true
104105
)

app/src/main/java/com/nextcloud/client/database/entity/CapabilityEntity.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,9 @@ data class CapabilityEntity(
151151
@ColumnInfo(name = ProviderTableMeta.CAPABILITIES_HAS_VALID_SUBSCRIPTION)
152152
val hasValidSubscription: Int?,
153153
@ColumnInfo(name = ProviderTableMeta.CAPABILITIES_CLIENT_INTEGRATION_JSON)
154-
val clientIntegrationJson: String?
154+
val clientIntegrationJson: String?,
155+
@ColumnInfo(name = ProviderTableMeta.CAPABILITIES_MOD_REWRITE_WORKING)
156+
val modRewriteWorking: Int?
155157
)
156158

157159
@Suppress("LongMethod", "ReturnCount")
@@ -232,6 +234,7 @@ fun CapabilityEntity?.toOCCapability(): OCCapability {
232234
capability.defaultPermissions = this.defaultPermissions ?: 0
233235
capability.hasValidSubscription = intToBoolean(this.hasValidSubscription)
234236
capability.clientIntegrationJson = this.clientIntegrationJson
237+
capability.modRewriteWorking = intToBoolean(this.modRewriteWorking)
235238

236239
return capability
237240
}

app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2415,6 +2415,8 @@ private ContentValues createContentValues(String accountName, OCCapability capab
24152415

24162416
contentValues.put(ProviderTableMeta.CAPABILITIES_CLIENT_INTEGRATION_JSON, capability.getClientIntegrationJson());
24172417

2418+
contentValues.put(ProviderTableMeta.CAPABILITIES_MOD_REWRITE_WORKING, capability.getModRewriteWorking().getValue());
2419+
24182420
return contentValues;
24192421
}
24202422

@@ -2612,6 +2614,8 @@ private OCCapability createCapabilityInstance(Cursor cursor) {
26122614
capability.setHasValidSubscription(getBoolean(cursor, ProviderTableMeta.CAPABILITIES_HAS_VALID_SUBSCRIPTION));
26132615

26142616
capability.setClientIntegrationJson(getString(cursor, ProviderTableMeta.CAPABILITIES_CLIENT_INTEGRATION_JSON));
2617+
2618+
capability.setModRewriteWorking(getBoolean(cursor, ProviderTableMeta.CAPABILITIES_MOD_REWRITE_WORKING));
26152619
}
26162620

26172621
return capability;

app/src/main/java/com/owncloud/android/db/ProviderMeta.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
*/
2424
public class ProviderMeta {
2525
public static final String DB_NAME = "filelist";
26-
public static final int DB_VERSION = 100;
26+
public static final int DB_VERSION = 101;
2727

2828
private ProviderMeta() {
2929
// No instance
@@ -293,6 +293,7 @@ static public class ProviderTableMeta implements BaseColumns {
293293
public static final String CAPABILITIES_DEFAULT_PERMISSIONS = "default_permissions";
294294
public static final String CAPABILITIES_HAS_VALID_SUBSCRIPTION = "has_valid_subscription";
295295
public static final String CAPABILITIES_CLIENT_INTEGRATION_JSON = "client_integration_json";
296+
public static final String CAPABILITIES_MOD_REWRITE_WORKING = "mod_rewrite_working";
296297

297298
//Columns of Uploads table
298299
public static final String UPLOADS_LOCAL_PATH = "local_path";

app/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.kt

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ import com.owncloud.android.datamodel.FileDataStorageManager
4747
import com.owncloud.android.datamodel.OCFile
4848
import com.owncloud.android.datamodel.SharesType
4949
import com.owncloud.android.datamodel.e2e.v2.decrypted.DecryptedFolderMetadataFile
50-
import com.owncloud.android.lib.common.OwnCloudAccount
5150
import com.owncloud.android.lib.common.accounts.AccountUtils
5251
import com.owncloud.android.lib.common.operations.RemoteOperationResult
5352
import com.owncloud.android.lib.common.utils.Log_OC
@@ -495,8 +494,15 @@ class FileDetailSharingFragment :
495494
binding.sharedWithYouNoteContainer.visibility = View.GONE
496495
}
497496

498-
private fun createInternalLink(account: OwnCloudAccount, file: OCFile): String =
499-
account.baseUri.toString() + "/index.php/f/" + file.localId
497+
@VisibleForTesting
498+
internal fun createInternalLink(user: User, file: OCFile, capabilities: OCCapability?): String {
499+
val linkPath = if (capabilities?.modRewriteWorking?.isTrue == true) {
500+
INTERNAL_LINK_PATH_PRETTY
501+
} else {
502+
INTERNAL_LINK_PATH_DEFAULT
503+
}
504+
return user.server.uri.toString() + linkPath + file.localId
505+
}
500506

501507
private fun showSendLinkTo(publicShare: OCShare) {
502508
val file = file ?: return
@@ -685,14 +691,14 @@ class FileDetailSharingFragment :
685691
}
686692

687693
override fun copyInternalLink() {
688-
val account = accountManager.getCurrentOwnCloudAccount()
694+
val user = user
689695

690-
if (account == null) {
696+
if (user == null) {
691697
DisplayUtils.showSnackMessage(this, R.string.could_not_retrieve_url)
692698
return
693699
}
694700

695-
file?.let { FileActivity.showShareLinkDialog(fileActivity, file, createInternalLink(account, it)) }
701+
file?.let { FileActivity.showShareLinkDialog(fileActivity, file, createInternalLink(user, it, capabilities)) }
696702
}
697703

698704
private fun OCCapability?.isPasswordEnforced(): Boolean =
@@ -891,6 +897,8 @@ class FileDetailSharingFragment :
891897
private const val ARG_FILE = "FILE"
892898
private const val ARG_USER = "USER"
893899
private const val MIN_SHOW_ALL_VISIBLE_ITEM_COUNT = 3
900+
private const val INTERNAL_LINK_PATH_PRETTY = "/f/"
901+
private const val INTERNAL_LINK_PATH_DEFAULT = "/index.php/f/"
894902

895903
@JvmStatic
896904
fun newInstance(file: OCFile?, user: User?): FileDetailSharingFragment = FileDetailSharingFragment().apply {

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
androidCommonLibraryVersion = "0.33.2"
66
androidGifDrawableVersion = "1.2.32"
77
androidImageCropperVersion = "4.7.0"
8-
androidLibraryVersion ="ed9da9b157a78af1c754dea197442c6727666e37"
8+
androidLibraryVersion ="72a95a990f57135ef2b658d49a99dd193dcd6671"
99
androidOpensslVersion = "3.5.6"
1010
androidPluginVersion = "9.2.1"
1111
androidsvgVersion = "1.4"

gradle/verification-metadata.xml

Lines changed: 66 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818
<trust file=".*-javadoc[.]jar" regex="true" reason="Android Studio downloads javadoc jars but doesn't add checksums - fixes building in AS"/>
1919
<trust file=".*-sources[.]jar" regex="true" reason="Android Studio downloads source jars but doesn't add checksums - fixes building in AS"/>
2020
</trusted-artifacts>
21+
<ignored-keys>
22+
<ignored-key id="80EF47E549604C05" reason="Key couldn't be downloaded from any key server"/>
23+
</ignored-keys>
2124
<trusted-keys>
2225
<trusted-key id="015479E1055341431B4545AB72475FD306B9CAB7" group="com.googlecode.javaewah" name="JavaEWAH" version="1.2.3"/>
2326
<trusted-key id="03C123038C20AAE9E286C857479D601F3A7B5C1A" group="^com[.]github[.]ajalt($|([.].*))" regex="true"/>
@@ -345,7 +348,10 @@
345348
<trusting group="com.linkedin.dexmaker" name="dexmaker" version="2.28.3"/>
346349
<trusting group="com.linkedin.dexmaker" name="dexmaker" version="2.28.6"/>
347350
</trusted-key>
348-
<trusted-key id="8E3A02905A1AE67E7B0F9ACD3967D4EDA591B991" group="org.jetbrains.kotlinx" name="kotlinx-html-jvm" version="0.8.1"/>
351+
<trusted-key id="8E3A02905A1AE67E7B0F9ACD3967D4EDA591B991">
352+
<trusting group="io.ktor"/>
353+
<trusting group="org.jetbrains.kotlinx" name="kotlinx-html-jvm" version="0.8.1"/>
354+
</trusted-key>
349355
<trusted-key id="8F9A3C6D105B9F57844A721D79E193516BE7998F">
350356
<trusting group="org.dom4j" name="dom4j" version="2.1.3"/>
351357
<trusting group="org.dom4j" name="dom4j" version="2.1.4"/>
@@ -20299,6 +20305,11 @@
2029920305
<sha256 value="25eafd96dae242b6b5a7108f55b2c14015b828daa5abe234289fd6e774a1ce57" origin="Generated by Gradle"/>
2030020306
</artifact>
2030120307
</component>
20308+
<component group="com.fasterxml" name="oss-parent" version="69">
20309+
<artifact name="oss-parent-69.pom">
20310+
<sha256 value="3856d584aaa1c8e33ce94c67244f71f6f70538a259ffe8e781761b9faaad875f" origin="Generated by Gradle"/>
20311+
</artifact>
20312+
</component>
2030220313
<component group="com.fasterxml.jackson" name="jackson-base" version="2.12.7">
2030320314
<artifact name="jackson-base-2.12.7.pom">
2030420315
<sha256 value="179e54fe26c8d4dfe925fee31d4a87d1cc25f8b7e00948a4e656b1229e2b76ae" origin="Generated by Gradle"/>
@@ -20354,6 +20365,11 @@
2035420365
<sha256 value="ba6d68eeab3a1cc13a77a8ade2197ff9a32aa1cffeac72847d49badd82e1b9ce" origin="Generated by Gradle"/>
2035520366
</artifact>
2035620367
</component>
20368+
<component group="com.fasterxml.jackson" name="jackson-bom" version="2.19.2">
20369+
<artifact name="jackson-bom-2.19.2.pom">
20370+
<sha256 value="22006be70fd018099e99c6c27ac0982320f3a0f3c2ce053c55703579a5eea303" origin="Generated by Gradle"/>
20371+
</artifact>
20372+
</component>
2035720373
<component group="com.fasterxml.jackson" name="jackson-bom" version="2.9.10">
2035820374
<artifact name="jackson-bom-2.9.10.pom">
2035920375
<sha256 value="417043dbe6445aa3f733d1bb8fbab1e7e1dfcd18cd9fb290101b03131b7d3a6c" origin="Generated by Gradle"/>
@@ -20394,6 +20410,11 @@
2039420410
<sha256 value="639a2b63dd05da4e381081303985caadfbb7ad9f85b1d2320638f6b11f208365" origin="Generated by Gradle"/>
2039520411
</artifact>
2039620412
</component>
20413+
<component group="com.fasterxml.jackson" name="jackson-parent" version="2.19.3">
20414+
<artifact name="jackson-parent-2.19.3.pom">
20415+
<sha256 value="23d186c8d8cd06015d022c710c715423d660d49e2973b15870b029cc26018682" origin="Generated by Gradle"/>
20416+
</artifact>
20417+
</component>
2039720418
<component group="com.fasterxml.jackson" name="jackson-parent" version="2.9.1.2">
2039820419
<artifact name="jackson-parent-2.9.1.2.pom">
2039920420
<sha256 value="9517e405c6b3b8a035215ad5727013a3519eb7591743fe1dcc04df6635683cf9" origin="Generated by Gradle"/>
@@ -20669,6 +20690,14 @@
2066920690
</sha256>
2067020691
</artifact>
2067120692
</component>
20693+
<component group="com.github.bitfireAT" name="dav4jvm" version="3.0.0">
20694+
<artifact name="dav4jvm-3.0.0.jar">
20695+
<sha256 value="c5ef30a8974c9ae4146bb3668679a0d482364473a5f5c3f63e587c47d2eca348" origin="Generated by Gradle" reason="Artifact is not signed"/>
20696+
</artifact>
20697+
<artifact name="dav4jvm-3.0.0.module">
20698+
<sha256 value="7fbbc552d7368182cfaf9d0d76cac0f782c6371b6d3d44c7f6e75690e1536d52" origin="Generated by Gradle" reason="Artifact is not signed"/>
20699+
</artifact>
20700+
</component>
2067220701
<component group="com.github.bumptech.glide" name="annotations" version="4.16.0">
2067320702
<artifact name="annotations-4.16.0.jar">
2067420703
<sha256 value="c59e39b1b31b4d5592277cd90012149d740b569d4338f56443cac82c3fbda3d1" origin="Generated by Gradle"/>
@@ -21469,6 +21498,14 @@
2146921498
<sha256 value="0e72841878595f83c6d8f93aa51f78a67e821f53446fcb7a5d94cfaad8ebbbac" origin="Generated by Gradle" reason="Artifact is not signed"/>
2147021499
</artifact>
2147121500
</component>
21501+
<component group="com.github.nextcloud" name="android-library" version="72a95a990f57135ef2b658d49a99dd193dcd6671">
21502+
<artifact name="android-library-72a95a990f57135ef2b658d49a99dd193dcd6671.aar">
21503+
<sha256 value="f35f27eaf3e42beee0c67fbb41d11eeceb48b9bee9d6d4f91640d7db1cf329d5" origin="Generated by Gradle" reason="Artifact is not signed"/>
21504+
</artifact>
21505+
<artifact name="android-library-72a95a990f57135ef2b658d49a99dd193dcd6671.pom">
21506+
<sha256 value="132a08f8f97c9c43dc946250ca612c47197b4bc35ee634299c228c9981497d41" origin="Generated by Gradle" reason="Artifact is not signed"/>
21507+
</artifact>
21508+
</component>
2147221509
<component group="com.github.nextcloud" name="android-library" version="72d739551d">
2147321510
<artifact name="android-library-72d739551d.aar">
2147421511
<sha256 value="587886bac4903337dbbb379ba2b3452066427241d97150423a3b966418b9dd91" origin="Generated by Gradle" reason="Artifact is not signed"/>
@@ -30823,11 +30860,24 @@
3082330860
<sha256 value="3c507f5b485842374cefa5148b46f99850f692900e16adc22fa04e75340c6dff" origin="Generated by Gradle"/>
3082430861
</artifact>
3082530862
</component>
30863+
<component group="jaxen" name="jaxen" version="2.0.6">
30864+
<artifact name="jaxen-2.0.6.jar">
30865+
<sha256 value="3e2a755b283fd492fa4be204294c7abb7cd63ac94fb366baab9c7bb9afb00b6d" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
30866+
</artifact>
30867+
<artifact name="jaxen-2.0.6.pom">
30868+
<sha256 value="154da1400c3a405860ec3ae58e974c700033a646287c0bb6aa55c763871eb503" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
30869+
</artifact>
30870+
</component>
3082630871
<component group="jaxen" name="jaxen-parent" version="2.0.0">
3082730872
<artifact name="jaxen-parent-2.0.0.pom">
3082830873
<sha256 value="263387fed91cc35813bffcd51efc60d5122d2043124ff49f94e35118169857e2" origin="Generated by Gradle"/>
3082930874
</artifact>
3083030875
</component>
30876+
<component group="jaxen" name="jaxen-parent" version="2.0.6">
30877+
<artifact name="jaxen-parent-2.0.6.pom">
30878+
<sha256 value="21b45b6bdc6e8fc4c27f938ac111b1e86322c5627b79bb3e381f8ce72e64fe16" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
30879+
</artifact>
30880+
</component>
3083130881
<component group="junit" name="junit" version="4.12">
3083230882
<artifact name="junit-4.12.jar">
3083330883
<sha256 value="59721f0805e223d84b90677887d9ff567dc534d7c502ca903c0c2b17f05c116a" origin="Generated by Gradle"/>
@@ -39342,6 +39392,11 @@
3934239392
<sha256 value="150c40287f7cecdc21b9380caac98e928c4f33c023db6b348df1c5ac977026bf" origin="Generated by Gradle"/>
3934339393
</artifact>
3934439394
</component>
39395+
<component group="org.slf4j" name="slf4j-api" version="2.0.18">
39396+
<artifact name="slf4j-api-2.0.18.pom">
39397+
<sha256 value="6c2c7f2c02774cc2b7b619fbd2df7873cdad29718926e44754b87f70d1eb43cb" origin="Generated by Gradle"/>
39398+
</artifact>
39399+
</component>
3934539400
<component group="org.slf4j" name="slf4j-api" version="2.0.7">
3934639401
<artifact name="slf4j-api-2.0.7.jar">
3934739402
<sha256 value="5d6298b93a1905c32cda6478808ac14c2d4a47e91535e53c41f7feeb85d946f4" origin="Generated by Gradle"/>
@@ -39373,6 +39428,11 @@
3937339428
<sha256 value="f78d27b642b4b886eb839fc102b5cd9fe7f30f37599ffe68185be4e1609031e9" origin="Generated by Gradle"/>
3937439429
</artifact>
3937539430
</component>
39431+
<component group="org.slf4j" name="slf4j-bom" version="2.0.18">
39432+
<artifact name="slf4j-bom-2.0.18.pom">
39433+
<sha256 value="9219aab601575126c4e66e1331eb2b0c6c17a330ac4d5a07e3cd11d580a0c12d" origin="Generated by Gradle"/>
39434+
</artifact>
39435+
</component>
3937639436
<component group="org.slf4j" name="slf4j-bom" version="2.0.9">
3937739437
<artifact name="slf4j-bom-2.0.9.pom">
3937839438
<sha256 value="eaef4584807d812c6a0b6cf839d5e47f50c754327719b9ce081e271d15da6243" origin="Generated by Gradle"/>
@@ -39423,6 +39483,11 @@
3942339483
<sha256 value="95cd71e852dfdb29126e58b7b939d57ec2b2e6024391852e0b545dee082bbf3b" origin="Generated by Gradle"/>
3942439484
</artifact>
3942539485
</component>
39486+
<component group="org.slf4j" name="slf4j-parent" version="2.0.18">
39487+
<artifact name="slf4j-parent-2.0.18.pom">
39488+
<sha256 value="0b3896bedad2c9ed9697edcbea1da0c54cd238a723583a81358a83bfb782e9fa" origin="Generated by Gradle"/>
39489+
</artifact>
39490+
</component>
3942639491
<component group="org.slf4j" name="slf4j-parent" version="2.0.7">
3942739492
<artifact name="slf4j-parent-2.0.7.pom">
3942839493
<sha256 value="c182bb36cd3af1c93c1603cdfefe7889157db30ba8b584f4a44535fcd22e45e7" origin="Generated by Gradle"/>

0 commit comments

Comments
 (0)