diff options
author | Torsten Grote <t@grobox.de> | 2023-04-13 14:22:31 -0300 |
---|---|---|
committer | Torsten Grote <t@grobox.de> | 2023-04-13 14:22:31 -0300 |
commit | 513c2cee26be3fd837ba6df8ef21ee3116ca9cf9 (patch) | |
tree | 3cc7d194952a8ac6d92c5653b9df491b1ec655aa | |
parent | e90570d8f6095d69813f31444f2450193ce729ea (diff) | |
download | taler-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.kt | 26 | ||||
-rw-r--r-- | wallet/src/main/res/values/strings.xml | 1 |
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> |