public override Task <UploadFileReply> UploadFile(UploadFileRequest request, ServerCallContext context)
        {
            var    result        = new UploadFileReply();
            string logFileName   = WordSanitizer.Sanitize(request.FileName);
            string logFolderName = WordSanitizer.Sanitize(request.FolderName);

            SharePointFileManager _sharePointFileManager = new SharePointFileManager(_configuration);

            CreateDocumentLibraryIfMissing(GetDocumentListTitle(request.EntityName), GetDocumentTemplateUrlPart(request.EntityName));

            try
            {
                string fileName = _sharePointFileManager.AddFile(GetDocumentTemplateUrlPart(request.EntityName),
                                                                 request.FolderName,
                                                                 request.FileName,
                                                                 request.Data.ToByteArray(), request.ContentType).GetAwaiter().GetResult();

                result.FileName     = fileName;
                result.ResultStatus = ResultStatus.Success;
            }
            catch (SharePointRestException ex)
            {
                result.ResultStatus = ResultStatus.Fail;
                result.ErrorDetail  = $"ERROR in uploading file {logFileName} to folder {logFolderName}";
                _logger.LogError(ex, result.ErrorDetail);
            }
            catch (Exception e)
            {
                result.ResultStatus = ResultStatus.Fail;
                result.ErrorDetail  = $"ERROR in uploading file {logFileName} to folder {logFolderName}";
                _logger.LogError(e, result.ErrorDetail);
            }

            return(Task.FromResult(result));
        }
