Example #1
0
        public IActionResult GetAllOrders()
        {
            var user = DbContext.Users
                       .FirstOrDefault(x => x.Login == User.Identity.Name && x.UserType == UserType.Admin);

            if (user == null)
            {
                return(Json(new BaseResponse
                {
                    Status = false,
                    Message = "User not found"
                }));
            }


            var orders = DbContext.Orders
                         .Select(u => new OrderResponseDTO(u))
                         .ToList();

            var count = DbContext.Orders.Count();

            var header = new System.Net.Http.Headers.ContentRangeHeaderValue(count != 0 ? count : 1).ToString();

            this.Response.Headers.Add(new KeyValuePair <string, StringValues>("Content-Range", header));
            this.Response.Headers.Add(new KeyValuePair <string, StringValues>("Access-Control-Expose-Headers", "Content-Range"));

            return(Json(orders));
        }
 public ContentRangeHeaderValue(System.Net.Http.Headers.ContentRangeHeaderValue containedObject)
 {
     if ((containedObject == null))
     {
         throw new System.ArgumentNullException("containedObject");
     }
     this.containedObject = containedObject;
 }
Example #3
0
        /// <summary>
        /// Fixed:
        /// </summary>
        private static string CreateResponseJson(
            Context context,
            IEnumerable <string> guids,
            IEnumerable <string> names,
            IEnumerable <string> sizes,
            IEnumerable <string> types,
            SiteSettings ss,
            Column column,
            string controlId,
            List <Attachment> attachments,
            System.Net.Http.Headers.ContentRangeHeaderValue contentRange)
        {
            Enumerable.Range(0, new[] { guids.Count(), names.Count(), sizes.Count(), types.Count() }.Min()).ForEach(index =>
            {
                var fileName = names.Skip(index).First();
                if (column.OverwriteSameFileName == true)
                {
                    OverwriteSameFileName(attachments, fileName);
                }
                attachments.Add(new Attachment()
                {
                    Guid        = guids.Skip(index).First(),
                    Name        = fileName,
                    Size        = sizes.Skip(index).First().ToLong(),
                    Extention   = System.IO.Path.GetExtension(names.Skip(index).First()),
                    ContentType = types.Skip(index).First(),
                    Added       = true,
                    Deleted     = false
                });
            });
            var hb = new HtmlBuilder();

            return(new ResponseCollection()
                   .ReplaceAll($"#{controlId}Field", new HtmlBuilder()
                               .Field(
                                   context: context,
                                   ss: ss,
                                   column: column,
                                   value: attachments.ToJson(),
                                   columnPermissionType: Permissions.ColumnPermissionType(
                                       context: context,
                                       ss: ss,
                                       column: column,
                                       null),
                                   idSuffix: System.Text.RegularExpressions.Regex.Match(controlId, "_\\d+_-?\\d+").Value
                                   ))
                   .SetData("#" + controlId)
                   .ToJson());
        }
Example #4
0
        /// <summary>
        /// Fixed:
        /// </summary>
        private static Error.Types ValidateFileHash(
            System.IO.FileInfo fileInfo,
            System.Net.Http.Headers.ContentRangeHeaderValue contentRange,
            string hash)
        {
            if (string.IsNullOrEmpty(hash))
            {
                return(Error.Types.None);
            }
            if (contentRange.Length > (contentRange.To + 1))
            {
                return(Error.Types.None);
            }
            byte[] hashValue;
            using (var fileStream = fileInfo.Open(System.IO.FileMode.Open))
            {
                fileStream.Position = 0;
                hashValue           = new System.Security.Cryptography.MD5CryptoServiceProvider().ComputeHash(fileStream);
                fileStream.Close();
            }
            var fileHash = string.Join(string.Empty, hashValue.Select(h => h.ToString("x2")));

            return(hash == fileHash ? Error.Types.None : Error.Types.InvalidRequest);
        }
