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