/// <summary> /// Processes a CheckFileInfo request /// </summary> /// <remarks> /// For full documentation on CheckFileInfo, see /// https://wopi.readthedocs.io/projects/wopirest/en/latest/files/CheckFileInfo.html /// </remarks> private void HandleCheckFileInfoRequest(HttpContext context, WopiRequest requestData) { if (!ValidateAccess(requestData, writeAccessRequired: false)) { ReturnInvalidToken(context.Response); return; } IFileStorage storage = FileStorageFactory.CreateFileStorage(); long size = storage.GetFileSize(requestData.Id); if (size == -1) { ReturnFileUnknown(context.Response); return; } bool bRO = storage.GetReadOnlyStatus(requestData.Id); try { CheckFileInfoResponse responseData = new CheckFileInfoResponse() { // required CheckFileInfo properties BaseFileName = Path.GetFileName(requestData.Id), OwnerId = "documentOwnerId", Size = Convert.ToInt32(size), Version = storage.GetFileVersion(requestData.Id), UserId = "WOPITestUser", // optional CheckFileInfo properties BreadcrumbBrandName = "LocalStorage WOPI Host", //BreadcrumbFolderName = fileInfo.Directory != null ? fileInfo.Directory.Name : "", BreadcrumbFolderName = "", BreadcrumbDocName = Path.GetFileNameWithoutExtension(requestData.Id), BreadcrumbBrandUrl = "http://" + context.Request.Url.Host, BreadcrumbFolderUrl = "http://" + context.Request.Url.Host, UserFriendlyName = "A WOPI User", SupportsLocks = true, SupportsUpdate = true, UserCanNotWriteRelative = true, /* Because this host does not support PutRelativeFile */ ReadOnly = bRO, UserCanWrite = !bRO }; string jsonString = JsonConvert.SerializeObject(responseData); context.Response.Write(jsonString); ReturnSuccess(context.Response); } catch (UnauthorizedAccessException) { ReturnFileUnknown(context.Response); } }
/// <summary> /// Processes a CheckFileInfo request /// </summary> /// <remarks> /// For full documentation on CheckFileInfo, see /// https://wopi.readthedocs.io/projects/wopirest/en/latest/files/CheckFileInfo.html /// </remarks> private void HandleCheckFileInfoRequest(HttpContext context, WopiRequest requestData) { if (!ValidateAccess(requestData, writeAccessRequired: false)) { ReturnInvalidToken(context.Response); return; } IFileStorage storage = new FTPFileStorage(); long size = storage.GetFileSize(requestData.Id); if (size == -1) { ReturnFileUnknown(context.Response); return; } DateTime?lastModifiedTime = storage.GetLastModifiedTime(requestData.Id); try { CheckFileInfoResponse responseData = new CheckFileInfoResponse() { // required CheckFileInfo properties BaseFileName = Path.GetFileName(requestData.Id), OwnerId = "documentOwnerId", Size = Convert.ToInt32(size), //Version = file.LastWriteTimeUtc.ToString("O" /* ISO 8601 DateTime format string */), // Using the file write time is an arbitrary choice. Version = Convert.ToDateTime((DateTime)lastModifiedTime).ToFileTimeUtc().ToString(), // optional CheckFileInfo properties BreadcrumbBrandName = "LocalStorage WOPI Host", //BreadcrumbFolderName = fileInfo.Directory != null ? fileInfo.Directory.Name : "", BreadcrumbFolderName = "", BreadcrumbDocName = Path.GetFileNameWithoutExtension(requestData.Id), UserFriendlyName = "A WOPI User", SupportsLocks = true, SupportsUpdate = true, UserCanNotWriteRelative = true, /* Because this host does not support PutRelativeFile */ ReadOnly = false, UserCanWrite = true }; string jsonString = JsonConvert.SerializeObject(responseData); context.Response.Write(jsonString); ReturnSuccess(context.Response); } catch (UnauthorizedAccessException) { ReturnFileUnknown(context.Response); } }
/// <summary> /// Processes a CheckFileInfo request /// </summary> /// <remarks> /// For full documentation on CheckFileInfo, see /// https://wopi.readthedocs.io/projects/wopirest/en/latest/files/CheckFileInfo.html /// </remarks> private void HandleCheckFileInfoRequest(HttpContext context, WopiRequest requestData) { System.IO.FileStream stream = new FileStream(Path.Combine(LocalStoragePath, "Log.txt"), FileMode.Append); byte[] data = System.Text.Encoding.Default.GetBytes("===================CheckFileInfo======================"); stream.Write(data, 0, data.Length); data = System.Text.Encoding.Default.GetBytes("access_token: " + requestData.AccessToken); stream.Write(data, 0, data.Length); data = System.Text.Encoding.Default.GetBytes("file name: " + requestData.Id); stream.Write(data, 0, data.Length); stream.Flush(); stream.Close(); if (!ValidateAccess(requestData, writeAccessRequired: false)) { ReturnInvalidToken(context.Response); return; } if (!File.Exists(requestData.FullPath)) { ReturnFileUnknown(context.Response); return; } try { FileInfo fileInfo = new FileInfo(requestData.FullPath); if (!fileInfo.Exists) { ReturnFileUnknown(context.Response); return; } // For more info on CheckFileInfoResponse fields, see // https://wopi.readthedocs.io/projects/wopirest/en/latest/files/CheckFileInfo.html#response CheckFileInfoResponse responseData = new CheckFileInfoResponse() { // required CheckFileInfo properties BaseFileName = requestData.Id, OwnerId = "documentOwnerId", Size = (int)fileInfo.Length, Version = fileInfo.LastWriteTimeUtc.ToString("O" /* ISO 8601 DateTime format string */), // Using the file write time is an arbitrary choice. // optional CheckFileInfo properties BreadcrumbBrandName = "LocalStorage WOPI Host", BreadcrumbFolderName = "", BreadcrumbDocName = Path.GetFileNameWithoutExtension(requestData.Id), UserFriendlyName = "A WOPI User", SupportsLocks = true, SupportsUpdate = true, UserCanNotWriteRelative = true, /* Because this host does not support PutRelativeFile */ ReadOnly = false, UserCanWrite = true, WebEditingDisabled = false, RestrictedWebViewOnly = false, }; string jsonString = JsonConvert.SerializeObject(responseData); context.Response.Write(jsonString); ReturnSuccess(context.Response); } catch (UnauthorizedAccessException) { ReturnFileUnknown(context.Response); } }