Ejemplo n.º 1
0
        private WopiResponse ProcessPutFileRequest(PutFileRequest wopiReq, PortalContext portalContext)
        {
            if (!int.TryParse(wopiReq.FileId, out var contentId))
            {
                return new WopiResponse {
                           StatusCode = HttpStatusCode.NotFound
                }
            }
            ;
            if (!(Node.LoadNode(contentId) is File file))
            {
                return new WopiResponse {
                           StatusCode = HttpStatusCode.NotFound
                }
            }
            ;

            var existingLock = SharedLock.GetLock(file.Id);

            if (existingLock == null)
            {
                if (file.Binary.Size != 0)
                {
                    return new WopiResponse {
                               StatusCode = HttpStatusCode.Conflict
                    }
                }
                ;
            }
            if (existingLock != wopiReq.Lock)
            {
                return(new WopiResponse
                {
                    StatusCode = HttpStatusCode.Conflict,
                    Headers = new Dictionary <string, string>
                    {
                        { WopiHeader.Lock, existingLock },
                        { WopiHeader.LockFailureReason, "LockedByAnother" }
                    }
                });
            }

            file.Binary.SetStream(wopiReq.RequestStream);
            file.Save();
            //UNDONE:! Set X-WOPI-ItemVersion header if needed.
            return(new WopiResponse {
                StatusCode = HttpStatusCode.OK
            });
        }
    }
}
Ejemplo n.º 2
0
        private WopiResponse ProcessPutFileRequest(PutFileRequest wopiReq)
        {
            if (!int.TryParse(wopiReq.FileId, out var contentId))
            {
                return new WopiResponse {
                           StatusCode = HttpStatusCode.NotFound
                }
            }
            ;
            if (!(Node.LoadNode(contentId) is File file))
            {
                return new WopiResponse {
                           StatusCode = HttpStatusCode.NotFound
                }
            }
            ;

            return(ProcessPutFileRequest(file, wopiReq.Lock, wopiReq.RequestStream));
        }
Ejemplo n.º 3
0
        private async Task <WopiResponse> ProcessPutFileRequestAsync(PutFileRequest wopiRequest,
                                                                     CancellationToken cancellationToken)
        {
            if (!int.TryParse(wopiRequest.FileId, out var contentId))
            {
                return new WopiResponse {
                           StatusCode = HttpStatusCode.NotFound
                }
            }
            ;
            if (!(await Node.LoadNodeAsync(contentId, cancellationToken).ConfigureAwait(false) is File file))
            {
                return new WopiResponse {
                           StatusCode = HttpStatusCode.NotFound
                }
            }
            ;

            return(await ProcessPutFileRequestAsync(file, wopiRequest.Lock, wopiRequest.RequestStream,
                                                    cancellationToken).ConfigureAwait(false));
        }