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; }
/// <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()); }
/// <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); }
/// <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))); }
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); } }