public CheckFileInfo CheckFileInfo(int accessTokenId) { var token = _tokenManager.GetToken(accessTokenId); var fileInfo = _wopiServer.GetCheckFileInfo(token); if (fileInfo.Size <= 1) { return(fileInfo); } var urlPart = Url.Route(FileSystemRouteNames.ShowContentPath, new { org = WspContext.User.OrganizationId, pathPart = token.FilePath }); var url = new Uri(Request.RequestUri, urlPart).ToString(); fileInfo.DownloadUrl = url; return(fileInfo); }
public byte[] GetFileBytes(int accessTokenId) { var token = _tokenManager.GetToken(accessTokenId); if (_webDavManager.FileExist(token.FilePath)) { return(_webDavManager.GetFileBytes(token.FilePath)); } var cobaltFile = _fileManager.Get(token.FilePath) ?? _fileManager.Create(accessTokenId); var stream = new MemoryStream(); new GenericFda(cobaltFile.CobaltEndpoint, null).GetContentStream().CopyTo(stream); return(stream.ToArray()); }
public Atom ProcessRequest(int accessTokenId, Stream requestStream) { var token = _tokenManager.GetToken(accessTokenId); var atomRequest = new AtomFromStream(requestStream); var requestBatch = new RequestBatch(); try { var cobaltFile = _fileManager.Get(token.FilePath) ?? _fileManager.Create(accessTokenId); Object ctx; ProtocolVersion protocolVersion; requestBatch.DeserializeInputFromProtocol(atomRequest, out ctx, out protocolVersion); cobaltFile.CobaltEndpoint.ExecuteRequestBatch(requestBatch); foreach (var request in requestBatch.Requests) { if (request.GetType() == typeof(PutChangesRequest) && request.PartitionId == FilePartitionId.Content && request.CompletedSuccessfully) { using (var saveStream = new MemoryStream()) { CopyStream(cobaltFile, saveStream); _webDavManager.UploadFile(token.FilePath, saveStream.ToArray()); } } } return(requestBatch.SerializeOutputToProtocol(protocolVersion)); } catch (Exception e) { Server.Utils.Log.WriteError("Cobalt manager Process request", e); throw; } }
protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { // See if the request has an authorize header if (request.Headers.Authorization != null) { var token = await _tokenManager.GetToken(); request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token); } var response = await base.SendAsync(request, cancellationToken).ConfigureAwait(false); if (response.StatusCode == System.Net.HttpStatusCode.Unauthorized) { _tokenManager.ClearToken(); throw new HttpRequestException("Request not Authorized"); } return(response); }
public CobaltFile Create(int accessTokenId) { var disposal = new DisposalEscrow(accessTokenId.ToString(CultureInfo.InvariantCulture)); var content = new CobaltFilePartitionConfig { IsNewFile = true, HostBlobStore = new TemporaryHostBlobStore(new TemporaryHostBlobStore.Config(), disposal, accessTokenId + @".Content"), cellSchemaIsGenericFda = true, CellStorageConfig = new CellStorageConfig(), Schema = CobaltFilePartition.Schema.ShreddedCobalt, PartitionId = FilePartitionId.Content }; var coauth = new CobaltFilePartitionConfig { IsNewFile = true, HostBlobStore = new TemporaryHostBlobStore(new TemporaryHostBlobStore.Config(), disposal, accessTokenId + @".CoauthMetadata"), cellSchemaIsGenericFda = false, CellStorageConfig = new CellStorageConfig(), Schema = CobaltFilePartition.Schema.ShreddedCobalt, PartitionId = FilePartitionId.CoauthMetadata }; var wacupdate = new CobaltFilePartitionConfig { IsNewFile = true, HostBlobStore = new TemporaryHostBlobStore(new TemporaryHostBlobStore.Config(), disposal, accessTokenId + @".WordWacUpdate"), cellSchemaIsGenericFda = false, CellStorageConfig = new CellStorageConfig(), Schema = CobaltFilePartition.Schema.ShreddedCobalt, PartitionId = FilePartitionId.WordWacUpdate }; var partitionConfs = new Dictionary <FilePartitionId, CobaltFilePartitionConfig> { { FilePartitionId.Content, content }, { FilePartitionId.WordWacUpdate, wacupdate }, { FilePartitionId.CoauthMetadata, coauth } }; var cobaltFile = new CobaltFile(disposal, partitionConfs, new CobaltHostLockingStore(), null); var token = _tokenManager.GetToken(accessTokenId); Atom atom; if (_webDavManager.FileExist(token.FilePath)) { var fileBytes = _webDavManager.GetFileBytes(token.FilePath); atom = new AtomFromByteArray(fileBytes); } else { var filePath = HttpContext.Current.Server.MapPath(WebDavAppConfigManager.Instance.OfficeOnline.NewFilePath + Path.GetExtension(token.FilePath)); atom = new AtomFromByteArray(File.ReadAllBytes(filePath)); } Cobalt.Metrics o1; cobaltFile.GetCobaltFilePartition(FilePartitionId.Content).SetStream(RootId.Default.Value, atom, out o1); cobaltFile.GetCobaltFilePartition(FilePartitionId.Content).GetStream(RootId.Default.Value).Flush(); Add(token.FilePath, cobaltFile); return(cobaltFile); }