summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTorsten Grote <t@grobox.de>2023-04-13 14:22:31 -0300
committerTorsten Grote <t@grobox.de>2023-04-13 14:22:31 -0300
commit513c2cee26be3fd837ba6df8ef21ee3116ca9cf9 (patch)
tree3cc7d194952a8ac6d92c5653b9df491b1ec655aa
parente90570d8f6095d69813f31444f2450193ce729ea (diff)
downloadtaler-android-513c2cee26be3fd837ba6df8ef21ee3116ca9cf9.tar.gz
taler-android-513c2cee26be3fd837ba6df8ef21ee3116ca9cf9.tar.bz2
taler-android-513c2cee26be3fd837ba6df8ef21ee3116ca9cf9.zip
[wallet] Do some minimal BIC validation for bank deposits
-rw-r--r--wallet/src/main/java/net/taler/wallet/deposit/MakeDepositComposable.kt26
-rw-r--r--wallet/src/main/res/values/strings.xml1
2 files changed, 26 insertions, 1 deletions
diff --git a/wallet/src/main/java/net/taler/wallet/deposit/MakeDepositComposable.kt b/wallet/src/main/java/net/taler/wallet/deposit/MakeDepositComposable.kt
index 176ff97..3c93ed7 100644
--- a/wallet/src/main/java/net/taler/wallet/deposit/MakeDepositComposable.kt
+++ b/wallet/src/main/java/net/taler/wallet/deposit/MakeDepositComposable.kt
@@ -68,6 +68,7 @@ fun MakeDepositComposable(
var name by rememberSaveable { mutableStateOf(presetName ?: "") }
var iban by rememberSaveable { mutableStateOf(presetIban ?: "") }
var bic by rememberSaveable { mutableStateOf("") }
+ var bicInvalid by rememberSaveable { mutableStateOf(false) }
val focusRequester = remember { FocusRequester() }
OutlinedTextField(
modifier = Modifier
@@ -125,8 +126,19 @@ fun MakeDepositComposable(
value = bic,
enabled = !state.showFees,
onValueChange = { input ->
+ bicInvalid = false
bic = input
},
+ isError = bicInvalid,
+ supportingText = {
+ if (bicInvalid) {
+ Text(
+ modifier = Modifier.fillMaxWidth(),
+ text = stringResource(R.string.send_deposit_bic_error),
+ color = MaterialTheme.colorScheme.error
+ )
+ }
+ },
label = {
Text(
text = stringResource(R.string.send_deposit_bic),
@@ -197,7 +209,11 @@ fun MakeDepositComposable(
enabled = iban.isNotBlank(),
onClick = {
focusManager.clearFocus()
- onMakeDeposit(amount, name, iban, bic)
+ if (isValidBic(bic)) {
+ onMakeDeposit(amount, name, iban, bic)
+ } else {
+ bicInvalid = true
+ }
},
) {
Text(
@@ -210,6 +226,14 @@ fun MakeDepositComposable(
}
}
+private val bicRegex = Regex("[a-zA-Z\\d]{8,11}")
+
+/**
+ * performs some minimal verification, nothing perfect.
+ * Allows for empty string.
+ */
+private fun isValidBic(bic: String): Boolean = bic.isEmpty() || bicRegex.matches(bic)
+
@Preview
@Composable
fun PreviewMakeDepositComposable() {
diff --git a/wallet/src/main/res/values/strings.xml b/wallet/src/main/res/values/strings.xml
index 734a233..4225a6b 100644
--- a/wallet/src/main/res/values/strings.xml
+++ b/wallet/src/main/res/values/strings.xml
@@ -139,6 +139,7 @@ GNU Taler is immune against many types of fraud, such as phishing of credit card
<string name="send_deposit_title">Deposit to a bank account</string>
<string name="send_deposit_iban">IBAN</string>
<string name="send_deposit_iban_error">IBAN is invalid</string>
+ <string name="send_deposit_bic_error">BIC is invalid</string>
<string name="send_deposit_bic">BIC/SWIFT</string>
<string name="send_deposit_name">Account holder</string>
<string name="send_deposit_bitcoin_address">Bitcoin address</string>