Updated on 2026-08-14
This commit is contained in:
parent
49c01c0b3f
commit
917e414f14
3 changed files with 80 additions and 111 deletions
|
|
@ -11,9 +11,10 @@ import com.tangem.devkit.ucase.tunnel.ActionView
|
|||
import com.tangem.devkit.ucase.tunnel.ItemError
|
||||
import com.tangem.devkit.ucase.variants.personalize.CardNumberId
|
||||
import com.tangem.devkit.ucase.variants.personalize.converter.PersonalizationConfigConverter
|
||||
import com.tangem.devkit.ucase.variants.personalize.converter.PersonalizationConfigToCardConfig
|
||||
import com.tangem.devkit.ucase.variants.personalize.converter.PersonalizationJsonConverter
|
||||
import com.tangem.devkit.ucase.variants.personalize.dto.DefaultPersonalizationParams
|
||||
import com.tangem.devkit.ucase.variants.personalize.dto.PersonalizationConfig
|
||||
import com.tangem.devkit.ucase.variants.personalize.dto.toCardConfig
|
||||
import ru.dev.gbixahue.eu4d.lib.kotlin.stringOf
|
||||
|
||||
/**
|
||||
|
|
@ -37,10 +38,10 @@ class PersonalizeAction : BaseAction() {
|
|||
val acquirer = DefaultPersonalizationParams.acquirer()
|
||||
val manufacturer = DefaultPersonalizationParams.manufacturer()
|
||||
|
||||
val personalizeConfig = PersonalizationConfigConverter().convert(itemList, PersonalizationConfig.default())
|
||||
val cardConfig = PersonalizationConfigToCardConfig().convert(personalizeConfig)
|
||||
val config = PersonalizationConfigConverter().convert(itemList, PersonalizationConfig.default())
|
||||
val jsonDto = PersonalizationJsonConverter().bToA(config)
|
||||
|
||||
attrs.tangemSdk.personalize(cardConfig, issuer, manufacturer, acquirer) {
|
||||
attrs.tangemSdk.personalize(jsonDto.toCardConfig(), issuer, manufacturer, acquirer) {
|
||||
handleResult(payload, it, null, attrs, callback)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,107 +0,0 @@
|
|||
package com.tangem.devkit.ucase.variants.personalize.converter
|
||||
|
||||
import com.tangem.commands.CardData
|
||||
import com.tangem.commands.EllipticCurve
|
||||
import com.tangem.commands.Product
|
||||
import com.tangem.commands.ProductMaskBuilder
|
||||
import com.tangem.commands.personalization.entities.CardConfig
|
||||
import com.tangem.commands.personalization.entities.NdefRecord
|
||||
import com.tangem.devkit.ucase.variants.personalize.dto.PersonalizationConfig
|
||||
import com.tangem.devkit.ucase.variants.personalize.dto.PersonalizationJson
|
||||
import ru.dev.gbixahue.eu4d.lib.kotlin.common.Converter
|
||||
import java.util.*
|
||||
|
||||
class PersonalizationConfigToCardConfig : Converter<PersonalizationConfig, CardConfig> {
|
||||
|
||||
override fun convert(from: PersonalizationConfig): CardConfig {
|
||||
val signingMethod = PersonalizationConfig.makeSigningMethodMask(from)
|
||||
|
||||
val isNote = from.cardData.product_note
|
||||
val isTag = from.cardData.product_tag
|
||||
val isIdCard = from.cardData.product_id_card
|
||||
val isIdIssuer = from.cardData.product_id_issuer
|
||||
|
||||
val productMaskBuilder = ProductMaskBuilder()
|
||||
if (isNote) productMaskBuilder.add(Product.Note)
|
||||
if (isTag) productMaskBuilder.add(Product.Tag)
|
||||
if (isIdCard) productMaskBuilder.add(Product.IdCard)
|
||||
if (isIdIssuer) productMaskBuilder.add(Product.IdIssuer)
|
||||
val productMask = productMaskBuilder.build()
|
||||
|
||||
var tokenSymbol: String? = null
|
||||
var tokenContractAddress: String? = null
|
||||
var tokenDecimal: Long? = null
|
||||
if (from.itsToken) {
|
||||
tokenSymbol = from.cardData.token_symbol
|
||||
tokenContractAddress = from.cardData.token_contract_address
|
||||
tokenDecimal = from.cardData.token_decimal
|
||||
}
|
||||
|
||||
val blockchain = if (from.cardData.blockchain.isNotEmpty()) from.cardData.blockchain else from.blockchainCustom
|
||||
val cardData = CardData(
|
||||
blockchainName = blockchain,
|
||||
batchId = from.cardData.batch,
|
||||
productMask = productMask,
|
||||
tokenSymbol = tokenSymbol,
|
||||
tokenContractAddress = tokenContractAddress,
|
||||
tokenDecimal = tokenDecimal?.toInt(),
|
||||
issuerName = null,
|
||||
manufactureDateTime = Calendar.getInstance().time,
|
||||
manufacturerSignature = null)
|
||||
|
||||
|
||||
val ndefs = mutableListOf<NdefRecord>()
|
||||
if (from.uri.isNotEmpty()) {
|
||||
ndefs.add(NdefRecord(NdefRecord.Type.URI, from.uri))
|
||||
}
|
||||
when (from.aar) {
|
||||
"None" -> null
|
||||
PersonalizationJson.CUSTOM -> NdefRecord(NdefRecord.Type.AAR, from.aarCustom)
|
||||
else -> NdefRecord(NdefRecord.Type.AAR, from.aar)
|
||||
}?.let { ndefs.add(it) }
|
||||
|
||||
return CardConfig(
|
||||
"Tangem",
|
||||
"Tangem Test",
|
||||
from.series,
|
||||
from.startNumber,
|
||||
1000,
|
||||
from.PIN,
|
||||
from.PIN2,
|
||||
from.PIN3,
|
||||
from.hexCrExKey,
|
||||
from.CVC,
|
||||
from.pauseBeforePIN2.toInt(),
|
||||
from.smartSecurityDelay,
|
||||
EllipticCurve.byName(from.curveID) ?: EllipticCurve.Secp256k1,
|
||||
signingMethod,
|
||||
from.MaxSignatures.toInt(),
|
||||
from.isReusable,
|
||||
from.allowSwapPIN,
|
||||
from.allowSwapPIN2,
|
||||
from.useActivation,
|
||||
from.useCVC,
|
||||
from.useNDEF,
|
||||
from.useDynamicNDEF,
|
||||
from.useOneCommandAtTime,
|
||||
from.useBlock,
|
||||
from.allowSelectBlockchain,
|
||||
from.forbidPurgeWallet,
|
||||
from.protocolAllowUnencrypted,
|
||||
from.protocolAllowStaticEncryption,
|
||||
from.protectIssuerDataAgainstReplay,
|
||||
from.forbidDefaultPIN,
|
||||
from.disablePrecomputedNDEF,
|
||||
from.skipSecurityDelayIfValidatedByIssuer,
|
||||
from.skipCheckPIN2andCVCIfValidatedByIssuer,
|
||||
from.skipSecurityDelayIfValidatedByLinkedTerminal,
|
||||
from.restrictOverwriteIssuerDataEx,
|
||||
from.requireTerminalTxSignature,
|
||||
from.requireTerminalCertSignature,
|
||||
from.checkPIN3onCard,
|
||||
from.createWallet,
|
||||
cardData,
|
||||
ndefs
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -2,7 +2,13 @@ package com.tangem.devkit.ucase.variants.personalize.dto
|
|||
|
||||
import com.google.gson.Gson
|
||||
import com.google.gson.GsonBuilder
|
||||
import com.tangem.commands.EllipticCurve
|
||||
import com.tangem.commands.Product
|
||||
import com.tangem.commands.ProductMaskBuilder
|
||||
import com.tangem.commands.SigningMethodMask
|
||||
import com.tangem.commands.personalization.entities.CardConfig
|
||||
import com.tangem.commands.personalization.entities.NdefRecord
|
||||
import java.util.*
|
||||
|
||||
class PersonalizationJson {
|
||||
|
||||
|
|
@ -60,4 +66,73 @@ class PersonalizationJson {
|
|||
return builder.create()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun PersonalizationJson.toCardConfig(): CardConfig {
|
||||
val isNote = cardData.product_note
|
||||
val isTag = cardData.product_tag
|
||||
val isIdCard = cardData.product_id_card
|
||||
val isIdIssuer = cardData.product_id_issuer
|
||||
|
||||
val productMaskBuilder = ProductMaskBuilder()
|
||||
if (isNote) productMaskBuilder.add(Product.Note)
|
||||
if (isTag) productMaskBuilder.add(Product.Tag)
|
||||
if (isIdCard) productMaskBuilder.add(Product.IdCard)
|
||||
if (isIdIssuer) productMaskBuilder.add(Product.IdIssuer)
|
||||
val productMask = productMaskBuilder.build()
|
||||
|
||||
val sdkCardData = com.tangem.commands.CardData(
|
||||
blockchainName = this.cardData.blockchain,
|
||||
batchId = this.cardData.batch,
|
||||
productMask = productMask,
|
||||
tokenSymbol = this.cardData.token_symbol,
|
||||
tokenContractAddress = this.cardData.token_contract_address,
|
||||
tokenDecimal = this.cardData.token_decimal.toInt(),
|
||||
issuerName = this.issuerName,
|
||||
manufactureDateTime = Calendar.getInstance().time,
|
||||
manufacturerSignature = null)
|
||||
|
||||
return CardConfig(
|
||||
this.issuerName,
|
||||
"Tangem Test",
|
||||
this.series,
|
||||
this.startNumber,
|
||||
this.count.toInt(),
|
||||
this.PIN,
|
||||
this.PIN2,
|
||||
this.PIN3,
|
||||
this.hexCrExKey,
|
||||
this.CVC,
|
||||
this.pauseBeforePIN2.toInt(),
|
||||
this.smartSecurityDelay,
|
||||
EllipticCurve.byName(this.curveID) ?: EllipticCurve.Secp256k1,
|
||||
SigningMethodMask(this.SigningMethod.toInt()),
|
||||
this.MaxSignatures.toInt(),
|
||||
this.isReusable,
|
||||
this.allowSwapPIN,
|
||||
this.allowSwapPIN2,
|
||||
this.useActivation,
|
||||
this.useCVC,
|
||||
this.useNDEF,
|
||||
this.useDynamicNDEF,
|
||||
this.useOneCommandAtTime,
|
||||
this.useBlock,
|
||||
this.allowSelectBlockchain,
|
||||
this.forbidPurgeWallet,
|
||||
this.protocolAllowUnencrypted,
|
||||
this.protocolAllowStaticEncryption,
|
||||
this.protectIssuerDataAgainstReplay,
|
||||
this.forbidDefaultPIN,
|
||||
this.disablePrecomputedNDEF,
|
||||
this.skipSecurityDelayIfValidatedByIssuer,
|
||||
this.skipCheckPIN2andCVCIfValidatedByIssuer,
|
||||
this.skipSecurityDelayIfValidatedByLinkedTerminal,
|
||||
this.restrictOverwriteIssuerDataEx,
|
||||
this.requireTerminalTxSignature,
|
||||
this.requireTerminalCertSignature,
|
||||
this.checkPIN3onCard,
|
||||
this.createWallet != 0L,
|
||||
sdkCardData,
|
||||
this.ndef
|
||||
)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue