Skip to content

Commit bf7907a

Browse files
committed
Legals: improve API to get homeserver terms
1 parent 6ba5c7a commit bf7907a

File tree

4 files changed

+34
-49
lines changed

4 files changed

+34
-49
lines changed

matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/terms/TermsService.kt

+9-6
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,12 @@
1616

1717
package org.matrix.android.sdk.api.session.terms
1818

19+
import org.matrix.android.sdk.internal.session.terms.TermsResponse
20+
1921
interface TermsService {
2022
enum class ServiceType {
2123
IntegrationManager,
22-
IdentityService,
23-
24-
/**
25-
* It's only possible to use this value for [getTerms]
26-
*/
27-
Homeserver
24+
IdentityService
2825
}
2926

3027
suspend fun getTerms(serviceType: ServiceType, baseUrl: String): GetTermsResponse
@@ -33,4 +30,10 @@ interface TermsService {
3330
baseUrl: String,
3431
agreedUrls: List<String>,
3532
token: String?)
33+
34+
/**
35+
* Get the homeserver terms, from the register API.
36+
* Will be updated once https://github.com./matrix-org/matrix-doc/pull/3012 will be implemented.
37+
*/
38+
suspend fun getHomeserverTerms(baseUrl: String): TermsResponse
3639
}

matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/terms/DefaultTermsService.kt

