internal string GenerateChallengeSignature(InstaApiVersion apiVersion,
                                                   string signatureKey,
                                                   string csrfToken,
                                                   out string deviceid)
        {
            if (string.IsNullOrEmpty(signatureKey))
            {
                signatureKey = apiVersion.SignatureKey;
            }

            var api = new InstaApiRequestChallengeMessage
            {
                CsrtToken         = csrfToken,
                DeviceId          = DeviceId,
                Guid              = Guid,
                LoginAttemptCount = "1",
                Password          = Password,
                PhoneId           = PhoneId,
                Username          = Username,
                AdId              = AdId
            };
            var res = InstaCryptoHelper.CalculateHash(
                signatureKey,
                JsonConvert.SerializeObject(api));

            deviceid = DeviceId;
            return(res);
        }
        internal string GenerateSignature(InstaApiVersion apiVersion, string signatureKey)
        {
            if (string.IsNullOrEmpty(signatureKey))
            {
                signatureKey = apiVersion.SignatureKey;
            }

            return(InstaCryptoHelper.CalculateHash(
                       signatureKey,
                       JsonConvert.SerializeObject(this)));
        }
        internal string GenerateSignature(InstaApiVersion apiVersion, string signatureKey, out string deviceid)
        {
            if (string.IsNullOrEmpty(signatureKey))
            {
                signatureKey = apiVersion.SignatureKey;
            }

            var res = InstaCryptoHelper.CalculateHash(
                signatureKey,
                JsonConvert.SerializeObject(this));

            deviceid = DeviceId;
            return(res);
        }
        /// <summary>
        ///     Inline comment media
        /// </summary>
        /// <param name="mediaId">Media id</param>
        /// <param name="targetCommentId">Target comment id</param>
        /// <param name="text">Comment text</param>
        public async Task <IResult <InstaComment> > ReplyCommentMediaAsync(
            string mediaId,
            string targetCommentId,
            string text)
        {
            InstaUserAuthValidator.Validate(userAuthValidate);
            try
            {
                var instaUri   = InstaUriCreator.GetPostCommetUri(mediaId);
                var breadcrumb = InstaCryptoHelper.GetCommentBreadCrumbEncoded(text);
                var fields     = new Dictionary <string, string>
                {
                    { "user_breadcrumb", breadcrumb },
                    { "idempotence_token", Guid.NewGuid().ToString() },
                    { "_uuid", deviceInfo.DeviceGuid.ToString() },
                    { "replied_to_comment_id", targetCommentId },
                    { "_uid", user.LoggedInUser.Pk.ToString() },
                    { "_csrftoken", user.CsrfToken },
                    { "comment_text", text },
                    { "containermodule", "comments_feed_timeline" },
                    { "radio_type", "wifi-none" }
                };
                var request =
                    httpHelper.GetSignedRequest(HttpMethod.Post, instaUri, deviceInfo, fields);
                var response = await httpRequestProcessor.SendAsync(request).ConfigureAwait(false);

                var json = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

                if (response.StatusCode != HttpStatusCode.OK)
                {
                    return(Result.UnExpectedResponse <InstaComment>(response, json));
                }

                var commentResponse = JsonConvert.DeserializeObject <InstaCommentResponse>(
                    json,
                    new InstaCommentDataConverter());
                var converter = InstaConvertersFabric.Instance.GetCommentConverter(commentResponse);
                return(Result.Success(converter.Convert()));
            }
            catch (HttpRequestException httpException)
            {
                logger?.LogError(httpException, "Error");
                return(Result.Fail(httpException, default(InstaComment), ResponseType.NetworkProblem));
            }
            catch (Exception exception)
            {
                logger?.LogError(exception, "Error");
                return(Result.Fail <InstaComment>(exception));
            }
        }
        public static string GenerateDeviceIdFromGuid(Guid guid)
        {
            var hashedGuid = InstaCryptoHelper.CalculateMd5(guid.ToString());

            return($"android-{hashedGuid.Substring(0, 16)}");
        }