Example #5
0
        /// <summary>
        /// Fixed:
        /// </summary>
        public static string UploadFile(
            Context context,
            long id,
            System.Net.Http.Headers.ContentRangeHeaderValue contentRange)
        {
            var itemModel   = new ItemModel(context, id);
            var ss          = itemModel.GetSite(context, initSiteSettings: true).SiteSettings;
            var column      = ss.GetColumn(context, TrimIdSuffix(context.Forms.Get("ColumnName")));
            var attachments = context.Forms.Get("AttachmentsData").Deserialize <Attachments>();
            var fileHash    = context.Forms.Get("FileHash");

            contentRange = contentRange ?? context?.PostedFiles?.FirstOrDefault()?.ContentRange;
            {
                var invalid = HasPermission(context, ss, itemModel);
                switch (invalid.Type)
                {
                case Error.Types.None: break;

                default: return(invalid.MessageJson(context));
                }
            }
            {
                var invalid = BinaryValidators.OnUploading(context, column, attachments, context.PostedFiles, new[] { contentRange });
                switch (invalid)
                {
                case Error.Types.OverLimitQuantity:
                    return(Messages.ResponseOverLimitQuantity(
                               context: context,
                               data: column.LimitQuantity.ToString()).ToJson());

                case Error.Types.OverLimitSize:
                    return(Messages.ResponseOverLimitSize(
                               context: context,
                               data: column.LimitSize.ToString()).ToJson());

                case Error.Types.OverTotalLimitSize:
                    return(Messages.ResponseOverTotalLimitSize(
                               context: context,
                               data: column.TotalLimitSize.ToString()).ToJson());

                case Error.Types.OverLocalFolderLimitSize:
                    return(Messages.ResponseOverLimitSize(
                               context: context,
                               data: column.LocalFolderLimitSize.ToString()).ToJson());

                case Error.Types.OverLocalFolderTotalLimitSize:
                    return(Messages.ResponseOverTotalLimitSize(
                               context: context,
                               data: column.LocalFolderTotalLimitSize.ToString()).ToJson());

                case Error.Types.OverTenantStorageSize:
                    return(Messages.ResponseOverTenantStorageSize(
                               context: context,
                               data: context.ContractSettings.StorageSize.ToString()).ToJson());

                case Error.Types.None: break;

                default: return(invalid.MessageJson(context));
                }
            }
            var controlId       = context.Forms.Get("ControlId");
            var fileUuid        = context.Forms.Get("uuid")?.Split(',');
            var fileUuids       = context.Forms.Get("Uuids")?.Split(',');
            var fileNames       = context.Forms.Get("fileNames")?.Deserialize <string[]>();
            var fileSizes       = context.Forms.Get("fileSizes")?.Deserialize <string[]>();
            var fileTypes       = context.Forms.Get("fileTypes")?.Deserialize <string[]>();
            var resultFileNames = new List <KeyValuePair <PostedFile, System.IO.FileInfo> >();

            for (int filesIndex = 0; filesIndex < context.PostedFiles.Count; ++filesIndex)
            {
                var file     = context.PostedFiles[filesIndex];
                var saveFile = GetTempFileInfo(fileUuid[filesIndex], file.FileName);
                Save(file, saveFile);
                resultFileNames.Add(
                    new KeyValuePair <PostedFile, System.IO.FileInfo>(
                        file,
                        saveFile));
            }
            {
                var invalid = ValidateFileHash(resultFileNames[0].Value, contentRange, fileHash);
                if (invalid != Error.Types.None)
                {
                    return(invalid.MessageJson(context));
                }
            }
            return(CreateResult(resultFileNames,
                                CreateResponseJson(
                                    context,
                                    fileUuids,
                                    fileNames,
                                    fileSizes,
                                    fileTypes,
                                    ss,
                                    column,
                                    controlId,
                                    attachments,
                                    contentRange)));
        }
Example #6
0
 public static bool TryParse(string input, out System.Net.Http.Headers.ContentRangeHeaderValue parsedValue)
 {
     throw null;
 }
        /// <inheritdoc />
        public Task <HttpResponseMessage> TryParse(BasicDeliverEventArgs args)
        {
            _validator.Validate(args);

            try
            {
                var props                    = args.BasicProperties;
                var content                  = new ReadOnlyMemoryContent(args.Body);
                var contentHeaders           = content.Headers;
                var contentTypeHeader        = props.Headers.ExtractHeader(HeaderNames.ContentType);
                var expiresHeader            = props.Headers.ExtractHeader(HeaderNames.Expires);
                var contentDispositionHeader = props.Headers.ExtractHeader(HeaderNames.ContentDisposition);
                var contentMd5Header         = props.Headers.GetOrDefault(HeaderNames.ContentMD5) as byte[];
                props.Headers.Remove(HeaderNames.ContentMD5);
                var contentRangeHeader        = props.Headers.ExtractHeader(HeaderNames.Range);
                var contentLastModifiedHeader = props.Headers.ExtractHeader(HeaderNames.LastModified);
                var contentLocationHeader     = props.Headers.ExtractHeader(HeaderNames.ContentLocation);

                if (!MediaTypeHeaderValue.TryParse(contentTypeHeader, out var mediaType))
                {
                    _log.LogError($"Не удалось распознать заголовок {HeaderNames.ContentType}:{contentTypeHeader}");
                }
                contentHeaders.ContentType = mediaType;

                contentHeaders.Expires            = DateTimeOffset.TryParse(expiresHeader, out var expires) ? expires : (DateTimeOffset?)null;
                contentHeaders.LastModified       = DateTimeOffset.TryParse(contentLastModifiedHeader, out var lastModified) ? lastModified : (DateTimeOffset?)null;
                contentHeaders.ContentRange       = ContentRangeHeaderValue.TryParse(contentRangeHeader, out var contentRange) ? contentRange : null;
                contentHeaders.ContentDisposition = ContentDispositionHeaderValue.TryParse(contentDispositionHeader, out var contentDisposition) ? contentDisposition : null;
                if (Uri.TryCreate(contentLocationHeader, UriKind.RelativeOrAbsolute, out var contentLocation))
                {
                    contentHeaders.ContentLocation = contentLocation;
                }

                if (contentMd5Header != null)
                {
                    contentHeaders.ContentMD5 = contentMd5Header;
                }

                var statusCodeHeader = props.Headers.GetOrDefaultString(HeaderNames.Status);
                props.Headers.Remove(HeaderNames.Status);

                props.Headers.Remove(HeaderNames.ContentLength);

                if (!int.TryParse(statusCodeHeader, out var statusCode))
                {
                    statusCode = DefaultStatusCode;
                }

                var response = new HttpResponseMessage
                {
                    StatusCode = (HttpStatusCode)statusCode,
                    Content    = content
                };
                response.Headers.AddCorrelation(props.CorrelationId);

                foreach (var header in props.Headers)
                {
                    response.Headers.Add(header.Key, ReadHeader(header));
                }

                return(Task.FromResult(response));
            }
            catch (Exception e)
            {
                _log.LogError(e, "Ошибка при парсинге ответа");

                return(null);
            }
        }