From 2ec2358725f0be5545d95cd7c596aff80ed5bd5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20Mili=C4=87?= Date: Thu, 11 Feb 2021 16:32:23 +0100 Subject: [PATCH] feature/TODO Implement IBAN Checker in Mapper mode --- obp-api/pom.xml | 7 +++++ .../SwaggerDefinitionsJSON.scala | 4 +-- .../bankconnectors/LocalMappedConnector.scala | 27 +++++++++++++++++-- .../PaymentInitiationServicePISApiTest.scala | 4 +-- .../setup/LocalMappedConnectorTestSetup.scala | 3 ++- 5 files changed, 38 insertions(+), 7 deletions(-) diff --git a/obp-api/pom.xml b/obp-api/pom.xml index ff162e689..40d044754 100644 --- a/obp-api/pom.xml +++ b/obp-api/pom.xml @@ -469,6 +469,13 @@ 1.0.45 + + + + org.iban4j + iban4j + 3.2.1 + diff --git a/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/SwaggerDefinitionsJSON.scala b/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/SwaggerDefinitionsJSON.scala index d8d9dc40a..116ab55da 100644 --- a/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/SwaggerDefinitionsJSON.scala +++ b/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/SwaggerDefinitionsJSON.scala @@ -388,9 +388,9 @@ object SwaggerDefinitionsJSON { ) val sepaCreditTransfersBerlinGroupV13 = SepaCreditTransfersBerlinGroupV13( - debtorAccount = PaymentAccount(iban = "12345"), + debtorAccount = PaymentAccount(iban = "GB33BUKB20201555555555"), instructedAmount = amountOfMoneyJsonV121, - creditorAccount = PaymentAccount(iban = "54321"), + creditorAccount = PaymentAccount(iban = "DE75512108001245126199"), creditorName = "John Miles" ) diff --git a/obp-api/src/main/scala/code/bankconnectors/LocalMappedConnector.scala b/obp-api/src/main/scala/code/bankconnectors/LocalMappedConnector.scala index 0472d78c6..3ef8f4a12 100644 --- a/obp-api/src/main/scala/code/bankconnectors/LocalMappedConnector.scala +++ b/obp-api/src/main/scala/code/bankconnectors/LocalMappedConnector.scala @@ -85,6 +85,8 @@ import net.liftweb.mapper.{By, _} import net.liftweb.util.Helpers.{hours, now, time, tryo} import net.liftweb.util.Mailer import net.liftweb.util.Mailer.{From, PlainMailBodyType, Subject, To} +import org.iban4j +import org.iban4j.{CountryCode, IbanFormat} import org.mindrot.jbcrypt.BCrypt import scalacache.ScalaCache import scalacache.guava.GuavaCache @@ -121,8 +123,29 @@ object LocalMappedConnector extends Connector with MdcLoggable { ), callContext)) override def validateAndCheckIbanNumber(iban: String, callContext: Option[CallContext]): OBPReturnType[Box[IbanChecker]] = Future { - // TODO Implement IBAN Checker - (Full(IbanChecker(true, None)), callContext) + import org.iban4j.CountryCode + import org.iban4j.Iban + import org.iban4j.IbanFormat + import org.iban4j.IbanFormatException + import org.iban4j.IbanUtil + import org.iban4j.InvalidCheckDigitException + import org.iban4j.UnsupportedCountryException + + // Validate Iban + try { // 1st try + IbanUtil.validate(iban) // IBAN as String: "DE89370400440532013000" + (Full(IbanChecker(true, None)), callContext) // valid + } catch { + case error@(_: IbanFormatException | _: InvalidCheckDigitException | _: UnsupportedCountryException) => + // invalid + try { // 2nd try + IbanUtil.validate(iban, IbanFormat.Default) // IBAN as formatted String: "DE89 3704 0044 0532 0130 00" + (Full(IbanChecker(true, None)), callContext) // valid + } catch { + case error@(_: IbanFormatException | _: InvalidCheckDigitException | _: UnsupportedCountryException) => + (Full(IbanChecker(false, None)), callContext) // invalid + } + } } // Gets current challenge level for transaction request diff --git a/obp-api/src/test/scala/code/api/berlin/group/v1_3/PaymentInitiationServicePISApiTest.scala b/obp-api/src/test/scala/code/api/berlin/group/v1_3/PaymentInitiationServicePISApiTest.scala index 5276b2d33..844655868 100644 --- a/obp-api/src/test/scala/code/api/berlin/group/v1_3/PaymentInitiationServicePISApiTest.scala +++ b/obp-api/src/test/scala/code/api/berlin/group/v1_3/PaymentInitiationServicePISApiTest.scala @@ -45,7 +45,7 @@ class PaymentInitiationServicePISApiTest extends BerlinGroupServerSetupV1_3 with | "amount": "1234" |}, |"creditorAccount": { - | "iban": "123" + | "iban": "DE75512108001245126199" |}, |"creditorName": "70charname" }""".stripMargin @@ -69,7 +69,7 @@ class PaymentInitiationServicePISApiTest extends BerlinGroupServerSetupV1_3 with | "amount": "-1234" |}, |"creditorAccount": { - | "iban": "12321" + | "iban": "DE75512108001245126199" |}, |"creditorName": "70charname" }""".stripMargin diff --git a/obp-api/src/test/scala/code/setup/LocalMappedConnectorTestSetup.scala b/obp-api/src/test/scala/code/setup/LocalMappedConnectorTestSetup.scala index be63b0085..ab9834d58 100644 --- a/obp-api/src/test/scala/code/setup/LocalMappedConnectorTestSetup.scala +++ b/obp-api/src/test/scala/code/setup/LocalMappedConnectorTestSetup.scala @@ -16,6 +16,7 @@ import com.openbankproject.commons.model.enums.AccountRoutingScheme import net.liftweb.common.Box import net.liftweb.mapper.{By, MetaMapper} import net.liftweb.util.Helpers._ +import org.iban4j import scala.util.Random @@ -62,7 +63,7 @@ trait LocalMappedConnectorTestSetup extends TestConnectorSetupWithStandardPermis .BankId(bankId.value) .AccountId(accountId.value) .AccountRoutingScheme(AccountRoutingScheme.IBAN.toString) - .AccountRoutingAddress(randomString(20)) + .AccountRoutingAddress(iban4j.Iban.random().toString()) .saveMe BankAccountRouting.create .BankId(bankId.value)