/// <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)); }
/// <summary> /// Try parse the given <paramref name="text"/> into a <paramref name="ncaId"/>. In case of exception it handles it and returns false /// </summary> /// <param name="text"></param> /// <param name="ncaId"></param> /// <returns>true in case of success</returns> public static bool TryParse(string text, out NCAId ncaId) { ncaId = default(NCAId); try { ncaId = Parse(text); return(true); } catch { return(false); } }
/// <summary> /// Create the cab forum by providing the NCAId (as defined in PSD2) /// </summary> /// <param name="identifier"></param> public CABForumOrganizationIdentifier(NCAId identifier) { SchemeIdentifier = identifier.Prefix; Country = identifier.CountryCode; Reference = string.Join('-', new[] { identifier.SupervisionAuthority, identifier.AuthorizationNumber }.Where(x => !string.IsNullOrEmpty(x))); }