Esempio n. 2
0
        public static void UploadPdf(this FileManagerClient _fileManagerClient, ILogger _logger, string entityName, string entityId, string folderName, string filename, byte[] data)
        {
            Contract.Requires(_fileManagerClient != null);

            // call the web service
            var uploadRequest = new UploadFileRequest
            {
                ContentType = "application/pdf",
                Data        = ByteString.CopyFrom(data),
                EntityName  = entityName,
                FileName    = filename,
                FolderName  = folderName
            };

            var uploadResult = _fileManagerClient.UploadFile(uploadRequest);

            // Do not save full file names to the logs (for privacy)
            var logFolderName = WordSanitizer.Sanitize(folderName);
            var logFileName   = WordSanitizer.Sanitize(filename);

            if (uploadResult.ResultStatus == ResultStatus.Success)
            {
                _logger.LogInformation($"SUCCESS in uploading PDF file {logFileName} to folder {logFolderName}");
            }
            else
            {
                _logger.LogError($"ERROR in uploading PDF file {logFileName} to folder {logFolderName}");
                throw new Exception($"ERROR in uploading PDF file {logFileName} to folder {logFolderName}");
            }
        }
        public override Task <CreateFolderReply> CreateFolder(CreateFolderRequest request, ServerCallContext context)
        {
            var result = new CreateFolderReply();

            var logFolder = WordSanitizer.Sanitize(request.FolderName);

            var listTitle = GetDocumentListTitle(request.EntityName);

            var _sharePointFileManager = new SharePointFileManager(_configuration);

            CreateDocumentLibraryIfMissing(listTitle, GetDocumentTemplateUrlPart(request.EntityName));

            var folderExists = false;

            try
            {
                var folder = _sharePointFileManager.GetFolder(listTitle, request.FolderName).GetAwaiter().GetResult();
                if (folder != null)
                {
                    folderExists = true;
                }
            }
            catch (SharePointRestException ex)
            {
                Log.Error(ex,
                          $"SharePointRestException creating sharepoint folder (status code: {ex.Response.StatusCode})");
                folderExists = false;
            }
            catch (Exception e)
            {
                Log.Error(e, "Generic Exception creating sharepoint folder");
                folderExists = false;
            }

            if (folderExists)
            {
                result.ResultStatus = ResultStatus.Success;
            }
            else
            {
                try
                {
                    _sharePointFileManager.CreateFolder(GetDocumentListTitle(request.EntityName), request.FolderName)
                    .GetAwaiter().GetResult();
                    var folder = _sharePointFileManager.GetFolder(listTitle, request.FolderName).GetAwaiter()
                                 .GetResult();
                    if (folder != null)
                    {
                        result.ResultStatus = ResultStatus.Success;
                    }
                }
                catch (SharePointRestException ex)
                {
                    result.ResultStatus = ResultStatus.Fail;
                    result.ErrorDetail  = $"ERROR in creating folder {logFolder}";
                    Log.Error(ex, result.ErrorDetail);
                }
            }
Esempio n. 4
0
        public static string GetTruncatedFilename(this FileManagerClient _fileManagerClient, ILogger _logger, string entityName, string folderName, string fileName)
        {
            Contract.Requires(_fileManagerClient != null);
            var truncated = fileName;

            // Do not save full file names to the logs (for privacy)
            var logFileName   = WordSanitizer.Sanitize(fileName);
            var logFolderName = WordSanitizer.Sanitize(folderName);
            var errorMessage  = $"ERROR in getting truncated filename {logFileName} for folder {logFolderName}";

            try
            {
                // call the web service
                var request = new TruncatedFilenameRequest
                {
                    EntityName = entityName,
                    FolderName = folderName,
                    FileName   = fileName
                };

                // Get the (potentially) truncated filename from SharePoint
                var result = _fileManagerClient.GetTruncatedFilename(request);

                if (result.ResultStatus == ResultStatus.Success)
                {
                    truncated = result.FileName;
                }
                else
                {
                    _logger.LogError(errorMessage);
                }
            }
            catch (Exception e)
            {
                _logger.LogError(e, errorMessage);
            }

            return(truncated);
        }
        public override Task <DownloadFileReply> DownloadFile(DownloadFileRequest request, ServerCallContext context)
        {
            var    result = new DownloadFileReply();
            string logUrl = WordSanitizer.Sanitize(request.ServerRelativeUrl);
            SharePointFileManager _sharePointFileManager = new SharePointFileManager(_configuration);

            try
            {
                byte[] data = _sharePointFileManager.DownloadFile(request.ServerRelativeUrl).GetAwaiter().GetResult();

                if (data != null)
                {
                    result.ResultStatus = ResultStatus.Success;
                    result.Data         = ByteString.CopyFrom(data);
                }
                else
                {
                    result.ResultStatus = ResultStatus.Fail;
                }
            }
            catch (SharePointRestException ex)
            {
                result.ResultStatus = ResultStatus.Fail;
                result.ErrorDetail  = $"ERROR in downloading file {logUrl}";
                _logger.LogError(ex, result.ErrorDetail);
            }
            catch (Exception e)
            {
                result.ResultStatus = ResultStatus.Fail;
                result.ErrorDetail  = $"ERROR in downloading file {logUrl}";
                _logger.LogError(e, result.ErrorDetail);
            }


            return(Task.FromResult(result));
        }
        public override Task <DeleteFileReply> DeleteFile(DeleteFileRequest request, ServerCallContext context)
        {
            var result = new DeleteFileReply();

            string logUrl = WordSanitizer.Sanitize(request.ServerRelativeUrl);

            SharePointFileManager _sharePointFileManager = new SharePointFileManager(_configuration);

            try
            {
                bool success = _sharePointFileManager.DeleteFile(request.ServerRelativeUrl).GetAwaiter().GetResult();

                if (success)
                {
                    result.ResultStatus = ResultStatus.Success;
                }
                else
                {
                    result.ResultStatus = ResultStatus.Fail;
                }
            }
            catch (SharePointRestException ex)
            {
                result.ResultStatus = ResultStatus.Fail;
                result.ErrorDetail  = $"ERROR in deleting file {logUrl}";
                _logger.LogError(ex, result.ErrorDetail);
            }
            catch (Exception e)
            {
                result.ResultStatus = ResultStatus.Fail;
                result.ErrorDetail  = $"ERROR in deleting file {logUrl}";
                _logger.LogError(e, result.ErrorDetail);
            }

            return(Task.FromResult(result));
        }
        public override Task <TruncatedFilenameReply> GetTruncatedFilename(TruncatedFilenameRequest request, ServerCallContext context)
        {
            var    result        = new TruncatedFilenameReply();
            string logFileName   = WordSanitizer.Sanitize(request.FileName);
            string logFolderName = WordSanitizer.Sanitize(request.FolderName);

            try
            {
                var _sharePointFileManager = new SharePointFileManager(_configuration);

                // Ask SharePoint whether this filename would be truncated upon upload
                var listTitle      = GetDocumentListTitle(request.EntityName);
                var maybeTruncated = _sharePointFileManager.GetTruncatedFileName(request.FileName, listTitle, request.FolderName);
                result.FileName     = maybeTruncated;
                result.ResultStatus = ResultStatus.Success;
            }
            catch (SharePointRestException ex)
            {
                result.ResultStatus = ResultStatus.Fail;
                result.ErrorDetail  = $"ERROR in getting truncated filename {logFileName} for folder {logFolderName}";
                Log.Error(ex, result.ErrorDetail);
            }
            return(Task.FromResult(result));
        }
        public static void CreateFolderIfNotExist(this FileManagerClient _fileManagerClient, ILogger _logger, string entityName, string folderName)
        {
            string logFolderName = WordSanitizer.Sanitize(folderName);

            try
            {
                var createFolderRequest = new CreateFolderRequest()
                {
                    EntityName = entityName,
                    FolderName = folderName
                };

                var createFolderResult = _fileManagerClient.CreateFolder(createFolderRequest);

                if (createFolderResult.ResultStatus == ResultStatus.Fail)
                {
                    _logger.LogError($"Error creating folder for entity {entityName} and folder {logFolderName}. Error is {createFolderResult.ErrorDetail}");
                }
            }
            catch (Exception e)
            {
                _logger.LogError(e, $"Error creating folder for account {entityName} and folder {logFolderName}");
            }
        }
Esempio n. 9
0
        public static void UploadPdfIfChanged(this FileManagerClient _fileManagerClient, ILogger _logger, string entityName, string entityId, string folderName, string documentType, byte[] data, string hash)
        {
            Contract.Requires(_fileManagerClient != null);
            Contract.Requires(documentType != null);

            // SharePoint can truncate file names that are too long. Make sure we account for that.
            var fileName = FileSystemItemExtensions.CombineNameDocumentType($"{hash}.pdf", documentType);

            fileName = _fileManagerClient.GetTruncatedFilename(_logger, entityName, folderName, fileName);

            var notChanged = _fileManagerClient.FileExists(_logger, entityName, entityId, folderName, documentType, fileName);

            if (notChanged)
            {
                // Do not save full file names to the logs (for privacy)
                var logFolderName = WordSanitizer.Sanitize(folderName);
                var logFileName   = WordSanitizer.Sanitize(fileName);
                _logger.LogInformation($"PDF file {logFileName} in folder {logFolderName} hasn't changed. Will NOT UPLOAD again.");

                // Abort early if PDF hasn't changed...
                return;
            }
            _fileManagerClient.UploadPdf(_logger, entityName, entityId, folderName, fileName, data);
        }