feature/Add Berlin Group Signing Basket; DB model

This commit is contained in:
Marko Milić 2024-01-16 12:05:58 +01:00
parent a9602e5260
commit e14946b85a
22 changed files with 618 additions and 119 deletions

View File

@ -110,6 +110,7 @@ import code.regulatedentities.MappedRegulatedEntity
import code.remotedata.RemotedataActors
import code.scheduler.{DataBaseCleanerScheduler, DatabaseDriverScheduler, JobScheduler, MetricsArchiveScheduler}
import code.scope.{MappedScope, MappedUserScope}
import code.signingbaskets.{MappedSigningBasket, MappedSigningBasketConsent, MappedSigningBasketPayment}
import code.snippet.{OAuthAuthorisation, OAuthWorkedThanks}
import code.socialmedia.MappedSocialMedia
import code.standingorders.StandingOrder
@ -1040,6 +1041,9 @@ object ToSchemify {
AuthUser,
JobScheduler,
MappedETag,
MappedSigningBasket,
MappedSigningBasketPayment,
MappedSigningBasketConsent,
MappedRegulatedEntity,
AtmAttribute,
Admin,

View File

@ -22,7 +22,7 @@ object Constant extends MdcLoggable {
final val h2DatabaseDefaultUrlValue = "jdbc:h2:mem:OBPTest_H2_v2.1.214;NON_KEYWORDS=VALUE;DB_CLOSE_DELAY=10"
final val HostName = APIUtil.getPropsValue("hostname").openOrThrowException(ErrorMessages.HostnameNotSpecified)
def HostName = APIUtil.getPropsValue("hostname").openOrThrowException(ErrorMessages.HostnameNotSpecified)
final val ApiInstanceId = {
val apiInstanceIdFromProps = APIUtil.getPropsValue("api_instance_id")

View File

@ -1402,6 +1402,51 @@ object NewStyle extends MdcLoggable{
}
}
}
/**
*
* @param userIds OBP support multiple challenges, we can ask different users to answer different challenges
* @param challengeType OBP support different challenge types, @see the Enum ChallengeType
* @param scaMethod @see the Enum StrongCustomerAuthentication
* @param scaStatus @see the Enum StrongCustomerAuthenticationStatus
* @param transactionRequestId it is also the BelinGroup PaymentId
* @param consentId
* @param basketId
* @param authenticationMethodId this is used for BelinGroup Consent
* @param callContext
* @return
*/
def createChallengesC3(
userIds: List[String],
challengeType: ChallengeType.Value,
transactionRequestId: Option[String],
scaMethod: Option[SCA],
scaStatus: Option[SCAStatus],//Only use for BerlinGroup Now
consentId: Option[String], // Note: consentId and transactionRequestId and basketId are exclusive here.
basketId: Option[String], // Note: consentId and transactionRequestId and basketId are exclusive here.
authenticationMethodId: Option[String],
callContext: Option[CallContext]
) : OBPReturnType[List[ChallengeTrait]] = {
if(challengeType == ChallengeType.BERLINGROUP_PAYMENT_CHALLENGE && (transactionRequestId.isEmpty || scaStatus.isEmpty || scaMethod.isEmpty)){
Future{ throw new Exception(s"$UnknownError The following parameters can not be empty for BERLINGROUP_PAYMENT challengeType: paymentId($transactionRequestId), scaStatus($scaStatus), scaMethod($scaMethod) ")}
}else if(challengeType == ChallengeType.BERLINGROUP_CONSENT_CHALLENGE && (consentId.isEmpty || scaStatus.isEmpty || scaMethod.isEmpty)){
Future{ throw new Exception(s"$UnknownError The following parameters can not be empty for BERLINGROUP_CONSENT challengeType: consentId($consentId), scaStatus($scaStatus), scaMethod($scaMethod) ")}
}else{
Connector.connector.vend.createChallengesC3(
userIds: List[String],
challengeType: ChallengeType.Value,
transactionRequestId: Option[String],
scaMethod: Option[SCA],
scaStatus: Option[SCAStatus],//Only use for BerlinGroup Now
consentId: Option[String], // Note: consentId and transactionRequestId and consentId are exclusive here.
basketId: Option[String], // Note: consentId and transactionRequestId and consentId are exclusive here.
authenticationMethodId: Option[String],
callContext: Option[CallContext]
) map { i =>
(unboxFullOrFail(i._1, callContext, s"$InvalidConnectorResponseForCreateChallenge ", 400), i._2)
}
}
}
def getChallengesByTransactionRequestId(
transactionRequestId: String,

View File

@ -421,7 +421,19 @@ trait Connector extends MdcLoggable {
consentId: Option[String], // Note: consentId and transactionRequestId are exclusive here.
authenticationMethodId: Option[String],
callContext: Option[CallContext]) : OBPReturnType[Box[List[ChallengeTrait]]]= Future{(Failure(setUnimplementedError), callContext)}
// now, we try to share the same challenges for obp payments, berlin group payments, berlin group consents and signing baskets
def createChallengesC3(
userIds: List[String],
challengeType: ChallengeType.Value,
transactionRequestId: Option[String],
scaMethod: Option[SCA],
scaStatus: Option[SCAStatus],//Only use for BerlinGroup Now
consentId: Option[String], // Note: consentId and transactionRequestId and basketId are exclusive here.
basketId: Option[String], // Note: consentId and transactionRequestId and basketId are exclusive here.
authenticationMethodId: Option[String],
callContext: Option[CallContext]) : OBPReturnType[Box[List[ChallengeTrait]]]= Future{(Failure(setUnimplementedError), callContext)}
// Validates an answer for a challenge and returns if the answer is correct or not
def validateChallengeAnswer(challengeId: String, hashOfSuppliedAnswer: String, callContext: Option[CallContext]): OBPReturnType[Box[Boolean]] = Future{(Full(true), callContext)}

View File

@ -365,6 +365,7 @@ object ConnectorBuilderUtil {
"checkExternalUserCredentials",
"checkExternalUserExists",
"createChallengesC2",
"createChallengesC3",
"getChallenge",
"getChallengesByTransactionRequestId",
"getChallengesByConsentId",

View File

@ -266,6 +266,7 @@ object LocalMappedConnector extends Connector with MdcLoggable {
None, //there are only for new version, set the empty here.
None,//there are only for new version, set the empty here.
None,//there are only for new version, set the empty here.
None,//there are only for new version, set the empty here.
challengeType = OBP_TRANSACTION_REQUEST_CHALLENGE.toString,
callContext: Option[CallContext])
(challenge._1.map(_.challengeId),challenge._2)
@ -296,6 +297,7 @@ object LocalMappedConnector extends Connector with MdcLoggable {
None, //there are only for new version, set the empty here.
None,//there are only for new version, set the empty here.
None,//there are only for new version, set the empty here.
None,//there are only for new version, set the empty here.
challengeType = OBP_TRANSACTION_REQUEST_CHALLENGE.toString,
callContext
)
@ -323,24 +325,43 @@ object LocalMappedConnector extends Connector with MdcLoggable {
scaMethod,
scaStatus,
consentId,
None, // Signing Baskets are introduced in case of version createChallengesC3
authenticationMethodId,
challengeType = OBP_TRANSACTION_REQUEST_CHALLENGE.toString,
callContext
)
challengeId.toList
}
(Full(challenges.flatten), callContext)
}
//We use obp MappedExpectedChallengeAnswer instead of Authorisations now.
// please also check Challenges.ChallengeProvider.vend.saveChallenge
// Authorisations.authorisationProvider.vend.createAuthorization(
// transactionRequestId.getOrElse(""),
// consentId.getOrElse(""),
// AuthenticationType.SMS_OTP.toString,
// "",
// ScaStatus.received.toString,
// "12345" // TODO Implement SMS sending
// )
override def createChallengesC3(
userIds: List[String],
challengeType: ChallengeType.Value,
transactionRequestId: Option[String], // Note: consentId and transactionRequestId and basketId are exclusive here.
scaMethod: Option[SCA],
scaStatus: Option[SCAStatus],//Only use for BerlinGroup Now
consentId: Option[String], // Note: consentId and transactionRequestId and basketId are exclusive here.
basketId: Option[String], // Note: consentId and transactionRequestId and basketId are exclusive here.
authenticationMethodId: Option[String],
callContext: Option[CallContext]
): OBPReturnType[Box[List[ChallengeTrait]]] = Future {
val challenges = for {
userId <- userIds
} yield {
val (challengeId, _) = createChallengeInternal(
userId,
transactionRequestId.getOrElse(""),
scaMethod,
scaStatus,
consentId,
basketId,
authenticationMethodId,
challengeType = OBP_TRANSACTION_REQUEST_CHALLENGE.toString,
callContext
)
challengeId.toList
}
(Full(challenges.flatten), callContext)
}
@ -349,7 +370,8 @@ object LocalMappedConnector extends Connector with MdcLoggable {
transactionRequestId: String,
scaMethod: Option[SCA],
scaStatus: Option[SCAStatus], //Only use for BerlinGroup Now
consentId: Option[String], // Note: consentId and transactionRequestId are exclusive here.
consentId: Option[String], // Note: consentId and transactionRequestId and BasketId are exclusive here.
basketId: Option[String], // Note: consentId and transactionRequestId and BasketId are exclusive here.
authenticationMethodId: Option[String],
challengeType: String,
callContext: Option[CallContext]
@ -367,6 +389,7 @@ object LocalMappedConnector extends Connector with MdcLoggable {
scaMethod,
scaStatus,
consentId,
basketId,
authenticationMethodId,
challengeType), callContext)
}

