/// <summary> /// Deserializes the raw data into the concrete class <see cref="Psd2Attributes"/>. /// </summary> /// <returns>Deserilized contents</returns> public Psd2Attributes Extract() { var attributes = new Psd2Attributes(); var typeSequence = Value.Where(x => x is DerAsnSequence).FirstOrDefault() as DerAsnSequence; var roleSequence = typeSequence?.Value.Where(x => x is DerAsnSequence).FirstOrDefault() as DerAsnSequence; var ncaName = typeSequence?.Value[1] as DerAsnUtf8String; var ncaId = typeSequence?.Value[2] as DerAsnUtf8String; attributes.AuthorityName = ncaName.Value; attributes.AuthorizationId = NCAId.Parse(ncaId.Value, false); foreach (var item in roleSequence.Value) { if (!(item is DerAsnSequence)) { continue; } var role = item as DerAsnSequence; var roleOid = role.Value[0] as DerAsnObjectIdentifier; var roleOidString = string.Join(".", roleOid.Value); switch (roleOidString) { case Oid_PSD2_Roles_PSP_AS: attributes.HasAccountServicing = true; break; case Oid_PSD2_Roles_PSP_PI: attributes.HasPaymentInitiation = true; break; case Oid_PSD2_Roles_PSP_AI: attributes.HasAccountInformation = true; break; case Oid_PSD2_Roles_PSP_IC: attributes.HasIssuingOfCardBasedPaymentInstruments = true; break; } } return(attributes); }
/// <summary> /// Supply conversion from <see cref="string"/> to <seealso cref="NCAId"/> otherwise use default implementation /// </summary> /// <param name="context"></param> /// <param name="culture"></param> /// <param name="value"></param> /// <returns></returns> public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { if (value is string) { return(NCAId.Parse((string)value)); } return(base.ConvertFrom(context, culture, value)); }