+12-31
Original file line numberDiff line numberDiff line change
@@ -51,51 +51,34 @@ internal class DefaultTermsService @Inject constructor(
5151

5252
override suspend fun getTerms(serviceType: TermsService.ServiceType,
5353
baseUrl: String): GetTermsResponse {
54-
return if (serviceType == TermsService.ServiceType.Homeserver) {
55-
getHomeserverTerms(baseUrl)
56-
} else {
57-
val url = buildUrl(baseUrl, serviceType)
58-
val termsResponse = executeRequest(null) {
59-
termsAPI.getTerms("${url}terms")
60-
}
61-
GetTermsResponse(termsResponse, getAlreadyAcceptedTermUrlsFromAccountData())
54+
val url = buildUrl(baseUrl, serviceType)
55+
val termsResponse = executeRequest(null) {
56+
termsAPI.getTerms("${url}terms")
6257
}
58+
return GetTermsResponse(termsResponse, getAlreadyAcceptedTermUrlsFromAccountData())
6359
}
6460

6561
/**
6662
* We use a trick here to get the homeserver T&C, we use the register API
6763
*/
68-
private suspend fun getHomeserverTerms(baseUrl: String): GetTermsResponse {
64+
override suspend fun getHomeserverTerms(baseUrl: String): TermsResponse {
6965
return try {
7066
executeRequest(null) {
7167
termsAPI.register(baseUrl + NetworkConstants.URI_API_PREFIX_PATH_R0 + "register")
7268
}
7369
// Return empty result if it succeed, but it should never happen
74-
buildEmptyGetTermsResponse()
70+
TermsResponse()
7571
} catch (throwable: Throwable) {
7672
@Suppress("UNCHECKED_CAST")
77-
((throwable.toRegistrationFlowResponse()
78-
?.params?.get(LoginFlowTypes.TERMS) as? JsonDict)
79-
?.get("policies") as? JsonDict)
80-
?.let { dict ->
81-
GetTermsResponse(
82-
serverResponse = TermsResponse(
83-
policies = dict
84-
),
85-
alreadyAcceptedTermUrls = emptySet()
86-
)
87-
}
88-
?: buildEmptyGetTermsResponse()
73+
TermsResponse(
74+
policies = (throwable.toRegistrationFlowResponse()
75+
?.params
76+
?.get(LoginFlowTypes.TERMS) as? JsonDict)
77+
?.get("policies") as? JsonDict
78+
)
8979
}
9080
}
9181

92-
private fun buildEmptyGetTermsResponse(): GetTermsResponse {
93-
return GetTermsResponse(
94-
serverResponse = TermsResponse(),
95-
alreadyAcceptedTermUrls = emptySet()
96-
)
97-
}
98-
9982
override suspend fun agreeToTerms(serviceType: TermsService.ServiceType,
10083
baseUrl: String,
10184
agreedUrls: List<String>,
@@ -133,8 +116,6 @@ internal class DefaultTermsService @Inject constructor(
133116
val servicePath = when (serviceType) {
134117
TermsService.ServiceType.IntegrationManager -> NetworkConstants.URI_INTEGRATION_MANAGER_PATH
135118
TermsService.ServiceType.IdentityService -> NetworkConstants.URI_IDENTITY_PATH_V2
136-
TermsService.ServiceType.Homeserver ->
137-
error("You cannot use this API with parameter TermsService.ServiceType.Homeserver")
138119
}
139120
return "${baseUrl.ensureTrailingSlash()}$servicePath"
140121
}

vector/src/main/java/im/vector/app/features/discovery/Extensions.kt

+13-11
Original file line numberDiff line numberDiff line change
@@ -19,25 +19,27 @@ package im.vector.app.features.discovery
1919
import im.vector.app.core.utils.ensureProtocol
2020
import org.matrix.android.sdk.api.session.Session
2121
import org.matrix.android.sdk.api.session.terms.TermsService
22+
import org.matrix.android.sdk.internal.session.terms.TermsResponse
2223

2324
suspend fun Session.fetchIdentityServerWithTerms(userLanguage: String): ServerAndPolicies? {
24-
val identityServerUrl = identityService().getCurrentIdentityServerUrl()
25-
return identityServerUrl?.let {
26-
fetchTerms(it, TermsService.ServiceType.IdentityService, userLanguage)
27-
}
25+
return identityService().getCurrentIdentityServerUrl()
26+
?.let { identityServerUrl ->
27+
val termsResponse = getTerms(TermsService.ServiceType.IdentityService, identityServerUrl.ensureProtocol())
28+
.serverResponse
29+
buildServerAndPolicies(identityServerUrl, termsResponse, userLanguage)
30+
}
2831
}
2932

3033
suspend fun Session.fetchHomeserverWithTerms(userLanguage: String): ServerAndPolicies {
3134
val homeserverUrl = sessionParams.homeServerUrl
32-
return fetchTerms(homeserverUrl, TermsService.ServiceType.Homeserver, userLanguage)
35+
val terms = getHomeserverTerms(homeserverUrl.ensureProtocol())
36+
return buildServerAndPolicies(homeserverUrl, terms, userLanguage)
3337
}
3438

35-
private suspend fun Session.fetchTerms(serviceUrl: String,
36-
serviceType: TermsService.ServiceType,
37-
userLanguage: String): ServerAndPolicies {
38-
val terms = getTerms(serviceType, serviceUrl.ensureProtocol())
39-
.serverResponse
40-
.getLocalizedTerms(userLanguage)
39+
private fun buildServerAndPolicies(serviceUrl: String,
40+
termsResponse: TermsResponse,
41+
userLanguage: String): ServerAndPolicies {
42+
val terms = termsResponse.getLocalizedTerms(userLanguage)
4143
val policyUrls = terms.mapNotNull {
4244
val name = it.localizedName ?: it.policyName
4345
val url = it.localizedUrl

vector/src/main/java/im/vector/app/features/terms/ReviewTermsFragment.kt

-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ class ReviewTermsFragment @Inject constructor(
5353
termsController.description = when (reviewTermsViewModel.termsArgs.type) {
5454
TermsService.ServiceType.IdentityService -> getString(R.string.terms_description_for_identity_server)
5555
TermsService.ServiceType.IntegrationManager -> getString(R.string.terms_description_for_integration_manager)
56-
TermsService.ServiceType.Homeserver -> error("Homeserver is not supported here")
5756
}
5857

5958
termsController.listener = this

0 commit comments

Comments
 (0)