View File

@ -308,7 +308,7 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
//---------------- dynamic start -------------------please don't modify this line
// ---------- created on 2022-03-11T18:42:02Z
// ---------- created on 2024-01-15T10:29:27Z
messageDocs += validateAndCheckIbanNumberDoc
def validateAndCheckIbanNumberDoc = MessageDoc(
@ -332,7 +332,7 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
city=cityExample.value,
zip="string",
phone=phoneExample.value,
country="string",
country=countryExample.value,
countryIso="string",
sepaCreditTransfer=sepaCreditTransferExample.value,
sepaDirectDebit=sepaDirectDebitExample.value,
@ -545,9 +545,11 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
successful=true,
challengeType=challengeTypeExample.value,
consentId=Some(consentIdExample.value),
basketId=Some("string"),
scaMethod=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthentication.SMS),
scaStatus=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthenticationStatus.example),
authenticationMethodId=Some("string"))))
authenticationMethodId=Some("string"),
attemptCounter=123)))
),
adapterImplementation = Some(AdapterImplementation("- Core", 1))
)
@ -559,6 +561,51 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
response.map(convertToTuple[List[ChallengeCommons]](callContext))
}
messageDocs += createChallengesC3Doc
def createChallengesC3Doc = MessageDoc(
process = "obp.createChallengesC3",
messageFormat = messageFormat,
description = "Create Challenges C3",
outboundTopic = None,
inboundTopic = None,
exampleOutboundMessage = (
OutBoundCreateChallengesC3(outboundAdapterCallContext=MessageDocsSwaggerDefinitions.outboundAdapterCallContext,
userIds=listExample.value.split("[,;]").toList,
challengeType=com.openbankproject.commons.model.enums.ChallengeType.example,
transactionRequestId=Some(transactionRequestIdExample.value),
scaMethod=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthentication.SMS),
scaStatus=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthenticationStatus.example),
consentId=Some(consentIdExample.value),
basketId=Some("string"),
authenticationMethodId=Some("string"))
),
exampleInboundMessage = (
InBoundCreateChallengesC3(inboundAdapterCallContext=MessageDocsSwaggerDefinitions.inboundAdapterCallContext,
status=MessageDocsSwaggerDefinitions.inboundStatus,
data=List( ChallengeCommons(challengeId=challengeIdExample.value,
transactionRequestId=transactionRequestIdExample.value,
expectedAnswer="string",
expectedUserId="string",
salt="string",
successful=true,
challengeType=challengeTypeExample.value,
consentId=Some(consentIdExample.value),
basketId=Some("string"),
scaMethod=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthentication.SMS),
scaStatus=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthenticationStatus.example),
authenticationMethodId=Some("string"),
attemptCounter=123)))
),
adapterImplementation = Some(AdapterImplementation("- Core", 1))
)
override def createChallengesC3(userIds: List[String], challengeType: ChallengeType.Value, transactionRequestId: Option[String], scaMethod: Option[StrongCustomerAuthentication.SCA], scaStatus: Option[SCAStatus], consentId: Option[String], basketId: Option[String], authenticationMethodId: Option[String], callContext: Option[CallContext]): OBPReturnType[Box[List[ChallengeTrait]]] = {
import com.openbankproject.commons.dto.{InBoundCreateChallengesC3 => InBound, OutBoundCreateChallengesC3 => OutBound}
val req = OutBound(callContext.map(_.toOutboundAdapterCallContext).orNull, userIds, challengeType, transactionRequestId, scaMethod, scaStatus, consentId, basketId, authenticationMethodId)
val response: Future[Box[InBound]] = (southSideActor ? req).mapTo[InBound].recoverWith(recoverFunction).map(Box !! _)
response.map(convertToTuple[List[ChallengeCommons]](callContext))
}
messageDocs += validateChallengeAnswerDoc
def validateChallengeAnswerDoc = MessageDoc(
process = "obp.validateChallengeAnswer",
@ -611,9 +658,11 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
successful=true,
challengeType=challengeTypeExample.value,
consentId=Some(consentIdExample.value),
basketId=Some("string"),
scaMethod=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthentication.SMS),
scaStatus=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthenticationStatus.example),
authenticationMethodId=Some("string")))
authenticationMethodId=Some("string"),
attemptCounter=123))
),
adapterImplementation = Some(AdapterImplementation("- Core", 1))
)
@ -647,9 +696,11 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
successful=true,
challengeType=challengeTypeExample.value,
consentId=Some(consentIdExample.value),
basketId=Some("string"),
scaMethod=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthentication.SMS),
scaStatus=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthenticationStatus.example),
authenticationMethodId=Some("string"))))
authenticationMethodId=Some("string"),
attemptCounter=123)))
),
adapterImplementation = Some(AdapterImplementation("- Core", 1))
)
@ -683,9 +734,11 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
successful=true,
challengeType=challengeTypeExample.value,
consentId=Some(consentIdExample.value),
basketId=Some("string"),
scaMethod=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthentication.SMS),
scaStatus=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthenticationStatus.example),
authenticationMethodId=Some("string"))))
authenticationMethodId=Some("string"),
attemptCounter=123)))
),
adapterImplementation = Some(AdapterImplementation("- Core", 1))
)
@ -719,9 +772,11 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
successful=true,
challengeType=challengeTypeExample.value,
consentId=Some(consentIdExample.value),
basketId=Some("string"),
scaMethod=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthentication.SMS),
scaStatus=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthenticationStatus.example),
authenticationMethodId=Some("string")))
authenticationMethodId=Some("string"),
attemptCounter=123))
),
adapterImplementation = Some(AdapterImplementation("- Core", 1))
)
@ -958,7 +1013,7 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
adapterImplementation = Some(AdapterImplementation("- Core", 1))
)
override def getBankAccountByRoutingLegacy(bankId: Option[BankId], scheme: String, address: String, callContext: Option[CallContext]): Box[(BankAccount, Option[CallContext])] = {
override def getBankAccountByRouting(bankId: Option[BankId], scheme: String, address: String, callContext: Option[CallContext]): OBPReturnType[Box[BankAccount]] = {
import com.openbankproject.commons.dto.{InBoundGetBankAccountByRouting => InBound, OutBoundGetBankAccountByRouting => OutBound}
val req = OutBound(callContext.map(_.toOutboundAdapterCallContext).orNull, bankId, scheme, address)
val response: Future[Box[InBound]] = (southSideActor ? req).mapTo[InBound].recoverWith(recoverFunction).map(Box !! _)
@ -1431,8 +1486,9 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
reasonRequested=com.openbankproject.commons.model.PinResetReason.FORGOT)),
collected=Some(CardCollectionInfo(toDate(collectedExample))),
posted=Some(CardPostedInfo(toDate(postedExample))),
customerId=customerIdExample.value
)))
customerId=customerIdExample.value,
cvv=Some(cvvExample.value),
brand=Some(brandExample.value))))
),
adapterImplementation = Some(AdapterImplementation("- Core", 1))
)
@ -1498,8 +1554,9 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
reasonRequested=com.openbankproject.commons.model.PinResetReason.FORGOT)),
collected=Some(CardCollectionInfo(toDate(collectedExample))),
posted=Some(CardPostedInfo(toDate(postedExample))),
customerId=customerIdExample.value
))
customerId=customerIdExample.value,
cvv=Some(cvvExample.value),
brand=Some(brandExample.value)))
),
adapterImplementation = Some(AdapterImplementation("- Core", 1))
)
@ -1613,7 +1670,9 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
reasonRequested=com.openbankproject.commons.model.PinResetReason.FORGOT)),
collected=Some(CardCollectionInfo(toDate(collectedExample))),
posted=Some(CardPostedInfo(toDate(postedExample))),
customerId=customerIdExample.value)))
customerId=customerIdExample.value,
cvv=Some(cvvExample.value),
brand=Some(brandExample.value))))
),
adapterImplementation = Some(AdapterImplementation("- Core", 1))
)
@ -1656,8 +1715,8 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
collected=Some(CardCollectionInfo(toDate(collectedExample))),
posted=Some(CardPostedInfo(toDate(postedExample))),
customerId=customerIdExample.value,
cvv = cvvExample.value,
brand = brandExample.value)
cvv=cvvExample.value,
brand=brandExample.value)
),
exampleInboundMessage = (
InBoundCreatePhysicalCard(inboundAdapterCallContext=MessageDocsSwaggerDefinitions.inboundAdapterCallContext,
@ -1701,17 +1760,14 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
reasonRequested=com.openbankproject.commons.model.PinResetReason.FORGOT)),
collected=Some(CardCollectionInfo(toDate(collectedExample))),
posted=Some(CardPostedInfo(toDate(postedExample))),
customerId=customerIdExample.value))
customerId=customerIdExample.value,
cvv=Some(cvvExample.value),
brand=Some(brandExample.value)))
),
adapterImplementation = Some(AdapterImplementation("- Core", 1))
)
override def createPhysicalCard(bankCardNumber: String, nameOnCard: String, cardType: String, issueNumber: String,
serialNumber: String, validFrom: Date, expires: Date, enabled: Boolean, cancelled: Boolean, onHotList: Boolean,
technology: String, networks: List[String], allows: List[String], accountId: String, bankId: String,
replacement: Option[CardReplacementInfo], pinResets: List[PinResetInfo], collected: Option[CardCollectionInfo],
posted: Option[CardPostedInfo], customerId: String, cvv: String, brand: String,
callContext: Option[CallContext]): OBPReturnType[Box[PhysicalCard]] = {
override def createPhysicalCard(bankCardNumber: String, nameOnCard: String, cardType: String, issueNumber: String, serialNumber: String, validFrom: Date, expires: Date, enabled: Boolean, cancelled: Boolean, onHotList: Boolean, technology: String, networks: List[String], allows: List[String], accountId: String, bankId: String, replacement: Option[CardReplacementInfo], pinResets: List[PinResetInfo], collected: Option[CardCollectionInfo], posted: Option[CardPostedInfo], customerId: String, cvv: String, brand: String, callContext: Option[CallContext]): OBPReturnType[Box[PhysicalCard]] = {
import com.openbankproject.commons.dto.{InBoundCreatePhysicalCard => InBound, OutBoundCreatePhysicalCard => OutBound}
val req = OutBound(callContext.map(_.toOutboundAdapterCallContext).orNull, bankCardNumber, nameOnCard, cardType, issueNumber, serialNumber, validFrom, expires, enabled, cancelled, onHotList, technology, networks, allows, accountId, bankId, replacement, pinResets, collected, posted, customerId, cvv, brand)
val response: Future[Box[InBound]] = (southSideActor ? req).mapTo[InBound].recoverWith(recoverFunction).map(Box !! _)
@ -1793,7 +1849,9 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
reasonRequested=com.openbankproject.commons.model.PinResetReason.FORGOT)),
collected=Some(CardCollectionInfo(toDate(collectedExample))),
posted=Some(CardPostedInfo(toDate(postedExample))),
customerId=customerIdExample.value))
customerId=customerIdExample.value,
cvv=Some(cvvExample.value),
brand=Some(brandExample.value)))
),
adapterImplementation = Some(AdapterImplementation("- Core", 1))
)
@ -1950,6 +2008,14 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
account_id=account_idExample.value)),
to_sepa=Some(TransactionRequestIban(transactionRequestIban.value)),
to_counterparty=Some(TransactionRequestCounterpartyId(transactionRequestCounterpartyIdExample.value)),
to_simple=Some( TransactionRequestSimple(otherBankRoutingScheme=otherBankRoutingSchemeExample.value,
otherBankRoutingAddress=otherBankRoutingAddressExample.value,
otherBranchRoutingScheme=otherBranchRoutingSchemeExample.value,
otherBranchRoutingAddress=otherBranchRoutingAddressExample.value,
otherAccountRoutingScheme=otherAccountRoutingSchemeExample.value,
otherAccountRoutingAddress=otherAccountRoutingAddressExample.value,
otherAccountSecondaryRoutingScheme=otherAccountSecondaryRoutingSchemeExample.value,
otherAccountSecondaryRoutingAddress=otherAccountSecondaryRoutingAddressExample.value)),
to_transfer_to_phone=Some( TransactionRequestTransferToPhone(value= AmountOfMoneyJsonV121(currency=currencyExample.value,
amount=amountExample.value),
description=descriptionExample.value,
@ -2127,6 +2193,14 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
account_id=account_idExample.value)),
to_sepa=Some(TransactionRequestIban(transactionRequestIban.value)),
to_counterparty=Some(TransactionRequestCounterpartyId(transactionRequestCounterpartyIdExample.value)),
to_simple=Some( TransactionRequestSimple(otherBankRoutingScheme=otherBankRoutingSchemeExample.value,
otherBankRoutingAddress=otherBankRoutingAddressExample.value,
otherBranchRoutingScheme=otherBranchRoutingSchemeExample.value,
otherBranchRoutingAddress=otherBranchRoutingAddressExample.value,
otherAccountRoutingScheme=otherAccountRoutingSchemeExample.value,
otherAccountRoutingAddress=otherAccountRoutingAddressExample.value,
otherAccountSecondaryRoutingScheme=otherAccountSecondaryRoutingSchemeExample.value,
otherAccountSecondaryRoutingAddress=otherAccountSecondaryRoutingAddressExample.value)),
to_transfer_to_phone=Some( TransactionRequestTransferToPhone(value= AmountOfMoneyJsonV121(currency=currencyExample.value,
amount=amountExample.value),
description=descriptionExample.value,
@ -2245,6 +2319,14 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
account_id=account_idExample.value)),
to_sepa=Some(TransactionRequestIban(transactionRequestIban.value)),
to_counterparty=Some(TransactionRequestCounterpartyId(transactionRequestCounterpartyIdExample.value)),
to_simple=Some( TransactionRequestSimple(otherBankRoutingScheme=otherBankRoutingSchemeExample.value,
otherBankRoutingAddress=otherBankRoutingAddressExample.value,
otherBranchRoutingScheme=otherBranchRoutingSchemeExample.value,
otherBranchRoutingAddress=otherBranchRoutingAddressExample.value,
otherAccountRoutingScheme=otherAccountRoutingSchemeExample.value,
otherAccountRoutingAddress=otherAccountRoutingAddressExample.value,
otherAccountSecondaryRoutingScheme=otherAccountSecondaryRoutingSchemeExample.value,
otherAccountSecondaryRoutingAddress=otherAccountSecondaryRoutingAddressExample.value)),
to_transfer_to_phone=Some( TransactionRequestTransferToPhone(value= AmountOfMoneyJsonV121(currency=currencyExample.value,
amount=amountExample.value),
description=descriptionExample.value,
@ -2336,6 +2418,14 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
account_id=account_idExample.value)),
to_sepa=Some(TransactionRequestIban(transactionRequestIban.value)),
to_counterparty=Some(TransactionRequestCounterpartyId(transactionRequestCounterpartyIdExample.value)),
to_simple=Some( TransactionRequestSimple(otherBankRoutingScheme=otherBankRoutingSchemeExample.value,
otherBankRoutingAddress=otherBankRoutingAddressExample.value,
otherBranchRoutingScheme=otherBranchRoutingSchemeExample.value,
otherBranchRoutingAddress=otherBranchRoutingAddressExample.value,
otherAccountRoutingScheme=otherAccountRoutingSchemeExample.value,
otherAccountRoutingAddress=otherAccountRoutingAddressExample.value,
otherAccountSecondaryRoutingScheme=otherAccountSecondaryRoutingSchemeExample.value,
otherAccountSecondaryRoutingAddress=otherAccountSecondaryRoutingAddressExample.value)),
to_transfer_to_phone=Some( TransactionRequestTransferToPhone(value= AmountOfMoneyJsonV121(currency=currencyExample.value,
amount=amountExample.value),
description=descriptionExample.value,
@ -2440,6 +2530,14 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
account_id=account_idExample.value)),
to_sepa=Some(TransactionRequestIban(transactionRequestIban.value)),
to_counterparty=Some(TransactionRequestCounterpartyId(transactionRequestCounterpartyIdExample.value)),
to_simple=Some( TransactionRequestSimple(otherBankRoutingScheme=otherBankRoutingSchemeExample.value,
otherBankRoutingAddress=otherBankRoutingAddressExample.value,
otherBranchRoutingScheme=otherBranchRoutingSchemeExample.value,
otherBranchRoutingAddress=otherBranchRoutingAddressExample.value,
otherAccountRoutingScheme=otherAccountRoutingSchemeExample.value,
otherAccountRoutingAddress=otherAccountRoutingAddressExample.value,
otherAccountSecondaryRoutingScheme=otherAccountSecondaryRoutingSchemeExample.value,
otherAccountSecondaryRoutingAddress=otherAccountSecondaryRoutingAddressExample.value)),
to_transfer_to_phone=Some( TransactionRequestTransferToPhone(value= AmountOfMoneyJsonV121(currency=currencyExample.value,
amount=amountExample.value),
description=descriptionExample.value,
@ -2510,6 +2608,14 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
account_id=account_idExample.value)),
to_sepa=Some(TransactionRequestIban(transactionRequestIban.value)),
to_counterparty=Some(TransactionRequestCounterpartyId(transactionRequestCounterpartyIdExample.value)),
to_simple=Some( TransactionRequestSimple(otherBankRoutingScheme=otherBankRoutingSchemeExample.value,
otherBankRoutingAddress=otherBankRoutingAddressExample.value,
otherBranchRoutingScheme=otherBranchRoutingSchemeExample.value,
otherBranchRoutingAddress=otherBranchRoutingAddressExample.value,
otherAccountRoutingScheme=otherAccountRoutingSchemeExample.value,
otherAccountRoutingAddress=otherAccountRoutingAddressExample.value,
otherAccountSecondaryRoutingScheme=otherAccountSecondaryRoutingSchemeExample.value,
otherAccountSecondaryRoutingAddress=otherAccountSecondaryRoutingAddressExample.value)),
to_transfer_to_phone=Some( TransactionRequestTransferToPhone(value= AmountOfMoneyJsonV121(currency=currencyExample.value,
amount=amountExample.value),
description=descriptionExample.value,
@ -3016,7 +3122,9 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
siteName=Some("string"),
cashWithdrawalNationalFee=Some(cashWithdrawalNationalFeeExample.value),
cashWithdrawalInternationalFee=Some(cashWithdrawalInternationalFeeExample.value),
balanceInquiryFee=Some(balanceInquiryFeeExample.value)))
balanceInquiryFee=Some(balanceInquiryFeeExample.value),
atmType=Some(atmTypeExample.value),
phone=Some(phoneExample.value)))
),
adapterImplementation = Some(AdapterImplementation("- Core", 1))
)
@ -3095,7 +3203,9 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
siteName=Some("string"),
cashWithdrawalNationalFee=Some(cashWithdrawalNationalFeeExample.value),
cashWithdrawalInternationalFee=Some(cashWithdrawalInternationalFeeExample.value),
balanceInquiryFee=Some(balanceInquiryFeeExample.value))))
balanceInquiryFee=Some(balanceInquiryFeeExample.value),
atmType=Some(atmTypeExample.value),
phone=Some(phoneExample.value))))
),
adapterImplementation = Some(AdapterImplementation("- Core", 1))
)
@ -3190,6 +3300,14 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
account_id=account_idExample.value)),
to_sepa=Some(TransactionRequestIban(transactionRequestIban.value)),
to_counterparty=Some(TransactionRequestCounterpartyId(transactionRequestCounterpartyIdExample.value)),
to_simple=Some( TransactionRequestSimple(otherBankRoutingScheme=otherBankRoutingSchemeExample.value,
otherBankRoutingAddress=otherBankRoutingAddressExample.value,
otherBranchRoutingScheme=otherBranchRoutingSchemeExample.value,
otherBranchRoutingAddress=otherBranchRoutingAddressExample.value,
otherAccountRoutingScheme=otherAccountRoutingSchemeExample.value,
otherAccountRoutingAddress=otherAccountRoutingAddressExample.value,
otherAccountSecondaryRoutingScheme=otherAccountSecondaryRoutingSchemeExample.value,
otherAccountSecondaryRoutingAddress=otherAccountSecondaryRoutingAddressExample.value)),
to_transfer_to_phone=Some( TransactionRequestTransferToPhone(value= AmountOfMoneyJsonV121(currency=currencyExample.value,
amount=amountExample.value),
description=descriptionExample.value,
@ -3447,6 +3565,14 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
account_id=account_idExample.value)),
to_sepa=Some(TransactionRequestIban(transactionRequestIban.value)),
to_counterparty=Some(TransactionRequestCounterpartyId(transactionRequestCounterpartyIdExample.value)),
to_simple=Some( TransactionRequestSimple(otherBankRoutingScheme=otherBankRoutingSchemeExample.value,
otherBankRoutingAddress=otherBankRoutingAddressExample.value,
otherBranchRoutingScheme=otherBranchRoutingSchemeExample.value,
otherBranchRoutingAddress=otherBranchRoutingAddressExample.value,
otherAccountRoutingScheme=otherAccountRoutingSchemeExample.value,
otherAccountRoutingAddress=otherAccountRoutingAddressExample.value,
otherAccountSecondaryRoutingScheme=otherAccountSecondaryRoutingSchemeExample.value,
otherAccountSecondaryRoutingAddress=otherAccountSecondaryRoutingAddressExample.value)),
to_transfer_to_phone=Some( TransactionRequestTransferToPhone(value= AmountOfMoneyJsonV121(currency=currencyExample.value,
amount=amountExample.value),
description=descriptionExample.value,
@ -3533,6 +3659,14 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
account_id=account_idExample.value)),
to_sepa=Some(TransactionRequestIban(transactionRequestIban.value)),
to_counterparty=Some(TransactionRequestCounterpartyId(transactionRequestCounterpartyIdExample.value)),
to_simple=Some( TransactionRequestSimple(otherBankRoutingScheme=otherBankRoutingSchemeExample.value,
otherBankRoutingAddress=otherBankRoutingAddressExample.value,
otherBranchRoutingScheme=otherBranchRoutingSchemeExample.value,
otherBranchRoutingAddress=otherBranchRoutingAddressExample.value,
otherAccountRoutingScheme=otherAccountRoutingSchemeExample.value,
otherAccountRoutingAddress=otherAccountRoutingAddressExample.value,
otherAccountSecondaryRoutingScheme=otherAccountSecondaryRoutingSchemeExample.value,
otherAccountSecondaryRoutingAddress=otherAccountSecondaryRoutingAddressExample.value)),
to_transfer_to_phone=Some( TransactionRequestTransferToPhone(value= AmountOfMoneyJsonV121(currency=currencyExample.value,
amount=amountExample.value),
description=descriptionExample.value,
@ -4491,8 +4625,7 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
key=keyExample.value,
value=valueExample.value,
timeStamp=toDate(timeStampExample),
consumerId=consumerIdExample.value
))
consumerId=consumerIdExample.value))
),
adapterImplementation = Some(AdapterImplementation("- Core", 1))
)
@ -4526,8 +4659,7 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
value=valueExample.value,
challenge=challengeExample.value,
status=statusExample.value,
consumerId=consumerIdExample.value
))
consumerId=consumerIdExample.value))
),
adapterImplementation = Some(AdapterImplementation("- Core", 1))
)
@ -4609,7 +4741,7 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
userId=userIdExample.value,
key=keyExample.value,
value=valueExample.value,
timeStamp=toDate(timeStampExample),
timeStamp=toDate(timeStampExample),
consumerId=consumerIdExample.value)))
),
adapterImplementation = Some(AdapterImplementation("- Core", 1))
@ -4771,7 +4903,8 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
accountAttributeId=accountAttributeIdExample.value,
name=nameExample.value,
attributeType=com.openbankproject.commons.model.enums.AccountAttributeType.example,
value=valueExample.value))
value=valueExample.value,
productInstanceCode=Some("string")))
),
adapterImplementation = Some(AdapterImplementation("- Core", 1))
)
@ -4829,7 +4962,8 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
productAttributeId=Some(productAttributeIdExample.value),
name=nameExample.value,
accountAttributeType=com.openbankproject.commons.model.enums.AccountAttributeType.example,
value=valueExample.value)
value=valueExample.value,
productInstanceCode=Some("string"))
),
exampleInboundMessage = (
InBoundCreateOrUpdateAccountAttribute(inboundAdapterCallContext=MessageDocsSwaggerDefinitions.inboundAdapterCallContext,
@ -4840,15 +4974,15 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
accountAttributeId=accountAttributeIdExample.value,
name=nameExample.value,
attributeType=com.openbankproject.commons.model.enums.AccountAttributeType.example,
value=valueExample.value))
value=valueExample.value,
productInstanceCode=Some("string")))
),
adapterImplementation = Some(AdapterImplementation("- Core", 1))
)
override def createOrUpdateAccountAttribute(bankId: BankId, accountId: AccountId, productCode: ProductCode, productAttributeId: Option[String], name: String, accountAttributeType: AccountAttributeType.Value, value: String,
productInstanceCode: Option[String],callContext: Option[CallContext]): OBPReturnType[Box[AccountAttribute]] = {
override def createOrUpdateAccountAttribute(bankId: BankId, accountId: AccountId, productCode: ProductCode, productAttributeId: Option[String], name: String, accountAttributeType: AccountAttributeType.Value, value: String, productInstanceCode: Option[String], callContext: Option[CallContext]): OBPReturnType[Box[AccountAttribute]] = {
import com.openbankproject.commons.dto.{InBoundCreateOrUpdateAccountAttribute => InBound, OutBoundCreateOrUpdateAccountAttribute => OutBound}
val req = OutBound(callContext.map(_.toOutboundAdapterCallContext).orNull, bankId, accountId, productCode, productAttributeId, name, accountAttributeType, value)
val req = OutBound(callContext.map(_.toOutboundAdapterCallContext).orNull, bankId, accountId, productCode, productAttributeId, name, accountAttributeType, value, productInstanceCode)
val response: Future[Box[InBound]] = (southSideActor ? req).mapTo[InBound].recoverWith(recoverFunction).map(Box !! _)
response.map(convertToTuple[AccountAttributeCommons](callContext))
}
@ -4943,7 +5077,8 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
name=nameExample.value,
attributeType=com.openbankproject.commons.model.enums.ProductAttributeType.example,
value=valueExample.value,
isActive=Some(isActiveExample.value.toBoolean))))
isActive=Some(isActiveExample.value.toBoolean))),
productInstanceCode=Some("string"))
),
exampleInboundMessage = (
InBoundCreateAccountAttributes(inboundAdapterCallContext=MessageDocsSwaggerDefinitions.inboundAdapterCallContext,
@ -4954,15 +5089,15 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
accountAttributeId=accountAttributeIdExample.value,
name=nameExample.value,
attributeType=com.openbankproject.commons.model.enums.AccountAttributeType.example,
value=valueExample.value)))
value=valueExample.value,
productInstanceCode=Some("string"))))
),
adapterImplementation = Some(AdapterImplementation("- Core", 1))
)
override def createAccountAttributes(bankId: BankId, accountId: AccountId, productCode: ProductCode, accountAttributes: List[ProductAttribute],
productInstanceCode: Option[String], callContext: Option[CallContext]): OBPReturnType[Box[List[AccountAttribute]]] = {
override def createAccountAttributes(bankId: BankId, accountId: AccountId, productCode: ProductCode, accountAttributes: List[ProductAttribute], productInstanceCode: Option[String], callContext: Option[CallContext]): OBPReturnType[Box[List[AccountAttribute]]] = {
import com.openbankproject.commons.dto.{InBoundCreateAccountAttributes => InBound, OutBoundCreateAccountAttributes => OutBound}
val req = OutBound(callContext.map(_.toOutboundAdapterCallContext).orNull, bankId, accountId, productCode, accountAttributes)
val req = OutBound(callContext.map(_.toOutboundAdapterCallContext).orNull, bankId, accountId, productCode, accountAttributes, productInstanceCode)
val response: Future[Box[InBound]] = (southSideActor ? req).mapTo[InBound].recoverWith(recoverFunction).map(Box !! _)
response.map(convertToTuple[List[AccountAttributeCommons]](callContext))
}
@ -4988,7 +5123,8 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
accountAttributeId=accountAttributeIdExample.value,
name=nameExample.value,
attributeType=com.openbankproject.commons.model.enums.AccountAttributeType.example,
value=valueExample.value)))
value=valueExample.value,
productInstanceCode=Some("string"))))
),
adapterImplementation = Some(AdapterImplementation("- Core", 1))
)
@ -6091,7 +6227,8 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
date=toDate(dateExample),
message=messageExample.value,
fromDepartment=fromDepartmentExample.value,
fromPerson=fromPersonExample.value))
fromPerson=fromPersonExample.value,
transport=Some(transportExample.value)))
),
adapterImplementation = Some(AdapterImplementation("- Core", 1))
)
@ -6240,6 +6377,6 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
response.map(convertToTuple[Boolean](callContext))
}
// ---------- created on 2022-03-11T18:42:02Z
//---------------- dynamic end ---------------------please don't modify this line
// ---------- created on 2024-01-15T10:29:27Z
//---------------- dynamic end ---------------------please don't modify this line
}

View File

@ -96,7 +96,7 @@ trait RestConnector_vMar2019 extends Connector with KafkaHelper with MdcLoggable
//---------------- dynamic start -------------------please don't modify this line
// ---------- created on 2023-06-01T16:45:32Z
// ---------- created on 2024-01-15T10:31:47Z
messageDocs += getAdapterInfoDoc
def getAdapterInfoDoc = MessageDoc(
@ -367,6 +367,7 @@ trait RestConnector_vMar2019 extends Connector with KafkaHelper with MdcLoggable
successful=true,
challengeType=challengeTypeExample.value,
consentId=Some(consentIdExample.value),
basketId=Some("string"),
scaMethod=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthentication.SMS),
scaStatus=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthenticationStatus.example),
authenticationMethodId=Some("string"),
@ -382,6 +383,51 @@ trait RestConnector_vMar2019 extends Connector with KafkaHelper with MdcLoggable
response.map(convertToTuple[List[ChallengeCommons]](callContext))
}
messageDocs += createChallengesC3Doc
def createChallengesC3Doc = MessageDoc(
process = "obp.createChallengesC3",
messageFormat = messageFormat,
description = "Create Challenges C3",
outboundTopic = None,
inboundTopic = None,
exampleOutboundMessage = (
OutBoundCreateChallengesC3(outboundAdapterCallContext=MessageDocsSwaggerDefinitions.outboundAdapterCallContext,
userIds=listExample.value.split("[,;]").toList,
challengeType=com.openbankproject.commons.model.enums.ChallengeType.example,
transactionRequestId=Some(transactionRequestIdExample.value),
scaMethod=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthentication.SMS),
scaStatus=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthenticationStatus.example),
consentId=Some(consentIdExample.value),
basketId=Some("string"),
authenticationMethodId=Some("string"))
),
exampleInboundMessage = (
InBoundCreateChallengesC3(inboundAdapterCallContext=MessageDocsSwaggerDefinitions.inboundAdapterCallContext,
status=MessageDocsSwaggerDefinitions.inboundStatus,
data=List( ChallengeCommons(challengeId=challengeIdExample.value,
transactionRequestId=transactionRequestIdExample.value,
expectedAnswer="string",
expectedUserId="string",
salt="string",
successful=true,
challengeType=challengeTypeExample.value,
consentId=Some(consentIdExample.value),
basketId=Some("string"),
scaMethod=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthentication.SMS),
scaStatus=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthenticationStatus.example),
authenticationMethodId=Some("string"),
attemptCounter=123)))
),
adapterImplementation = Some(AdapterImplementation("- Core", 1))
)
override def createChallengesC3(userIds: List[String], challengeType: ChallengeType.Value, transactionRequestId: Option[String], scaMethod: Option[StrongCustomerAuthentication.SCA], scaStatus: Option[SCAStatus], consentId: Option[String], basketId: Option[String], authenticationMethodId: Option[String], callContext: Option[CallContext]): OBPReturnType[Box[List[ChallengeTrait]]] = {
import com.openbankproject.commons.dto.{InBoundCreateChallengesC3 => InBound, OutBoundCreateChallengesC3 => OutBound}
val req = OutBound(callContext.map(_.toOutboundAdapterCallContext).orNull, userIds, challengeType, transactionRequestId, scaMethod, scaStatus, consentId, basketId, authenticationMethodId)
val response: Future[Box[InBound]] = sendRequest[InBound](getUrl(callContext, "createChallengesC3"), HttpMethods.POST, req, callContext)
response.map(convertToTuple[List[ChallengeCommons]](callContext))
}
messageDocs += validateChallengeAnswerDoc
def validateChallengeAnswerDoc = MessageDoc(
process = "obp.validateChallengeAnswer",
@ -434,6 +480,7 @@ trait RestConnector_vMar2019 extends Connector with KafkaHelper with MdcLoggable
successful=true,
challengeType=challengeTypeExample.value,
consentId=Some(consentIdExample.value),
basketId=Some("string"),
scaMethod=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthentication.SMS),
scaStatus=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthenticationStatus.example),
authenticationMethodId=Some("string"),
@ -471,6 +518,7 @@ trait RestConnector_vMar2019 extends Connector with KafkaHelper with MdcLoggable
successful=true,
challengeType=challengeTypeExample.value,
consentId=Some(consentIdExample.value),
basketId=Some("string"),
scaMethod=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthentication.SMS),
scaStatus=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthenticationStatus.example),
authenticationMethodId=Some("string"),
@ -508,6 +556,7 @@ trait RestConnector_vMar2019 extends Connector with KafkaHelper with MdcLoggable
successful=true,
challengeType=challengeTypeExample.value,
consentId=Some(consentIdExample.value),
basketId=Some("string"),
scaMethod=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthentication.SMS),
scaStatus=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthenticationStatus.example),
authenticationMethodId=Some("string"),
@ -545,6 +594,7 @@ trait RestConnector_vMar2019 extends Connector with KafkaHelper with MdcLoggable
successful=true,
challengeType=challengeTypeExample.value,
consentId=Some(consentIdExample.value),
basketId=Some("string"),
scaMethod=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthentication.SMS),
scaStatus=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthenticationStatus.example),
authenticationMethodId=Some("string"),
@ -6516,8 +6566,8 @@ trait RestConnector_vMar2019 extends Connector with KafkaHelper with MdcLoggable
response.map(convertToTuple[Boolean](callContext))
}
// ---------- created on 2023-06-01T16:45:32Z
//---------------- dynamic end ---------------------please don't modify this line
// ---------- created on 2024-01-15T10:31:47Z
//---------------- dynamic end ---------------------please don't modify this line
private val availableOperation = DynamicEntityOperation.values.map(it => s""""$it"""").mkString("[", ", ", "]")

View File

@ -75,7 +75,7 @@ trait StoredProcedureConnector_vDec2019 extends Connector with MdcLoggable {
val connectorName = "stored_procedure_vDec2019"
//---------------- dynamic start -------------------please don't modify this line
// ---------- created on 2023-06-01T16:47:09Z
// ---------- created on 2024-01-15T10:32:00Z
messageDocs += getAdapterInfoDoc
def getAdapterInfoDoc = MessageDoc(
@ -346,6 +346,7 @@ trait StoredProcedureConnector_vDec2019 extends Connector with MdcLoggable {
successful=true,
challengeType=challengeTypeExample.value,
consentId=Some(consentIdExample.value),
basketId=Some("string"),
scaMethod=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthentication.SMS),
scaStatus=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthenticationStatus.example),
authenticationMethodId=Some("string"),
@ -361,6 +362,51 @@ trait StoredProcedureConnector_vDec2019 extends Connector with MdcLoggable {
response.map(convertToTuple[List[ChallengeCommons]](callContext))
}
messageDocs += createChallengesC3Doc
def createChallengesC3Doc = MessageDoc(
process = "obp.createChallengesC3",
messageFormat = messageFormat,
description = "Create Challenges C3",
outboundTopic = None,
inboundTopic = None,
exampleOutboundMessage = (
OutBoundCreateChallengesC3(outboundAdapterCallContext=MessageDocsSwaggerDefinitions.outboundAdapterCallContext,
userIds=listExample.value.split("[,;]").toList,
challengeType=com.openbankproject.commons.model.enums.ChallengeType.example,
transactionRequestId=Some(transactionRequestIdExample.value),
scaMethod=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthentication.SMS),
scaStatus=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthenticationStatus.example),
consentId=Some(consentIdExample.value),
basketId=Some("string"),
authenticationMethodId=Some("string"))
),
exampleInboundMessage = (
InBoundCreateChallengesC3(inboundAdapterCallContext=MessageDocsSwaggerDefinitions.inboundAdapterCallContext,
status=MessageDocsSwaggerDefinitions.inboundStatus,
data=List( ChallengeCommons(challengeId=challengeIdExample.value,
transactionRequestId=transactionRequestIdExample.value,
expectedAnswer="string",
expectedUserId="string",
salt="string",
successful=true,
challengeType=challengeTypeExample.value,
consentId=Some(consentIdExample.value),
basketId=Some("string"),
scaMethod=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthentication.SMS),
scaStatus=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthenticationStatus.example),
authenticationMethodId=Some("string"),
attemptCounter=123)))
),
adapterImplementation = Some(AdapterImplementation("- Core", 1))
)
override def createChallengesC3(userIds: List[String], challengeType: ChallengeType.Value, transactionRequestId: Option[String], scaMethod: Option[StrongCustomerAuthentication.SCA], scaStatus: Option[SCAStatus], consentId: Option[String], basketId: Option[String], authenticationMethodId: Option[String], callContext: Option[CallContext]): OBPReturnType[Box[List[ChallengeTrait]]] = {
import com.openbankproject.commons.dto.{InBoundCreateChallengesC3 => InBound, OutBoundCreateChallengesC3 => OutBound}
val req = OutBound(callContext.map(_.toOutboundAdapterCallContext).orNull, userIds, challengeType, transactionRequestId, scaMethod, scaStatus, consentId, basketId, authenticationMethodId)
val response: Future[Box[InBound]] = sendRequest[InBound]("obp_create_challenges_c3", req, callContext)
response.map(convertToTuple[List[ChallengeCommons]](callContext))
}
messageDocs += validateChallengeAnswerDoc
def validateChallengeAnswerDoc = MessageDoc(
process = "obp.validateChallengeAnswer",
@ -413,6 +459,7 @@ trait StoredProcedureConnector_vDec2019 extends Connector with MdcLoggable {
successful=true,
challengeType=challengeTypeExample.value,
consentId=Some(consentIdExample.value),
basketId=Some("string"),
scaMethod=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthentication.SMS),
scaStatus=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthenticationStatus.example),
authenticationMethodId=Some("string"),
@ -450,6 +497,7 @@ trait StoredProcedureConnector_vDec2019 extends Connector with MdcLoggable {
successful=true,
challengeType=challengeTypeExample.value,
consentId=Some(consentIdExample.value),
basketId=Some("string"),
scaMethod=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthentication.SMS),
scaStatus=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthenticationStatus.example),
authenticationMethodId=Some("string"),
@ -487,6 +535,7 @@ trait StoredProcedureConnector_vDec2019 extends Connector with MdcLoggable {
successful=true,
challengeType=challengeTypeExample.value,
consentId=Some(consentIdExample.value),
basketId=Some("string"),
scaMethod=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthentication.SMS),
scaStatus=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthenticationStatus.example),
authenticationMethodId=Some("string"),
@ -524,6 +573,7 @@ trait StoredProcedureConnector_vDec2019 extends Connector with MdcLoggable {
successful=true,
challengeType=challengeTypeExample.value,
consentId=Some(consentIdExample.value),
basketId=Some("string"),
scaMethod=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthentication.SMS),
scaStatus=Some(com.openbankproject.commons.model.enums.StrongCustomerAuthenticationStatus.example),
authenticationMethodId=Some("string"),
@ -6495,8 +6545,8 @@ trait StoredProcedureConnector_vDec2019 extends Connector with MdcLoggable {
response.map(convertToTuple[Boolean](callContext))
}
// ---------- created on 2023-06-01T16:47:09Z
//---------------- dynamic end ---------------------please don't modify this line
// ---------- created on 2024-01-15T10:32:00Z
//---------------- dynamic end ---------------------please don't modify this line
private val availableOperation = DynamicEntityOperation.values.map(it => s""""$it"""").mkString("[", ", ", "]")

View File

@ -20,12 +20,13 @@ object RemotedataChallenges extends ObpActorInit with ChallengeProvider {
expectedUserId: String,
scaMethod: Option[SCA],
scaStatus: Option[SCAStatus],
consentId: Option[String], // Note: consentId and transactionRequestId are exclusive here.
consentId: Option[String], // Note: consentId and transactionRequestId and basketId are exclusive here.
basketId: Option[String], // Note: consentId and transactionRequestId and basketId are exclusive here.
authenticationMethodId: Option[String],
challengeType: String,
): Box[ChallengeTrait] =
getValueFromFuture(
(actor ? cc.saveChallenge(challengeId, transactionRequestId, salt, expectedAnswer, expectedUserId, scaMethod, scaStatus, consentId, authenticationMethodId, challengeType))
(actor ? cc.saveChallenge(challengeId, transactionRequestId, salt, expectedAnswer, expectedUserId, scaMethod, scaStatus, consentId, basketId, authenticationMethodId, challengeType))
.mapTo[Box[ChallengeTrait]]
)
@ -44,5 +45,8 @@ object RemotedataChallenges extends ObpActorInit with ChallengeProvider {
override def getChallengesByConsentId(consentId: String): Box[List[ChallengeTrait]] = getValueFromFuture(
(actor ? cc.getChallengesByConsentId(consentId)).mapTo[Box[List[ChallengeTrait]]]
)
override def getChallengesByBasketId(basketId: String): Box[List[ChallengeTrait]] = getValueFromFuture(
(actor ? cc.getChallengesByConsentId(basketId )).mapTo[Box[List[ChallengeTrait]]]
)
}

View File

@ -17,12 +17,13 @@ class RemotedataChallengesActor extends Actor with ObpActorHelper with MdcLoggab
case cc.saveChallenge(challengeId: String, transactionRequestId: String, salt: String, expectedAnswer: String, expectedUserId: String,
scaMethod: Option[SCA],
scaStatus: Option[SCAStatus],
consentId: Option[String], // Note: consentId and transactionRequestId are exclusive here.
consentId: Option[String], // Note: consentId and transactionRequestId and basketId are exclusive here.
basketId: Option[String], // Note: consentId and transactionRequestId and basketId are exclusive here.
authenticationMethodId: Option[String],
challengeType: String,
) =>
logger.debug(s"saveChallenge($challengeId, $transactionRequestId, $salt, $expectedAnswer, $expectedUserId)")
sender ! (mapper.saveChallenge(challengeId, transactionRequestId, salt, expectedAnswer, expectedUserId, scaMethod, scaStatus, consentId, authenticationMethodId, challengeType: String))
sender ! (mapper.saveChallenge(challengeId, transactionRequestId, salt, expectedAnswer, expectedUserId, scaMethod, scaStatus, consentId, basketId, authenticationMethodId, challengeType: String))
case cc.getChallenge(challengeId: String) =>
logger.debug(s"getChallenge($challengeId)")

View File

@ -0,0 +1,105 @@
package code.signingbaskets
import code.util.MappedUUID
import com.openbankproject.commons.model.{RegulatedEntityTrait, SigningBasketConsentTrait, SigningBasketPaymentTrait, SigningBasketTrait}
import net.liftweb.common.Box
import net.liftweb.common.Box.tryo
import net.liftweb.mapper._
import scala.concurrent.Future
object MappedSigningBasketProvider extends SigningBasketProvider {
def getSigningBaskets(): List[SigningBasketTrait] = {
MappedSigningBasket.findAll()
}
override def getSigningBasketByBasketId(entityId: String): Box[SigningBasketTrait] = {
MappedSigningBasket.find(By(MappedSigningBasket.BasketId, entityId))
}
override def createSigningBasket(basketId: Option[String],
status: Option[String],
description: Option[String],
): Box[SigningBasketTrait] = {
tryo {
val entity = MappedSigningBasket.create
basketId match {
case Some(v) => entity.BasketId(v)
case None =>
}
status match {
case Some(v) => entity.Status(v)
case None =>
}
description match {
case Some(v) => entity.Description(v)
case None =>
}
if (entity.validate.isEmpty) {
entity.saveMe()
} else {
throw new Error(entity.validate.map(_.msg.toString()).mkString(";"))
}
}
}
override def deleteSigningBasket(id: String): Box[Boolean] = {
tryo(
MappedSigningBasket.bulkDelete_!!(By(MappedSigningBasket.BasketId, id))
)
}
}
class MappedSigningBasket extends SigningBasketTrait with LongKeyedMapper[MappedSigningBasket] with IdPK {
override def getSingleton = MappedSigningBasket
object BasketId extends MappedUUID(this)
object Status extends MappedString(this, 50)
object Description extends MappedText(this)
override def basketId: String = BasketId.get
override def status: String = Status.get
override def description: String = Description.get
}
object MappedSigningBasket extends MappedSigningBasket with LongKeyedMetaMapper[MappedSigningBasket] {
override def dbTableName = "SigningBasket" // define the DB table name
override def dbIndexes = Index(BasketId) :: super.dbIndexes
}
class MappedSigningBasketPayment extends SigningBasketPaymentTrait with LongKeyedMapper[MappedSigningBasketPayment] with IdPK {
override def getSingleton = MappedSigningBasketPayment
object BasketId extends MappedUUID(this)
object PaymentId extends MappedUUID(this)
override def basketId: String = BasketId.get
override def paymentId: String = PaymentId.get
}
object MappedSigningBasketPayment extends MappedSigningBasketPayment with LongKeyedMetaMapper[MappedSigningBasketPayment] {
override def dbTableName = "SigningBasketPayment" // define the DB table name
override def dbIndexes = Index(BasketId, PaymentId) :: super.dbIndexes
}
class MappedSigningBasketConsent extends SigningBasketConsentTrait with LongKeyedMapper[MappedSigningBasketConsent] with IdPK {
override def getSingleton = MappedSigningBasketConsent
object BasketId extends MappedUUID(this)
object ConsentId extends MappedUUID(this)
override def basketId: String = BasketId.get
override def consentId: String = ConsentId.get
}
object MappedSigningBasketConsent extends MappedSigningBasketConsent with LongKeyedMetaMapper[MappedSigningBasketConsent] {
override def dbTableName = "SigningBasketConsent" // define the DB table name
override def dbIndexes = Index(BasketId, ConsentId) :: super.dbIndexes
}

View File

@ -0,0 +1,27 @@
package code.signingbaskets
import com.openbankproject.commons.model.SigningBasketTrait
import net.liftweb.common.{Box, Logger}
import net.liftweb.util.SimpleInjector
object SigningBasketX extends SimpleInjector {
val signingBasketProvider: SigningBasketX.Inject[SigningBasketProvider] = new Inject(buildOne _) {}
private def buildOne: SigningBasketProvider = MappedSigningBasketProvider
}
trait SigningBasketProvider {
private val logger = Logger(classOf[SigningBasketProvider])
def getSigningBaskets(): List[SigningBasketTrait]
def getSigningBasketByBasketId(entityId: String): Box[SigningBasketTrait]
def createSigningBasket(basketId: Option[String],
status: Option[String],
description: Option[String],
): Box[SigningBasketTrait]
def deleteSigningBasket(id: String): Box[Boolean]
}

View File

@ -10,13 +10,14 @@ import net.liftweb.common.Box
trait ChallengeProvider {
def saveChallenge(
challengeId: String,
transactionRequestId: String,
transactionRequestId: String, // Note: basketId, consentId and transactionRequestId are exclusive here.
salt: String,
expectedAnswer: String,
expectedUserId: String,
scaMethod: Option[SCA],
scaStatus: Option[SCAStatus],
consentId: Option[String], // Note: consentId and transactionRequestId are exclusive here.
consentId: Option[String], // Note: basketId, consentId and transactionRequestId are exclusive here.
basketId: Option[String], // Note: basketId, consentId and transactionRequestId are exclusive here.
authenticationMethodId: Option[String],
challengeType: String,
): Box[ChallengeTrait]
@ -26,7 +27,8 @@ trait ChallengeProvider {
def getChallengesByTransactionRequestId(transactionRequestId: String): Box[List[ChallengeTrait]]
def getChallengesByConsentId(consentId: String): Box[List[ChallengeTrait]]
def getChallengesByBasketId(basketId: String): Box[List[ChallengeTrait]]
/**
* There is another method: Connector.validateChallengeAnswer, it validate the challenge over Kafka.
* This method, will validate the answer in OBP side.
@ -45,7 +47,8 @@ class RemotedataChallengeProviderCaseClasses {
expectedUserId: String,
scaMethod: Option[SCA],
scaStatus: Option[SCAStatus],
consentId: Option[String], // Note: consentId and transactionRequestId are exclusive here.
consentId: Option[String], // Note: consentId and transactionRequestId and basketId are exclusive here.
basketId: Option[String], // Note: consentId and transactionRequestId and basketId are exclusive here.
authenticationMethodId: Option[String],
challengeType: String,
)

View File

@ -19,40 +19,44 @@ object MappedChallengeProvider extends ChallengeProvider {
override def saveChallenge(
challengeId: String,
transactionRequestId: String,
transactionRequestId: String, // Note: consentId and transactionRequestId and basketId are exclusive here.
salt: String,
expectedAnswer: String,
expectedUserId: String,
scaMethod: Option[SCA],
scaStatus: Option[SCAStatus],
consentId: Option[String], // Note: consentId and transactionRequestId are exclusive here.
consentId: Option[String], // Note: consentId and transactionRequestId and basketId are exclusive here.
basketId: Option[String], // Note: consentId and transactionRequestId and basketId are exclusive here.
authenticationMethodId: Option[String],
challengeType: String,
): Box[ChallengeTrait] =
tryo (
MappedExpectedChallengeAnswer
.create
.mChallengeId(challengeId)
.mChallengeType(challengeType)
.mTransactionRequestId(transactionRequestId)
.mSalt(salt)
.mExpectedAnswer(expectedAnswer)
.mExpectedUserId(expectedUserId)
.mScaMethod(scaMethod.map(_.toString).getOrElse(""))
.mScaStatus(scaStatus.map(_.toString).getOrElse(""))
.mConsentId(consentId.getOrElse(""))
.mAuthenticationMethodId(expectedUserId)
.ChallengeId(challengeId)
.ChallengeType(challengeType)
.TransactionRequestId(transactionRequestId)
.Salt(salt)
.ExpectedAnswer(expectedAnswer)
.ExpectedUserId(expectedUserId)
.ScaMethod(scaMethod.map(_.toString).getOrElse(""))
.ScaStatus(scaStatus.map(_.toString).getOrElse(""))
.ConsentId(consentId.getOrElse(""))
.BasketId(basketId.getOrElse(""))
.AuthenticationMethodId(expectedUserId)
.saveMe()
)
override def getChallenge(challengeId: String): Box[MappedExpectedChallengeAnswer] =
MappedExpectedChallengeAnswer.find(By(MappedExpectedChallengeAnswer.mChallengeId,challengeId))
MappedExpectedChallengeAnswer.find(By(MappedExpectedChallengeAnswer.ChallengeId,challengeId))
override def getChallengesByTransactionRequestId(transactionRequestId: String): Box[List[ChallengeTrait]] =
Full(MappedExpectedChallengeAnswer.findAll(By(MappedExpectedChallengeAnswer.mTransactionRequestId,transactionRequestId)))
Full(MappedExpectedChallengeAnswer.findAll(By(MappedExpectedChallengeAnswer.TransactionRequestId,transactionRequestId)))
override def getChallengesByConsentId(consentId: String): Box[List[ChallengeTrait]] =
Full(MappedExpectedChallengeAnswer.findAll(By(MappedExpectedChallengeAnswer.mConsentId,consentId)))
Full(MappedExpectedChallengeAnswer.findAll(By(MappedExpectedChallengeAnswer.ConsentId,consentId)))
override def getChallengesByBasketId(id: String): Box[List[ChallengeTrait]] =
Full(MappedExpectedChallengeAnswer.findAll(By(MappedExpectedChallengeAnswer.BasketId,id)))
override def validateChallenge(
challengeId: String,
@ -63,7 +67,7 @@ object MappedChallengeProvider extends ChallengeProvider {
challenge <- getChallenge(challengeId) ?~! s"${ErrorMessages.InvalidTransactionRequestChallengeId}"
currentAttemptCounterValue = challenge.attemptCounter
//We update the counter anyway.
_ = challenge.mAttemptCounter(currentAttemptCounterValue+1).saveMe()
_ = challenge.AttemptCounter(currentAttemptCounterValue+1).saveMe()
createDateTime = challenge.createdAt.get
challengeTTL : Long = Helpers.seconds(APIUtil.transactionRequestChallengeTtl)
@ -76,7 +80,7 @@ object MappedChallengeProvider extends ChallengeProvider {
userId match {
case None =>
if(currentHashedAnswer==expectedHashedAnswer) {
tryo{challenge.mSuccessful(true).mScaStatus(StrongCustomerAuthenticationStatus.finalised.toString).saveMe()}
tryo{challenge.Successful(true).ScaStatus(StrongCustomerAuthenticationStatus.finalised.toString).saveMe()}
} else {
Failure(s"${
s"${
@ -87,7 +91,7 @@ object MappedChallengeProvider extends ChallengeProvider {
}
case Some(id) =>
if(currentHashedAnswer==expectedHashedAnswer && id==challenge.expectedUserId) {
tryo{challenge.mSuccessful(true).mScaStatus(StrongCustomerAuthenticationStatus.finalised.toString).saveMe()}
tryo{challenge.Successful(true).ScaStatus(StrongCustomerAuthenticationStatus.finalised.toString).saveMe()}
} else {
Failure(s"${
s"${

View File

@ -2,9 +2,9 @@ package code.transactionChallenge
import code.util.MappedUUID
import com.openbankproject.commons.model.ChallengeTrait
import com.openbankproject.commons.model.enums.{StrongCustomerAuthentication, StrongCustomerAuthenticationStatus}
import com.openbankproject.commons.model.enums.StrongCustomerAuthentication.SCA
import com.openbankproject.commons.model.enums.StrongCustomerAuthenticationStatus.SCAStatus
import com.openbankproject.commons.model.enums.{StrongCustomerAuthentication, StrongCustomerAuthenticationStatus}
import net.liftweb.mapper._
class MappedExpectedChallengeAnswer extends ChallengeTrait with LongKeyedMapper[MappedExpectedChallengeAnswer] with IdPK with CreatedUpdated {
@ -12,36 +12,39 @@ class MappedExpectedChallengeAnswer extends ChallengeTrait with LongKeyedMapper[
def getSingleton = MappedExpectedChallengeAnswer
// Unique
object mChallengeId extends MappedUUID(this)
object mChallengeType extends MappedString(this, 100)
object mTransactionRequestId extends MappedUUID(this)
object mExpectedAnswer extends MappedString(this,50)
object mExpectedUserId extends MappedUUID(this)
object mSalt extends MappedString(this, 50)
object mSuccessful extends MappedBoolean(this)
object mScaMethod extends MappedString(this,100)
object mScaStatus extends MappedString(this,100)
object mConsentId extends MappedString(this,100)
object mAuthenticationMethodId extends MappedString(this,100)
object mAttemptCounter extends MappedInt(this){
object ChallengeId extends MappedUUID(this)
object ChallengeType extends MappedString(this, 100)
object TransactionRequestId extends MappedUUID(this)
object ExpectedAnswer extends MappedString(this,50)
object ExpectedUserId extends MappedUUID(this)
object Salt extends MappedString(this, 50)
object Successful extends MappedBoolean(this)
object ScaMethod extends MappedString(this,100)
object ScaStatus extends MappedString(this,100)
object ConsentId extends MappedString(this,100)
object BasketId extends MappedString(this,100)
object AuthenticationMethodId extends MappedString(this,100)
object AttemptCounter extends MappedInt(this){
override def defaultValue = 0
}
override def challengeId: String = mChallengeId.get
override def challengeType: String = mChallengeType.get
override def transactionRequestId: String = mTransactionRequestId.get
override def expectedAnswer: String = mExpectedAnswer.get
override def expectedUserId: String = mExpectedUserId.get
override def salt: String = mSalt.get
override def successful: Boolean = mSuccessful.get
override def consentId: Option[String] = Option(mConsentId.get)
override def scaMethod: Option[SCA] = Option(StrongCustomerAuthentication.withName(mScaMethod.get))
override def scaStatus: Option[SCAStatus] = Option(StrongCustomerAuthenticationStatus.withName(mScaStatus.get))
override def authenticationMethodId: Option[String] = Option(mAuthenticationMethodId.get)
override def attemptCounter: Int = mAttemptCounter.get
override def challengeId: String = ChallengeId.get
override def challengeType: String = ChallengeType.get
override def transactionRequestId: String = TransactionRequestId.get
override def expectedAnswer: String = ExpectedAnswer.get
override def expectedUserId: String = ExpectedUserId.get
override def salt: String = Salt.get
override def successful: Boolean = Successful.get
override def consentId: Option[String] = Option(ConsentId.get)
override def basketId: Option[String] = Option(BasketId.get)
override def scaMethod: Option[SCA] = Option(StrongCustomerAuthentication.withName(ScaMethod.get))
override def scaStatus: Option[SCAStatus] = Option(StrongCustomerAuthenticationStatus.withName(ScaStatus.get))
override def authenticationMethodId: Option[String] = Option(AuthenticationMethodId.get)
override def attemptCounter: Int = AttemptCounter.get
}
object MappedExpectedChallengeAnswer extends MappedExpectedChallengeAnswer with LongKeyedMetaMapper[MappedExpectedChallengeAnswer] {
override def dbIndexes = UniqueIndex(mChallengeId):: super.dbIndexes
override def dbTableName = "ExpectedChallengeAnswer" // define the DB table name
override def dbIndexes = UniqueIndex(ChallengeId):: super.dbIndexes
}

View File

@ -116,6 +116,9 @@ class MappedClassNameTest extends FeatureSpec {
"code.UserRefreshes.MappedUserRefreshes",
"code.DynamicEndpoint.DynamicEndpoint",
"code.regulatedentities.MappedRegulatedEntity",
"code.signingbaskets.MappedSigningBasketConsent",
"code.signingbaskets.MappedSigningBasket",
"code.signingbaskets.MappedSigningBasketPayment",
"code.CustomerDependants.MappedCustomerDependant")
val newMappedTypes = ClassScanUtils.findTypes{ info =>

View File

@ -1334,8 +1334,19 @@ case class OutBoundCreateChallengesC2(
scaStatus: Option[SCAStatus],
consentId: Option[String],
authenticationMethodId: Option[String]) extends TopicTrait
case class OutBoundCreateChallengesC3(
outboundAdapterCallContext: OutboundAdapterCallContext,
userIds: List[String],
challengeType: ChallengeType.Value,
transactionRequestId: Option[String],
scaMethod: Option[SCA],
scaStatus: Option[SCAStatus],
consentId: Option[String],
basketId: Option[String],
authenticationMethodId: Option[String]) extends TopicTrait
case class InBoundCreateChallengesC2(inboundAdapterCallContext: InboundAdapterCallContext, status: Status, data: List[ChallengeCommons]) extends InBoundTrait[List[ChallengeCommons]]
case class InBoundCreateChallengesC3(inboundAdapterCallContext: InboundAdapterCallContext, status: Status, data: List[ChallengeCommons]) extends InBoundTrait[List[ChallengeCommons]]
case class OutBoundValidateChallengeAnswerC2(
outboundAdapterCallContext: OutboundAdapterCallContext,

View File

@ -532,6 +532,7 @@ case class ChallengeCommons(
override val challengeType: String,
override val consentId: Option[String],
override val basketId: Option[String] = None,
override val scaMethod: Option[SCA],
override val scaStatus: Option[SCAStatus],
override val authenticationMethodId: Option[String] ,

View File

@ -96,6 +96,19 @@ trait AccountApplication {
def status: String
}
trait SigningBasketTrait {
def basketId: String
def status: String
def description: String
}
trait SigningBasketPaymentTrait {
def basketId: String
def paymentId: String
}
trait SigningBasketConsentTrait {
def basketId: String
def consentId: String
}
trait RegulatedEntityTrait {
def entityId: String
@ -590,6 +603,7 @@ trait ChallengeTrait {
//NOTE: following are from BerlinGroup, we try to share the same challenges for different standard.
//for OBP standard, all the following can be Optional:
def consentId: Option[String] // Note: consentId and transactionRequestId are exclusive here.
def basketId: Option[String] // Note: consentId and transactionRequestId are exclusive here.
def scaMethod: Option[SCA]
def scaStatus: Option[SCAStatus]
def authenticationMethodId: Option[String]

View File

@ -3,6 +3,7 @@
### Most recent changes at top of file
```
Date Commit Action
12/01/2024 Renamed table MappedExpectedChallengeAnswer => ExpectedChallengeAnswer and removed prefix 'm' from fields.
16/11/2023 2b8811dc Added show_used_connector_methods, default is false.
30/10/2023 4e82c66c Added createLocalisedResourceDocJson.cache.ttl.seconds, default is 3600
13/10/2023 d87c99d8 Added props hikari.connectionTimeout, default is from hikari.