internal ActivityDetails(string rememberMeId, string parentRememberMeId, DateTime?timestamp, YotiProfile yotiProfile, ApplicationProfile applicationProfile, string receiptId, ExtraData extraData)
 {
     RememberMeId       = rememberMeId;
     ParentRememberMeId = parentRememberMeId;
     Timestamp          = timestamp;
     Profile            = yotiProfile;
     ApplicationProfile = applicationProfile;
     ReceiptId          = receiptId;
     ExtraData          = extraData;
 }
        public static ActivityDetails HandleResponse(AsymmetricCipherKeyPair keyPair, string responseContent)
        {
            if (string.IsNullOrEmpty(responseContent))
            {
                throw new YotiProfileException(Properties.Resources.NullOrEmptyResponseContent);
            }

            ProfileDO parsedResponse = JsonConvert.DeserializeObject <ProfileDO>(responseContent);

            if (parsedResponse.Receipt == null)
            {
                throw new YotiProfileException(Properties.Resources.NullParsedResponse);
            }
            else if (parsedResponse.Receipt.SharingOutcome != "SUCCESS")
            {
                throw new YotiProfileException(
                          $"The share was not successful, sharing_outcome: '{parsedResponse.Receipt.SharingOutcome}'");
            }

            ReceiptDO receipt = parsedResponse.Receipt;

            var userProfile = new YotiProfile(
                ParseProfileContent(keyPair, receipt.WrappedReceiptKey, receipt.OtherPartyProfileContent));

            SetAddressToBeFormattedAddressIfNull(userProfile);

            var applicationProfile = new ApplicationProfile(
                ParseProfileContent(keyPair, receipt.WrappedReceiptKey, receipt.ProfileContent));

            ExtraData extraData = new ExtraData();

            if (!string.IsNullOrEmpty(parsedResponse.Receipt.ExtraDataContent))
            {
                extraData = CryptoEngine.DecryptExtraData(
                    receipt.WrappedReceiptKey,
                    parsedResponse.Receipt.ExtraDataContent,
                    keyPair);
            }

            DateTime?timestamp = null;

            if (receipt.Timestamp != null &&
                DateTime.TryParseExact(
                    receipt.Timestamp,
                    "yyyy-MM-ddTHH:mm:ssZ",
                    CultureInfo.InvariantCulture,
                    DateTimeStyles.AdjustToUniversal,
                    out DateTime parsedDate))
            {
                timestamp = parsedDate;
            }

            return(new ActivityDetails(parsedResponse.Receipt.RememberMeId, parsedResponse.Receipt.ParentRememberMeId, timestamp, userProfile, applicationProfile, parsedResponse.Receipt.ReceiptId, extraData));
        }
        internal static void SetAddressToBeFormattedAddressIfNull(YotiProfile yotiProfile)
        {
            YotiAttribute <Dictionary <string, JToken> > structuredPostalAddress = yotiProfile.StructuredPostalAddress;

            if (yotiProfile.Address == null && structuredPostalAddress != null)
            {
                structuredPostalAddress.GetValue().TryGetValue("formatted_address", out JToken formattedAddressJToken);

                if (formattedAddressJToken != null)
                {
                    var addressAttribute = new YotiAttribute <string>(
                        name: Constants.UserProfile.PostalAddressAttribute,
                        value: formattedAddressJToken.ToString(),
                        anchors: structuredPostalAddress.GetAnchors());

                    yotiProfile.Add(addressAttribute);
                }
            }
        }
        private static void HandleOtherAttributes(YotiProfile profile, AttrpubapiV1.Attribute attribute, byte[] data)
        {
            profile.OtherAttributes = new Dictionary <string, YotiAttributeValue>();

            switch (attribute.ContentType)
            {
            case AttrpubapiV1.ContentType.Date:
                profile.OtherAttributes.Add(
                    attribute.Name,
                    new YotiAttributeValue(TypeEnum.Date, data));
                break;

            case AttrpubapiV1.ContentType.String:
                profile.OtherAttributes.Add(
                    attribute.Name,
                    new YotiAttributeValue(TypeEnum.Text, data));
                break;

            case AttrpubapiV1.ContentType.Jpeg:
                profile.OtherAttributes.Add(
                    attribute.Name,
                    new YotiAttributeValue(TypeEnum.Jpeg, data));
                break;

            case AttrpubapiV1.ContentType.Png:
                profile.OtherAttributes.Add(
                    attribute.Name,
                    new YotiAttributeValue(TypeEnum.Png, data));
                break;

            case AttrpubapiV1.ContentType.Json:
                profile.OtherAttributes.Add(
                    attribute.Name,
                    new YotiAttributeValue(TypeEnum.Json, data));
                break;

            // do not return attributes with undefined content types
            case AttrpubapiV1.ContentType.Undefined:
            default:
                break;
            }
        }
 public Activity(YotiProfile yotiProfile, YotiUserProfile yotiUserProfile)
 {
     _yotiUserProfile = yotiUserProfile;
     _yotiProfile     = yotiProfile;
 }