示例#1
0
 public void Startup()
 {
     _yotiProfile     = new YotiProfile();
     _yotiUserProfile = new YotiUserProfile();
     _activity        = new Activity(_yotiProfile, _yotiUserProfile);
     _attributeList   = new AttrpubapiV1.AttributeList();
 }
        /// <summary>
        /// Gets the <see cref="YotiUserProfile"/> provided by Yoti after a successful login
        /// </summary>
        /// <param name="loginInfo">The <see cref="ExternalLoginInfo"/> retrieved after an external login event.</param>
        /// <returns>The <see cref="YotiUserProfile"/> or null if this was not a Yoti login.</returns>
        public static YotiUserProfile GetYotiProfile(this ExternalLoginInfo loginInfo)
        {
            if (loginInfo.Login.LoginProvider != Constants.DefaultAuthenticationType)
            {
                return(null);
            }

            var profile = new YotiUserProfile();

            foreach (Claim claim in loginInfo.ExternalIdentity.Claims)
            {
                switch (claim.Type)
                {
                case ClaimTypes.NameIdentifier:
                    profile.Id = claim.Value;
                    break;

                case "selfie":
                    ImageType imageType;
                    if (Enum.TryParse(claim.ValueType, out imageType))
                    {
                        profile.Selfie = new Image
                        {
                            Type = imageType,
                            Data = Convert.FromBase64String(claim.Value)
                        };
                    }
                    break;

                case "given_names":
                    profile.GivenNames = claim.Value;
                    break;

                case "family_name":
                    profile.FamilyName = claim.Value;
                    break;

                case "phone_number":
                    profile.MobileNumber = claim.Value;
                    break;

                case "email_address":
                    profile.EmailAddress = claim.Value;
                    break;

                case "date_of_birth":
                {
                    DateTime date;
                    if (DateTime.TryParseExact(claim.Value, "yyyy-MM-dd", CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out date))
                    {
                        profile.DateOfBirth = date;
                    }
                }
                break;

                case "postal_address":
                    profile.Address = claim.Value;
                    break;

                case "gender":
                    profile.Gender = claim.Value;
                    break;

                case "nationality":
                    profile.Nationality = claim.Value;
                    break;

                default:
                    YotiAttributeValue.TypeEnum valueType;
                    if (Enum.TryParse(claim.ValueType, out valueType))
                    {
                        profile.OtherAttributes.Add(claim.Type, new YotiAttributeValue(valueType, claim.Value));
                    }
                    break;
                }
            }
            return(profile);
        }
        /// <summary>
        /// Gets the <see cref="YotiUserProfile"/> provided by Yoti after a successful login
        /// </summary>
        /// <param name="loginInfo">The <see cref="ExternalLoginInfo"/> retrieved after an external login event.</param>
        /// <returns>The <see cref="YotiUserProfile"/> or null if this was not a Yoti login.</returns>
        public static YotiUserProfile GetYotiProfile(this ExternalLoginInfo loginInfo)
        {
            if (loginInfo.Login.LoginProvider != Constants.DefaultAuthenticationType)
            {
                return(null);
            }

            var profile = new YotiUserProfile();

            foreach (Claim claim in loginInfo.ExternalIdentity.Claims)
            {
                switch (claim.Type)
                {
                case ClaimTypes.NameIdentifier:
                    profile.Id = claim.Value;
                    break;

                case "selfie":
                    TypeEnum imageType;
                    if (Enum.TryParse(claim.ValueType, out imageType))
                    {
                        profile.Selfie = new Image
                        {
                            Type = imageType,
                            Data = Convert.FromBase64String(claim.Value)
                        };
                    }
                    break;

                case "given_names":
                    profile.GivenNames = claim.Value;
                    break;

                case "family_name":
                    profile.FamilyName = claim.Value;
                    break;

                case "full_name":
                    profile.FullName = claim.Value;
                    break;

                case "phone_number":
                    profile.MobileNumber = claim.Value;
                    break;

                case "email_address":
                    profile.EmailAddress = claim.Value;
                    break;

                case "date_of_birth":
                {
                    if (DateTime.TryParseExact(claim.Value, "yyyy-MM-dd", CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out DateTime date))
                    {
                        profile.DateOfBirth = date;
                    }
                }
                break;

                case "postal_address":
                    profile.Address = claim.Value;
                    break;

                case "gender":
                    profile.Gender = claim.Value;
                    break;

                case "nationality":
                    profile.Nationality = claim.Value;
                    break;

                default:
                    if (claim.Type.StartsWith(Constants.AttributeAgeOver) ||
                        claim.Type.StartsWith(Constants.AttributeAgeUnder))
                    {
                        bool parsed = Boolean.TryParse(claim.Value, out bool IsAgeVerified);

                        if (!parsed)
                        {
                            throw new FormatException(
                                      String.Format(
                                          "'{0}' value was unable to be parsed into a bool",
                                          claim.Value));
                        }

                        profile.IsAgeVerified = IsAgeVerified;
                        break;
                    }
                    else
                    {
                        if (Enum.TryParse(claim.ValueType, out YotiAttributeValue.TypeEnum valueType))
                        {
                            profile.OtherAttributes.Add(claim.Type, new YotiAttributeValue(valueType, claim.Value));
                        }
                        break;
                    }
                }
            }
            return(profile);
        }
 /// <summary>
 /// Initializes a <see cref="YotiAuthenticatedContext"/>
 /// </summary>
 /// <param name="context">The OWIN environment</param>
 /// <param name="user">The Yoti user info</param>
 public YotiAuthenticatedContext(IOwinContext context, YotiUserProfile user)
     : base(context)
 {
     User = user;
 }