public async Task <HttpResponseMessage> GetFile(string file_id) { var getFileRequest = new GetFileRequest(this.Request, file_id); WopiResponse wopiResponse = null; try { if (await Authorize(getFileRequest)) { if (await WopiProof.Validate(getFileRequest)) { wopiResponse = await GetFile(getFileRequest); } else { getFileRequest.ResponseServerError("Proof validation failed"); } } else { wopiResponse = getFileRequest.ResponseUnauthorized(); } } catch (Exception ex) { wopiResponse = getFileRequest.ResponseServerError(ex.Message); } return(wopiResponse.ToHttpResponse()); }
public async Task <HttpResponseMessage> ProcessPostActions(string file_id) { WopiRequest wopiRequest = new WopiRequest(this.Request, file_id); WopiResponse wopiResponse = null; try { if (await Authorize(wopiRequest)) { if (await WopiProof.Validate(wopiRequest)) { var filesPostOverride = WopiRequest.GetHttpRequestHeader(this.Request, WopiRequestHeaders.OVERRIDE); switch (filesPostOverride) { case "LOCK": var oldLock = WopiRequest.GetHttpRequestHeader(this.Request, WopiRequestHeaders.OLD_LOCK); if (oldLock != null) { wopiResponse = await UnlockAndRelock(new UnlockAndRelockRequest(this.Request, file_id)); } else { wopiResponse = await Lock(new LockRequest(this.Request, file_id)); } break; case "GET_LOCK": wopiResponse = await GetLock(new GetLockRequest(this.Request, file_id)); break; case "REFRESH_LOCK": wopiResponse = await RefreshLock(new RefreshLockRequest(this.Request, file_id)); break; case "UNLOCK": wopiResponse = await Unlock(new UnlockRequest(this.Request, file_id)); break; case "PUT_RELATIVE": var suggestedTarget = WopiRequest.GetHttpRequestHeader(this.Request, WopiRequestHeaders.SUGGESTED_TARGET); var relativeTarget = WopiRequest.GetHttpRequestHeader(this.Request, WopiRequestHeaders.RELATIVE_TARGET); if (suggestedTarget != null && relativeTarget != null) { // This really should be BadRequest, but the spec requires NotImplmented wopiResponse = new WopiResponse() { StatusCode = HttpStatusCode.NotImplemented }; } else { if (suggestedTarget != null) { wopiResponse = await PutRelativeFileSuggested(new PutRelativeFileSuggestedRequest(this.Request, file_id)); } else if (relativeTarget != null) { wopiResponse = await PutRelativeFileSpecific(new PutRelativeFileSpecificRequest(this.Request, file_id)); } else // Both are null { wopiResponse = new WopiResponse() { StatusCode = HttpStatusCode.BadRequest } }; } break; case "RENAME_FILE": wopiResponse = await RenameFile(new RenameFileRequest(this.Request, file_id)); break; case "PUT_USER_INFO": wopiResponse = await PutUserInfo(new PutUserInfoRequest(this.Request, file_id)); break; case "DELETE": wopiResponse = await DeleteFile(new DeleteFileRequest(this.Request, file_id)); break; default: wopiResponse = wopiRequest.ResponseServerError(string.Format("Invalid {0} header value: {1}", WopiRequestHeaders.OVERRIDE, filesPostOverride)); break; } } else { wopiResponse = wopiRequest.ResponseServerError("Proof validation failed"); } } else { wopiResponse = wopiRequest.ResponseUnauthorized(); } } catch (Exception ex) { wopiResponse = wopiRequest.ResponseServerError(ex.Message); } return(wopiResponse.ToHttpResponse()); }