Skip to content

Commit 6813197

Browse files
authored
Merge pull request #555 from jorgeblacio/release_0_21_17
Various bug fixes for new release.
2 parents 2d0147e + 5663605 commit 6813197

File tree

10 files changed

+50
-13
lines changed

10 files changed

+50
-13
lines changed

build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ android {
4747
defaultConfig {
4848
minSdkVersion 21
4949
targetSdkVersion 28
50-
versionCode 93
51-
versionName "0.21.16"
50+
versionCode 94
51+
versionName "0.21.17"
5252
applicationId "com.criptext.mail"
5353
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
5454
multiDexEnabled true

src/main/kotlin/com/criptext/mail/scenes/emaildetail/EmailDetailSceneController.kt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -893,16 +893,18 @@ class EmailDetailSceneController(private val storage: KeyValueStorage,
893893
}
894894

895895
override fun onPause(){
896-
cleanup()
896+
cleanup(false)
897897
}
898898

899899
override fun onStop() {
900-
cleanup()
900+
cleanup(true)
901901
}
902902

903-
private fun cleanup(){
904-
dataSource.listener = null
905-
generalDataSource.listener = null
903+
private fun cleanup(cleanDataSources: Boolean){
904+
if(cleanDataSources) {
905+
dataSource.listener = null
906+
generalDataSource.listener = null
907+
}
906908
websocketEvents.clearListener(webSocketEventListener)
907909
}
908910

src/main/kotlin/com/criptext/mail/scenes/signin/SignInSceneController.kt

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import com.criptext.mail.db.models.ActiveAccount
1212
import com.criptext.mail.db.models.Contact
1313
import com.criptext.mail.scenes.ActivityMessage
1414
import com.criptext.mail.scenes.SceneController
15+
import com.criptext.mail.scenes.composer.data.ContactDomainCheckData
1516
import com.criptext.mail.scenes.params.MailboxParams
1617
import com.criptext.mail.scenes.params.SignUpParams
1718
import com.criptext.mail.scenes.settings.DevicesListItemListener
@@ -456,9 +457,13 @@ class SignInSceneController(
456457
} else {
457458
Pair(userInput.value, Contact.mainDomain)
458459
}
459-
val newRequest = SignInRequest.CheckUserAvailability(recipientId, domain)
460-
dataSource.submitRequest(newRequest)
461-
scene.setSubmitButtonState(ProgressButtonState.waiting)
460+
if(model.checkedDomains.map { it.name }.contains(domain))
461+
scene.drawInputError(UIMessage(R.string.username_is_not_criptext))
462+
else {
463+
val newRequest = SignInRequest.CheckUserAvailability(recipientId, domain)
464+
dataSource.submitRequest(newRequest)
465+
scene.setSubmitButtonState(ProgressButtonState.waiting)
466+
}
462467
}
463468
is FormData.Error ->
464469
scene.drawInputError(userInput.message)
@@ -813,6 +818,9 @@ class SignInSceneController(
813818
}
814819

815820
override fun onStart(activityMessage: ActivityMessage?): Boolean {
821+
model.checkedDomains.addAll(
822+
ContactDomainCheckData.KNOWN_EXTERNAL_DOMAINS.filter { !it.isCriptextDomain }
823+
)
816824
dataSource.listener = dataSourceListener
817825
generalDataSource.listener = generalDataSourceListener
818826
scene.initLayout(model = model, signInUIObserver = uiObserver)

src/main/kotlin/com/criptext/mail/scenes/signin/SignInSceneModel.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.criptext.mail.scenes.signin
22

33
import com.criptext.mail.db.models.ActiveAccount
44
import com.criptext.mail.scenes.SceneModel
5+
import com.criptext.mail.scenes.composer.data.ContactDomainCheckData
56
import com.criptext.mail.scenes.settings.devices.data.DeviceItem
67
import com.criptext.mail.scenes.signin.data.LinkDeviceState
78
import com.criptext.mail.scenes.signin.holders.SignInLayoutState
@@ -33,4 +34,5 @@ class SignInSceneModel(val isMultiple: Boolean = false) : SceneModel {
3334
var needToRemoveDevices = false
3435
var temporalJWT = ""
3536
var devices: ArrayList<DeviceItem> = ArrayList()
37+
var checkedDomains = mutableListOf<ContactDomainCheckData>()
3638
}

src/main/kotlin/com/criptext/mail/scenes/signup/SignUpSceneController.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ class SignUpSceneController(
6565
val newUsername = if (text.isEmpty()) {
6666
model.username.copy(state = FormInputState.Unknown())
6767
} else {
68-
val userInput = AccountDataValidator.validateUsername(text)
68+
val userInput = AccountDataValidator.validateUsernameOnly(text)
6969
when (userInput) {
7070
is FormData.Valid -> {
7171
runnableThrottler.push(Runnable {

src/main/kotlin/com/criptext/mail/utils/HTMLUtils.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,7 @@ class HTMLUtils {
9797
}
9898

9999
fun addCriptextFooter(body: String): String{
100-
val watermarkString = "<div></div><br><br>Sent with <a href=\"https://goo.gl/qW4Aks\" " +
101-
"style=\"color: rgb(0,145,255)\">Criptext</a> secure email"
100+
val watermarkString = "<div></div><br><br><i>Sent with Criptext secure email</i>"
102101
if(body.contains(watermarkString)) return body
103102
return body.plus(watermarkString)
104103
}

src/main/kotlin/com/criptext/mail/validation/AccountDataValidator.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,16 @@ object AccountDataValidator {
3737
FormData.Valid(sanitizedValue)
3838
}
3939

40+
fun validateUsernameOnly(username: String): FormData<String> {
41+
val sanitizedValue = username.trim().toLowerCase()
42+
43+
return when {
44+
sanitizedValue.length < 3 -> FormData.Error(UIMessage(R.string.username_length_error))
45+
!validCriptextUserPattern.matcher(sanitizedValue).matches() -> FormData.Error(UIMessage(R.string.username_invalid_error))
46+
else -> FormData.Valid(sanitizedValue)
47+
}
48+
}
49+
4050
fun validateFullName(fullName: String): FormData<String> {
4151
val sanitizedValue = fullName.trim()
4252

src/main/res/values-es/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -585,4 +585,5 @@
585585
<string name="rate_us_message">Si es así, ayúdanos con una calificación. ¡Gracias por tu apoyo!</string>
586586
<string name="rate_us">Calificar</string>
587587
<string name="rate_remind_later">Recordar Luego</string>
588+
<string name="username_is_not_criptext">El usuario o dirección de correo no pertenece a Criptext.</string>
588589
</resources>

src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -585,4 +585,5 @@
585585
<string name="rate_us_message">If you do, please take a moment to rate it. Thanks for your support!</string>
586586
<string name="rate_us">Rate Us</string>
587587
<string name="rate_remind_later">Remind Later</string>
588+
<string name="username_is_not_criptext">Not a valid Criptext address or username.</string>
588589
</resources>

src/test/java/com/criptext/mail/scenes/signup/data/AccountDataValidatorTest.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,47 +15,61 @@ class AccountDataValidatorTest {
1515
fun `validateUsername should return valid if receives a valid username`() {
1616
val myUsername = "tester"
1717
AccountDataValidator.validateUsername(myUsername) `should equal` FormData.Valid("tester")
18+
AccountDataValidator.validateUsernameOnly(myUsername) `should equal` FormData.Valid("tester")
1819
}
1920

2021
@Test
2122
fun `validateUsername should return valid if receives less than 3 characters`() {
2223
val myUsername = "t"
2324
AccountDataValidator.validateUsername(myUsername) `should be instance of` FormData.Error::class.java
25+
AccountDataValidator.validateUsernameOnly(myUsername) `should be instance of` FormData.Error::class.java
2426
}
2527

2628
@Test
2729
fun `validateUsername should return error if receives spaces in the middle of the username`() {
2830
val myUsername = "anew tester"
2931
AccountDataValidator.validateUsername(myUsername) `should be instance of` FormData.Error::class.java
32+
AccountDataValidator.validateUsernameOnly(myUsername) `should be instance of` FormData.Error::class.java
3033
}
3134

3235
@Test
3336
fun `validateUsername should return error if receives invalid characters in username`() {
3437
val myUsername = "test#"
3538
AccountDataValidator.validateUsername(myUsername) `should be instance of` FormData.Error::class.java
39+
AccountDataValidator.validateUsernameOnly(myUsername) `should be instance of` FormData.Error::class.java
3640
}
3741

3842
@Test
3943
fun `validateUsername should return error if username starts with dot`() {
4044
val myUsername = ".tester"
4145
AccountDataValidator.validateUsername(myUsername) `should be instance of` FormData.Error::class.java
46+
AccountDataValidator.validateUsernameOnly(myUsername) `should be instance of` FormData.Error::class.java
4247
}
4348

4449
@Test
4550
fun `validateUsername should return valid if receives dots, dashes or lowdashes in username`() {
4651
val myUsername = "test.t_est-er05"
4752
AccountDataValidator.validateUsername(myUsername) `should be instance of` FormData.Valid::class.java
53+
AccountDataValidator.validateUsernameOnly(myUsername) `should be instance of` FormData.Valid::class.java
4854
}
4955

5056
@Test
5157
fun `validateEmailAddress should return valid if receives a valid address`() {
5258
val address = "[email protected]"
5359
AccountDataValidator.validateEmailAddress(address) `should equal` FormData.Valid(address)
60+
AccountDataValidator.validateUsername(address) `should equal` FormData.Valid(address)
61+
}
62+
63+
@Test
64+
fun `validateUsernameOnly should return error if receives an email address`() {
65+
val address = "[email protected]"
66+
AccountDataValidator.validateUsernameOnly(address) `should be instance of` FormData.Error::class.java
5467
}
5568

5669
@Test
5770
fun `validateEmailAddress should return error if receives angular brackets and spaces`() {
5871
val address = "Some User <[email protected]>"
5972
AccountDataValidator.validateEmailAddress(address) `should be instance of` FormData.Error::class.java
73+
AccountDataValidator.validateUsername(address) `should be instance of` FormData.Error::class.java
6074
}
6175
}

0 commit comments

Comments
 (0)