Updated on 2026-08-14

This commit is contained in:
Tangem 2020-04-29 22:46:16 +03:00
parent 49c01c0b3f
commit 917e414f14
3 changed files with 80 additions and 111 deletions

View file

@ -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)
}
}

View file

@ -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
)
}
}

View file

@ -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
)
}