mirror of
https://github.com/OpenBankProject/OBP-API.git
synced 2026-02-06 15:47:01 +00:00
feature/Add Berlin Group Signing Basket; DB model
This commit is contained in:
parent
a9602e5260
commit
e14946b85a
@ -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,
|
||||
|
||||
@ -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")
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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)}
|
||||
|
||||
|
||||
@ -365,6 +365,7 @@ object ConnectorBuilderUtil {
|
||||
"checkExternalUserCredentials",
|
||||
"checkExternalUserExists",
|
||||
"createChallengesC2",
|
||||
"createChallengesC3",
|
||||
"getChallenge",
|
||||
"getChallengesByTransactionRequestId",
|
||||
"getChallengesByConsentId",
|
||||
|
||||
@ -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)
|
||||
}
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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("[", ", ", "]")
|
||||
|
||||
|
||||
@ -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("[", ", ", "]")
|
||||
|
||||
|
||||
@ -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]]]
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
@ -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)")
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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]
|
||||
|
||||
}
|
||||
@ -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,
|
||||
)
|
||||
|
||||
@ -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"${
|
||||
|
||||
@ -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
|
||||
}
|
||||
Binary file not shown.
@ -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 =>
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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] ,
|
||||
|
||||
@ -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]
|
||||
|
||||
@ -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.
|
||||
|
||||
Loading…
Reference in New Issue
Block a user