From 79349e490b67d62bc17a4222b9b891f4eb5c4332 Mon Sep 17 00:00:00 2001 From: Egor Date: Thu, 5 Mar 2020 15:42:41 +0300 Subject: [PATCH 1/3] Initial implementation on NET Core. --- .gitignore | 27 +- GroupDocs.Editor MVC.sln | 26 +- .../EditorControllerTest.cs | 107 +++--- .../GroupDocs.Editor.MVC.Test.csproj | 230 +------------ .../MvcContrib.TestHelper.dll | Bin 48128 -> 0 bytes .../Properties/AssemblyInfo.cs | 36 -- GroupDocs.Editor.MVC.Test/app.config | 83 ----- GroupDocs.Editor.MVC.Test/packages.config | 48 --- .../AppDomainGenerator/DomainGenerator.cs | 31 ++ .../Controllers/EditorController.cs | 9 +- .../GroupDocs.Editor.MVC.csproj | 39 +++ .../Common/Config/ApplicationConfiguration.cs | 26 +- .../Common/Config/CommonConfiguration.cs | 26 +- .../Config/ConfigurationValuesGetter.cs | 0 .../Common/Config/GlobalConfiguration.cs | 9 +- .../Common/Config/ServerConfiguration.cs | 18 +- .../Common/Entity/Web/ExceptionEntity.cs | 0 .../Entity/Web/FileDescriptionEntity.cs | 7 + .../Common/Entity/Web/LoadDocumentEntity.cs | 0 .../Entity/Web/PageDescriptionEntity.cs | 0 .../Common/Entity/Web/PostedDataEntity.cs | 0 .../Entity/Web/UploadedDocumentEntity.cs | 0 .../Products/Common/Resources/Resources.cs | 0 .../Util/Comparator/FileDateComparator.cs | 0 .../Util/Comparator/FileNameComparator.cs | 0 .../Util/Comparator/FileTypeComparator.cs | 0 .../Common/Util/Directory/IDirectoryUtils.cs | 0 .../Products/Common/Util/Parser/YamlParser.cs | 3 +- .../Editor/Config/EditorConfiguration.cs | 9 +- .../Editor/Controllers/EditorApiController.cs | 311 ++++++++++++------ .../Editor/Entity/Web/EditableDocumentType.cs | 0 .../Entity/Web/Request/EditDocumentRequest.cs | 0 GroupDocs.Editor.MVC/Program.cs | 26 ++ .../Properties/launchSettings.json | 28 ++ GroupDocs.Editor.MVC/Startup.cs | 81 +++++ .../Views/Editor/Index.cshtml | 21 ++ .../appsettings.Development.json | 9 + GroupDocs.Editor.MVC/appsettings.json | 22 ++ .../client/.editorconfig | 0 .../client/.gitignore | 0 .../client/.prettierignore | 0 .../client/.prettierrc | 0 .../client/.vscode/extensions.json | 0 .../client/README.md | 0 .../client/angular.json | 0 .../client/apps/.gitkeep | 0 .../client/apps/editor-e2e/cypress.json | 0 .../apps/editor-e2e/src/fixtures/example.json | 0 .../editor-e2e/src/integration/app.spec.ts | 0 .../apps/editor-e2e/src/plugins/index.js | 0 .../apps/editor-e2e/src/support/app.po.ts | 0 .../apps/editor-e2e/src/support/commands.ts | 0 .../apps/editor-e2e/src/support/index.ts | 0 .../client/apps/editor-e2e/tsconfig.e2e.json | 0 .../client/apps/editor-e2e/tsconfig.json | 0 .../client/apps/editor/browserslist | 0 .../client/apps/editor/jest.config.js | 0 .../apps/editor/src/app/app.component.html | 0 .../apps/editor/src/app/app.component.less | 0 .../apps/editor/src/app/app.component.spec.ts | 0 .../apps/editor/src/app/app.component.ts | 0 .../client/apps/editor/src/app/app.module.ts | 0 .../client/apps/editor/src/assets}/.gitkeep | 0 .../src/environments/environment.prod.ts | 0 .../editor/src/environments/environment.ts | 0 .../client/apps/editor/src/favicon.ico | Bin .../client/apps/editor/src/index.html | 0 .../client/apps/editor/src/main.ts | 0 .../client/apps/editor/src/polyfills.ts | 0 .../client/apps/editor/src/styles.less | 0 .../client/apps/editor/src/test-setup.ts | 0 .../client/apps/editor/tsconfig.app.json | 0 .../client/apps/editor/tsconfig.json | 0 .../client/apps/editor/tsconfig.spec.json | 0 .../client/apps/editor/tslint.json | 0 .../client/jest.config.js | 0 .../client/libs}/.gitkeep | 0 {src => GroupDocs.Editor.MVC}/client/nx.json | 0 .../client/package.json | 4 +- .../client/tools/schematics}/.gitkeep | 0 .../client/tools/tsconfig.tools.json | 0 .../client/tsconfig.json | 0 .../client/tslint.json | 0 .../configuration.yml | 0 GroupDocs.Editor.MVC/wwwroot/favicon.ico | Bin 0 -> 32038 bytes LICENSE | 21 -- NuGet.Config | 6 + README.md | 117 ------- appveyor.yml | 5 - src/AppDomainGenerator/DomainGenerator.cs | 82 ----- src/App_Start/FilterConfig.cs | 12 - src/App_Start/RouteConfig.cs | 19 -- src/App_Start/WebApiConfig.cs | 17 - src/Global.asax | 1 - src/Global.asax.cs | 25 -- src/GroupDocs.Editor.MVC.csproj | 294 ----------------- src/Properties/AssemblyInfo.cs | 35 -- src/Views/Editor/Index.cshtml | 24 -- src/Views/Web.config | 43 --- src/Web.config | 117 ------- src/client/apps/editor/src/assets/.gitkeep | 0 src/client/libs/.gitkeep | 0 src/client/tools/schematics/.gitkeep | 0 src/package.json | 19 -- src/packages.config | 31 -- 105 files changed, 622 insertions(+), 1482 deletions(-) delete mode 100644 GroupDocs.Editor.MVC.Test/MvcContrib.TestHelper.dll delete mode 100644 GroupDocs.Editor.MVC.Test/Properties/AssemblyInfo.cs delete mode 100644 GroupDocs.Editor.MVC.Test/app.config delete mode 100644 GroupDocs.Editor.MVC.Test/packages.config create mode 100644 GroupDocs.Editor.MVC/AppDomainGenerator/DomainGenerator.cs rename {src => GroupDocs.Editor.MVC}/Controllers/EditorController.cs (63%) create mode 100644 GroupDocs.Editor.MVC/GroupDocs.Editor.MVC.csproj rename {src => GroupDocs.Editor.MVC}/Products/Common/Config/ApplicationConfiguration.cs (71%) rename {src => GroupDocs.Editor.MVC}/Products/Common/Config/CommonConfiguration.cs (65%) rename {src => GroupDocs.Editor.MVC}/Products/Common/Config/ConfigurationValuesGetter.cs (100%) rename {src => GroupDocs.Editor.MVC}/Products/Common/Config/GlobalConfiguration.cs (80%) rename {src => GroupDocs.Editor.MVC}/Products/Common/Config/ServerConfiguration.cs (58%) rename {src => GroupDocs.Editor.MVC}/Products/Common/Entity/Web/ExceptionEntity.cs (100%) rename {src => GroupDocs.Editor.MVC}/Products/Common/Entity/Web/FileDescriptionEntity.cs (73%) rename {src => GroupDocs.Editor.MVC}/Products/Common/Entity/Web/LoadDocumentEntity.cs (100%) rename {src => GroupDocs.Editor.MVC}/Products/Common/Entity/Web/PageDescriptionEntity.cs (100%) rename {src => GroupDocs.Editor.MVC}/Products/Common/Entity/Web/PostedDataEntity.cs (100%) rename {src => GroupDocs.Editor.MVC}/Products/Common/Entity/Web/UploadedDocumentEntity.cs (100%) rename {src => GroupDocs.Editor.MVC}/Products/Common/Resources/Resources.cs (100%) rename {src => GroupDocs.Editor.MVC}/Products/Common/Util/Comparator/FileDateComparator.cs (100%) rename {src => GroupDocs.Editor.MVC}/Products/Common/Util/Comparator/FileNameComparator.cs (100%) rename {src => GroupDocs.Editor.MVC}/Products/Common/Util/Comparator/FileTypeComparator.cs (100%) rename {src => GroupDocs.Editor.MVC}/Products/Common/Util/Directory/IDirectoryUtils.cs (100%) rename {src => GroupDocs.Editor.MVC}/Products/Common/Util/Parser/YamlParser.cs (86%) rename {src => GroupDocs.Editor.MVC}/Products/Editor/Config/EditorConfiguration.cs (86%) rename {src => GroupDocs.Editor.MVC}/Products/Editor/Controllers/EditorApiController.cs (60%) rename {src => GroupDocs.Editor.MVC}/Products/Editor/Entity/Web/EditableDocumentType.cs (100%) rename {src => GroupDocs.Editor.MVC}/Products/Editor/Entity/Web/Request/EditDocumentRequest.cs (100%) create mode 100644 GroupDocs.Editor.MVC/Program.cs create mode 100644 GroupDocs.Editor.MVC/Properties/launchSettings.json create mode 100644 GroupDocs.Editor.MVC/Startup.cs create mode 100644 GroupDocs.Editor.MVC/Views/Editor/Index.cshtml create mode 100644 GroupDocs.Editor.MVC/appsettings.Development.json create mode 100644 GroupDocs.Editor.MVC/appsettings.json rename {src => GroupDocs.Editor.MVC}/client/.editorconfig (100%) rename {src => GroupDocs.Editor.MVC}/client/.gitignore (100%) rename {src => GroupDocs.Editor.MVC}/client/.prettierignore (100%) rename {src => GroupDocs.Editor.MVC}/client/.prettierrc (100%) rename {src => GroupDocs.Editor.MVC}/client/.vscode/extensions.json (100%) rename {src => GroupDocs.Editor.MVC}/client/README.md (100%) rename {src => GroupDocs.Editor.MVC}/client/angular.json (100%) rename {src => GroupDocs.Editor.MVC}/client/apps/.gitkeep (100%) rename {src => GroupDocs.Editor.MVC}/client/apps/editor-e2e/cypress.json (100%) rename {src => GroupDocs.Editor.MVC}/client/apps/editor-e2e/src/fixtures/example.json (100%) rename {src => GroupDocs.Editor.MVC}/client/apps/editor-e2e/src/integration/app.spec.ts (100%) rename {src => GroupDocs.Editor.MVC}/client/apps/editor-e2e/src/plugins/index.js (100%) rename {src => GroupDocs.Editor.MVC}/client/apps/editor-e2e/src/support/app.po.ts (100%) rename {src => GroupDocs.Editor.MVC}/client/apps/editor-e2e/src/support/commands.ts (100%) rename {src => GroupDocs.Editor.MVC}/client/apps/editor-e2e/src/support/index.ts (100%) rename {src => GroupDocs.Editor.MVC}/client/apps/editor-e2e/tsconfig.e2e.json (100%) rename {src => GroupDocs.Editor.MVC}/client/apps/editor-e2e/tsconfig.json (100%) rename {src => GroupDocs.Editor.MVC}/client/apps/editor/browserslist (100%) rename {src => GroupDocs.Editor.MVC}/client/apps/editor/jest.config.js (100%) rename {src => GroupDocs.Editor.MVC}/client/apps/editor/src/app/app.component.html (100%) rename {src => GroupDocs.Editor.MVC}/client/apps/editor/src/app/app.component.less (100%) rename {src => GroupDocs.Editor.MVC}/client/apps/editor/src/app/app.component.spec.ts (100%) rename {src => GroupDocs.Editor.MVC}/client/apps/editor/src/app/app.component.ts (100%) rename {src => GroupDocs.Editor.MVC}/client/apps/editor/src/app/app.module.ts (100%) rename {src/DocumentSamples/Editor => GroupDocs.Editor.MVC/client/apps/editor/src/assets}/.gitkeep (100%) rename {src => GroupDocs.Editor.MVC}/client/apps/editor/src/environments/environment.prod.ts (100%) rename {src => GroupDocs.Editor.MVC}/client/apps/editor/src/environments/environment.ts (100%) rename {src => GroupDocs.Editor.MVC}/client/apps/editor/src/favicon.ico (100%) rename {src => GroupDocs.Editor.MVC}/client/apps/editor/src/index.html (100%) rename {src => GroupDocs.Editor.MVC}/client/apps/editor/src/main.ts (100%) rename {src => GroupDocs.Editor.MVC}/client/apps/editor/src/polyfills.ts (100%) rename {src => GroupDocs.Editor.MVC}/client/apps/editor/src/styles.less (100%) rename {src => GroupDocs.Editor.MVC}/client/apps/editor/src/test-setup.ts (100%) rename {src => GroupDocs.Editor.MVC}/client/apps/editor/tsconfig.app.json (100%) rename {src => GroupDocs.Editor.MVC}/client/apps/editor/tsconfig.json (100%) rename {src => GroupDocs.Editor.MVC}/client/apps/editor/tsconfig.spec.json (100%) rename {src => GroupDocs.Editor.MVC}/client/apps/editor/tslint.json (100%) rename {src => GroupDocs.Editor.MVC}/client/jest.config.js (100%) rename {src/Licenses => GroupDocs.Editor.MVC/client/libs}/.gitkeep (100%) rename {src => GroupDocs.Editor.MVC}/client/nx.json (100%) rename {src => GroupDocs.Editor.MVC}/client/package.json (91%) rename {src/Resources => GroupDocs.Editor.MVC/client/tools/schematics}/.gitkeep (100%) rename {src => GroupDocs.Editor.MVC}/client/tools/tsconfig.tools.json (100%) rename {src => GroupDocs.Editor.MVC}/client/tsconfig.json (100%) rename {src => GroupDocs.Editor.MVC}/client/tslint.json (100%) rename {src => GroupDocs.Editor.MVC}/configuration.yml (100%) create mode 100644 GroupDocs.Editor.MVC/wwwroot/favicon.ico delete mode 100644 LICENSE create mode 100644 NuGet.Config delete mode 100644 README.md delete mode 100644 appveyor.yml delete mode 100644 src/AppDomainGenerator/DomainGenerator.cs delete mode 100644 src/App_Start/FilterConfig.cs delete mode 100644 src/App_Start/RouteConfig.cs delete mode 100644 src/App_Start/WebApiConfig.cs delete mode 100644 src/Global.asax delete mode 100644 src/Global.asax.cs delete mode 100644 src/GroupDocs.Editor.MVC.csproj delete mode 100644 src/Properties/AssemblyInfo.cs delete mode 100644 src/Views/Editor/Index.cshtml delete mode 100644 src/Views/Web.config delete mode 100644 src/Web.config delete mode 100644 src/client/apps/editor/src/assets/.gitkeep delete mode 100644 src/client/libs/.gitkeep delete mode 100644 src/client/tools/schematics/.gitkeep delete mode 100644 src/package.json delete mode 100644 src/packages.config diff --git a/.gitignore b/.gitignore index 5a1f299..6a1a947 100644 --- a/.gitignore +++ b/.gitignore @@ -6,25 +6,40 @@ node_modules/ .vs/ # User-specific files +*.suo *.user +*.userosscache +*.sln.docstates # Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +build/ +bld/ [Bb]in/ [Oo]bj/ +[Oo]ut/ +msbuild.log +msbuild.err +msbuild.wrn *.zip package-lock.json # Resources -src/Resources/* -!src/Resources/.gitkeep +Resources/* +!Resources/.gitkeep # Licenses -src/Licenses -!src/Licenses/.gitkeep +Licenses +!Licenses/.gitkeep # Document samples -src/DocumentSamples -!src/DocumentSamples/.gitkeep +DocumentSamples +!DocumentSamples/.gitkeep # Git !.gitkeep diff --git a/GroupDocs.Editor MVC.sln b/GroupDocs.Editor MVC.sln index 8ff6f09..f5e50ff 100644 --- a/GroupDocs.Editor MVC.sln +++ b/GroupDocs.Editor MVC.sln @@ -1,11 +1,11 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.28010.2050 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29806.167 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GroupDocs.Editor.MVC", "src\GroupDocs.Editor.MVC.csproj", "{A33CA8B0-A193-40A3-A86A-90FF444EE878}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GroupDocs.Editor.MVC", "GroupDocs.Editor.MVC\GroupDocs.Editor.MVC.csproj", "{EAF24520-33E2-458D-AD20-BCD9532DC78E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GroupDocs.Editor.MVC.Test", "GroupDocs.Editor.MVC.Test\GroupDocs.Editor.MVC.Test.csproj", "{C8F2EDB6-BD6C-465F-B59F-2CEA33BD7FE6}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GroupDocs.Editor.MVC.Test", "GroupDocs.Editor.MVC.Test\GroupDocs.Editor.MVC.Test.csproj", "{68D3E81C-B9F5-443B-89F2-DC430D0A2A17}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -13,19 +13,19 @@ Global Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {A33CA8B0-A193-40A3-A86A-90FF444EE878}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A33CA8B0-A193-40A3-A86A-90FF444EE878}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A33CA8B0-A193-40A3-A86A-90FF444EE878}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A33CA8B0-A193-40A3-A86A-90FF444EE878}.Release|Any CPU.Build.0 = Release|Any CPU - {C8F2EDB6-BD6C-465F-B59F-2CEA33BD7FE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C8F2EDB6-BD6C-465F-B59F-2CEA33BD7FE6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C8F2EDB6-BD6C-465F-B59F-2CEA33BD7FE6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C8F2EDB6-BD6C-465F-B59F-2CEA33BD7FE6}.Release|Any CPU.Build.0 = Release|Any CPU + {EAF24520-33E2-458D-AD20-BCD9532DC78E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EAF24520-33E2-458D-AD20-BCD9532DC78E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EAF24520-33E2-458D-AD20-BCD9532DC78E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EAF24520-33E2-458D-AD20-BCD9532DC78E}.Release|Any CPU.Build.0 = Release|Any CPU + {68D3E81C-B9F5-443B-89F2-DC430D0A2A17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {68D3E81C-B9F5-443B-89F2-DC430D0A2A17}.Debug|Any CPU.Build.0 = Debug|Any CPU + {68D3E81C-B9F5-443B-89F2-DC430D0A2A17}.Release|Any CPU.ActiveCfg = Release|Any CPU + {68D3E81C-B9F5-443B-89F2-DC430D0A2A17}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {6F5D4665-4B9E-40D7-8CC1-DBD46FAEB755} + SolutionGuid = {24E7FCE7-6EEA-41F7-921A-B15A096E3867} EndGlobalSection EndGlobal diff --git a/GroupDocs.Editor.MVC.Test/EditorControllerTest.cs b/GroupDocs.Editor.MVC.Test/EditorControllerTest.cs index e3bd888..6763147 100644 --- a/GroupDocs.Editor.MVC.Test/EditorControllerTest.cs +++ b/GroupDocs.Editor.MVC.Test/EditorControllerTest.cs @@ -1,80 +1,55 @@ -using GroupDocs.Editor.MVC.Controllers; -using NUnit.Framework; -using System.Web.Routing; -using MvcContrib.TestHelper; -using Huygens; -using System; -using System.Collections.Generic; -using System.Text; -using Newtonsoft.Json; using GroupDocs.Editor.MVC.Products.Common.Entity.Web; +using GroupDocs.Editor.MVC.Products.Editor.Controllers; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Configuration; +using Moq; +using NUnit.Framework; -namespace GroupDocs.Editor.MVC.Test +namespace NUnitTestProject1 { - [TestFixture] - public static class EditorControllerTest { - + public class EditorControllerTest + { + Mock mockServerConfSection; + Mock mockCommonConfSection; + Mock mockConfig; + Mock mockPostedData; + EditorApiController controller; [SetUp] - public static void TestInitialize() - { - RouteConfig.RegisterRoutes(RouteTable.Routes); - } - - [TearDown] - public static void TearDown() + public void Setup() { - RouteTable.Routes.Clear(); + mockServerConfSection = new Mock(); + mockServerConfSection.SetupGet(m => m[It.Is(s => s == "HttpPort")]).Returns("8080"); + + mockCommonConfSection = new Mock(); + mockCommonConfSection.SetupGet(m => m[It.Is(s => s == "IsPageSelector")]).Returns("true"); + mockCommonConfSection.SetupGet(m => m[It.Is(s => s == "IsDownload")]).Returns("true"); + mockCommonConfSection.SetupGet(m => m[It.Is(s => s == "IsUpload")]).Returns("true"); + mockCommonConfSection.SetupGet(m => m[It.Is(s => s == "IsPrint")]).Returns("true"); + mockCommonConfSection.SetupGet(m => m[It.Is(s => s == "IsBrowse")]).Returns("true"); + mockCommonConfSection.SetupGet(m => m[It.Is(s => s == "IsRewrite")]).Returns("true"); + + mockConfig = new Mock(); + mockConfig.Setup(a => a.GetSection(It.Is(s => s == "ServerConfiguration"))).Returns(mockServerConfSection.Object); + mockConfig.Setup(a => a.GetSection(It.Is(s => s == "CommonConfiguration"))).Returns(mockCommonConfSection.Object); + + mockPostedData = new Mock(); + controller = new EditorApiController(mockConfig.Object); } [Test] - public static void ViewStatusTest() + public void LoadFileTree_ReturnsOkActionResult() { - string path = AppDomain.CurrentDomain.BaseDirectory + "/../../../src"; - using (var server = new DirectServer(path)) - { - var request = new SerialisableRequest - { - Method = "GET", - RequestUri = "/editor", - Content = null - }; + // Arrange - var result = server.DirectCall(request); - Assert.That(result.StatusCode, Is.EqualTo(200)); - } - } - [Test] - public static void ViewMapControllerTest() - { - "~/editor".Route().ShouldMapTo(x => x.Index()); - } - - [Test] - public static void FileTreeStatusCodeTest() - { - string path = AppDomain.CurrentDomain.BaseDirectory + "/../../../src"; - using (var server = new DirectServer(path)) - { + // Act + var result = controller.loadFileTree(mockPostedData.Object); + var okResult = result as OkObjectResult; - PostedDataEntity requestData = new PostedDataEntity(); - requestData.path = ""; - - var request = new SerialisableRequest - { - Method = "POST", - RequestUri = "/loadfiletree", - Content = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(requestData)), - Headers = new Dictionary{ - { "Content-Type", "application/json"}, - { "Content-Length", JsonConvert.SerializeObject(requestData).Length.ToString()} - } - }; - - var result = server.DirectCall(request); - Assert.That(result.StatusCode, Is.EqualTo(200)); - } - } + // Assert + Assert.IsNotNull(okResult); + Assert.AreEqual(200, okResult.StatusCode); + } } -} +} \ No newline at end of file diff --git a/GroupDocs.Editor.MVC.Test/GroupDocs.Editor.MVC.Test.csproj b/GroupDocs.Editor.MVC.Test/GroupDocs.Editor.MVC.Test.csproj index 0219f8d..a7fab1b 100644 --- a/GroupDocs.Editor.MVC.Test/GroupDocs.Editor.MVC.Test.csproj +++ b/GroupDocs.Editor.MVC.Test/GroupDocs.Editor.MVC.Test.csproj @@ -1,222 +1,20 @@ - - - - - + + - Debug - AnyCPU - {C8F2EDB6-BD6C-465F-B59F-2CEA33BD7FE6} - Library - Properties - GroupDocs.Editor.MVC.Test - GroupDocs.Editor.MVC.Test - v4.6.1 - 512 - true - - + netcoreapp3.1 + + false - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - ..\packages\Antlr.3.4.1.9004\lib\Antlr3.Runtime.dll - - - ..\packages\Castle.Core.4.3.1\lib\net45\Castle.Core.dll - - - ..\packages\GroupDocs.Editor.19.5.0\lib\GroupDocs.Editor.dll - - - ..\packages\Huygens.1.4.5\lib\net46\Huygens.dll - - - ..\packages\Microsoft.Extensions.Configuration.2.1.1\lib\netstandard2.0\Microsoft.Extensions.Configuration.dll - - - ..\packages\Microsoft.Extensions.Configuration.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.Extensions.Configuration.Abstractions.dll - - - ..\packages\Microsoft.Extensions.Configuration.Binder.2.1.1\lib\netstandard2.0\Microsoft.Extensions.Configuration.Binder.dll - - - ..\packages\Microsoft.Extensions.DependencyInjection.2.1.1\lib\net461\Microsoft.Extensions.DependencyInjection.dll - - - ..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll - - - ..\packages\Microsoft.Extensions.Http.2.1.1\lib\netstandard2.0\Microsoft.Extensions.Http.dll - - - ..\packages\Microsoft.Extensions.Logging.2.1.1\lib\netstandard2.0\Microsoft.Extensions.Logging.dll - - - ..\packages\Microsoft.Extensions.Logging.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.Extensions.Logging.Abstractions.dll - - - ..\packages\Microsoft.Extensions.Options.2.1.1\lib\netstandard2.0\Microsoft.Extensions.Options.dll - - - ..\packages\Microsoft.Extensions.Primitives.2.1.1\lib\netstandard2.0\Microsoft.Extensions.Primitives.dll - - - ..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll - - - ..\packages\Mvc2Futures.2.0.50217.0\lib\Microsoft.Web.Mvc.dll - - - ..\packages\Moq.4.10.1\lib\net45\Moq.dll - - - .\MvcContrib.TestHelper.dll - - - ..\packages\MvcIntegrationTestFramework.1.0.8\lib\net45\MvcIntegrationTestFramework.dll - - - ..\packages\MvcRouteTester.1.2.1\lib\net40\MvcRouteTester.dll - - - ..\packages\Newtonsoft.Json.12.0.1\lib\net45\Newtonsoft.Json.dll - - - ..\packages\NUnit.3.11.0\lib\net45\nunit.framework.dll - - - - ..\packages\System.Buffers.4.4.0\lib\netstandard2.0\System.Buffers.dll - - - - - ..\packages\System.Memory.4.5.1\lib\netstandard2.0\System.Memory.dll - - - ..\packages\System.Net.Http.4.3.3\lib\net46\System.Net.Http.dll - True - True - - - ..\packages\Microsoft.AspNet.WebApi.Client.5.2.7\lib\net45\System.Net.Http.Formatting.dll - - - - ..\packages\System.Numerics.Vectors.4.4.0\lib\net46\System.Numerics.Vectors.dll - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.1\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - ..\packages\System.Security.Cryptography.Algorithms.4.3.0\lib\net461\System.Security.Cryptography.Algorithms.dll - True - True - - - ..\packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll - True - True - - - ..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll - True - True - - - ..\packages\System.Security.Cryptography.X509Certificates.4.3.0\lib\net461\System.Security.Cryptography.X509Certificates.dll - True - True - - - ..\packages\System.Threading.Tasks.Extensions.4.5.1\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll - - - ..\packages\System.ValueTuple.4.4.0\lib\net461\System.ValueTuple.dll - True - True - - - - ..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.Helpers.dll - - - ..\packages\Microsoft.AspNet.WebApi.Core.5.2.7\lib\net45\System.Web.Http.dll - - - ..\packages\Microsoft.AspNet.WebApi.WebHost.5.2.7\lib\net45\System.Web.Http.WebHost.dll - - - ..\packages\Microsoft.AspNet.Mvc.5.2.3\lib\net45\System.Web.Mvc.dll - - - ..\packages\Microsoft.AspNet.Web.Optimization.1.1.3\lib\net40\System.Web.Optimization.dll - - - ..\packages\Microsoft.AspNet.Razor.3.2.7\lib\net45\System.Web.Razor.dll - - - ..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.WebPages.dll - - - ..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.WebPages.Deployment.dll - - - ..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.WebPages.Razor.dll - - - - - - - - ..\packages\WebGrease.1.6.0\lib\WebGrease.dll - - - - - - - - - - + - + + + + + - - {a33ca8b0-a193-40a3-a86a-90ff444ee878} - GroupDocs.Editor.MVC - + - - - - Данный проект ссылается на пакеты NuGet, отсутствующие на этом компьютере. Используйте восстановление пакетов NuGet, чтобы скачать их. Дополнительную информацию см. по адресу: http://go.microsoft.com/fwlink/?LinkID=322105. Отсутствует следующий файл: {0}. - - - - - - - - - \ No newline at end of file + + diff --git a/GroupDocs.Editor.MVC.Test/MvcContrib.TestHelper.dll b/GroupDocs.Editor.MVC.Test/MvcContrib.TestHelper.dll deleted file mode 100644 index a7877eae44f5a48cc88241446461b30d9d925236..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48128 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/GroupDocs.Editor.MVC.Test/packages.config b/GroupDocs.Editor.MVC.Test/packages.config deleted file mode 100644 index 7134b1c..0000000 --- a/GroupDocs.Editor.MVC.Test/packages.config +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/GroupDocs.Editor.MVC/AppDomainGenerator/DomainGenerator.cs b/GroupDocs.Editor.MVC/AppDomainGenerator/DomainGenerator.cs new file mode 100644 index 0000000..ff7ff59 --- /dev/null +++ b/GroupDocs.Editor.MVC/AppDomainGenerator/DomainGenerator.cs @@ -0,0 +1,31 @@ +using Microsoft.Extensions.Configuration; + +namespace GroupDocs.Editor.MVC.AppDomainGenerator +{ + /// + /// DomainGenerator + /// + public class DomainGenerator + { + private readonly Products.Common.Config.GlobalConfiguration globalConfiguration; + + /// + /// Constructor + /// + public DomainGenerator(string assemblyName, string className, IConfiguration config) + { + globalConfiguration = new Products.Common.Config.GlobalConfiguration(config); + } + + /// + /// Set GroupDocs.Editor license + /// + /// Type + public void SetEditorLicense() + { + // Initiate license class + License license = new License(); + license.SetLicense(globalConfiguration.GetApplicationConfiguration().GetLicensePath()); + } + } +} diff --git a/src/Controllers/EditorController.cs b/GroupDocs.Editor.MVC/Controllers/EditorController.cs similarity index 63% rename from src/Controllers/EditorController.cs rename to GroupDocs.Editor.MVC/Controllers/EditorController.cs index 5c53936..4faabab 100644 --- a/src/Controllers/EditorController.cs +++ b/GroupDocs.Editor.MVC/Controllers/EditorController.cs @@ -1,15 +1,12 @@ -using System.Web.Mvc; +using Microsoft.AspNetCore.Mvc; namespace GroupDocs.Editor.MVC.Controllers { - /// - /// Editor Web page controller - /// public class EditorController : Controller - { + { public ActionResult Index() { return View("Index"); } } -} \ No newline at end of file +} diff --git a/GroupDocs.Editor.MVC/GroupDocs.Editor.MVC.csproj b/GroupDocs.Editor.MVC/GroupDocs.Editor.MVC.csproj new file mode 100644 index 0000000..f68615c --- /dev/null +++ b/GroupDocs.Editor.MVC/GroupDocs.Editor.MVC.csproj @@ -0,0 +1,39 @@ + + + + netcoreapp3.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Products/Common/Config/ApplicationConfiguration.cs b/GroupDocs.Editor.MVC/Products/Common/Config/ApplicationConfiguration.cs similarity index 71% rename from src/Products/Common/Config/ApplicationConfiguration.cs rename to GroupDocs.Editor.MVC/Products/Common/Config/ApplicationConfiguration.cs index 0839af1..6239cce 100644 --- a/src/Products/Common/Config/ApplicationConfiguration.cs +++ b/GroupDocs.Editor.MVC/Products/Common/Config/ApplicationConfiguration.cs @@ -1,8 +1,5 @@ using GroupDocs.Editor.MVC.Products.Common.Util.Parser; using System; -using System.Collections.Generic; -using System.Collections.Specialized; -using System.Configuration; using System.Diagnostics; using System.IO; using System.Linq; @@ -24,23 +21,28 @@ public ApplicationConfiguration() YamlParser parser = new YamlParser(); dynamic configuration = parser.GetConfiguration("application"); ConfigurationValuesGetter valuesGetter = new ConfigurationValuesGetter(configuration); - string license = valuesGetter.GetStringPropertyValue("licensePath"); - if (String.IsNullOrEmpty(license)) + string licPath = valuesGetter.GetStringPropertyValue("licensePath"); + var appRoot = AppContext.BaseDirectory.Substring(0, AppContext.BaseDirectory.LastIndexOf("bin")); + + if (String.IsNullOrEmpty(licPath)) { - string[] files = System.IO.Directory.GetFiles(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, LicensePath), "*.lic"); + // TODO: check for more cross-platform solution + + var licenseDirectory = Path.Combine(appRoot, licPath); + string[] files = Directory.GetFiles(licenseDirectory, "*.lic"); LicensePath = Path.Combine(LicensePath, files[0]); } else { - if (!IsFullPath(license)) + if (!IsFullPath(licPath)) { - license = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, license); - if (!Directory.Exists(Path.GetDirectoryName(license))) + licPath = Path.Combine(appRoot, licPath); + if (!Directory.Exists(Path.GetDirectoryName(licPath))) { - Directory.CreateDirectory(Path.GetDirectoryName(license)); + Directory.CreateDirectory(Path.GetDirectoryName(licPath)); } } - LicensePath = license; + LicensePath = licPath; if (!File.Exists(LicensePath)) { Debug.WriteLine("License file path is incorrect, launched in trial mode"); @@ -52,7 +54,7 @@ public ApplicationConfiguration() private static bool IsFullPath(string path) { return !String.IsNullOrWhiteSpace(path) - && path.IndexOfAny(System.IO.Path.GetInvalidPathChars().ToArray()) == -1 + && path.IndexOfAny(Path.GetInvalidPathChars().ToArray()) == -1 && Path.IsPathRooted(path) && !Path.GetPathRoot(path).Equals(Path.DirectorySeparatorChar.ToString(), StringComparison.Ordinal); } diff --git a/src/Products/Common/Config/CommonConfiguration.cs b/GroupDocs.Editor.MVC/Products/Common/Config/CommonConfiguration.cs similarity index 65% rename from src/Products/Common/Config/CommonConfiguration.cs rename to GroupDocs.Editor.MVC/Products/Common/Config/CommonConfiguration.cs index 3cf28ee..fec2734 100644 --- a/src/Products/Common/Config/CommonConfiguration.cs +++ b/GroupDocs.Editor.MVC/Products/Common/Config/CommonConfiguration.cs @@ -1,15 +1,14 @@ using GroupDocs.Editor.MVC.Products.Common.Util.Parser; +using Microsoft.Extensions.Configuration; using Newtonsoft.Json; using System; -using System.Collections.Specialized; -using System.Configuration; namespace GroupDocs.Editor.MVC.Products.Common.Config { /// /// CommonConfiguration /// - public class CommonConfiguration : ConfigurationSection + public class CommonConfiguration { [JsonProperty] public bool pageSelector { get; set; } @@ -31,23 +30,26 @@ public class CommonConfiguration : ConfigurationSection [JsonProperty] public bool enableRightClick { get; set; } - private readonly NameValueCollection commonConfiguration = (NameValueCollection)System.Configuration.ConfigurationManager.GetSection("commonConfiguration"); + + private IConfigurationSection CommonConfig { get; set; } /// /// Constructor /// - public CommonConfiguration() + public CommonConfiguration(IConfiguration config) { + CommonConfig = config.GetSection("CommonConfiguration"); + YamlParser parser = new YamlParser(); dynamic configuration = parser.GetConfiguration("common"); ConfigurationValuesGetter valuesGetter = new ConfigurationValuesGetter(configuration); - pageSelector = valuesGetter.GetBooleanPropertyValue("pageSelector", Convert.ToBoolean(commonConfiguration["isPageSelector"])); - download = valuesGetter.GetBooleanPropertyValue("download", Convert.ToBoolean(commonConfiguration["isDownload"])); - upload = valuesGetter.GetBooleanPropertyValue("upload", Convert.ToBoolean(commonConfiguration["isUpload"])); - print = valuesGetter.GetBooleanPropertyValue("print", Convert.ToBoolean(commonConfiguration["isPrint"])); - browse = valuesGetter.GetBooleanPropertyValue("browse", Convert.ToBoolean(commonConfiguration["isBrowse"])); - rewrite = valuesGetter.GetBooleanPropertyValue("rewrite", Convert.ToBoolean(commonConfiguration["isRewrite"])); - enableRightClick = valuesGetter.GetBooleanPropertyValue("enableRightClick", Convert.ToBoolean(commonConfiguration["enableRightClick"])); + pageSelector = valuesGetter.GetBooleanPropertyValue("pageSelector", Convert.ToBoolean(CommonConfig["IsPageSelector"])); + download = valuesGetter.GetBooleanPropertyValue("download", Convert.ToBoolean(CommonConfig["IsDownload"])); + upload = valuesGetter.GetBooleanPropertyValue("upload", Convert.ToBoolean(CommonConfig["IsUpload"])); + print = valuesGetter.GetBooleanPropertyValue("print", Convert.ToBoolean(CommonConfig["IsPrint"])); + browse = valuesGetter.GetBooleanPropertyValue("browse", Convert.ToBoolean(CommonConfig["IsBrowse"])); + rewrite = valuesGetter.GetBooleanPropertyValue("rewrite", Convert.ToBoolean(CommonConfig["IsRewrite"])); + enableRightClick = valuesGetter.GetBooleanPropertyValue("enableRightClick", Convert.ToBoolean(CommonConfig["EnableRightClick"])); } } } \ No newline at end of file diff --git a/src/Products/Common/Config/ConfigurationValuesGetter.cs b/GroupDocs.Editor.MVC/Products/Common/Config/ConfigurationValuesGetter.cs similarity index 100% rename from src/Products/Common/Config/ConfigurationValuesGetter.cs rename to GroupDocs.Editor.MVC/Products/Common/Config/ConfigurationValuesGetter.cs diff --git a/src/Products/Common/Config/GlobalConfiguration.cs b/GroupDocs.Editor.MVC/Products/Common/Config/GlobalConfiguration.cs similarity index 80% rename from src/Products/Common/Config/GlobalConfiguration.cs rename to GroupDocs.Editor.MVC/Products/Common/Config/GlobalConfiguration.cs index 0f62359..8b6245b 100644 --- a/src/Products/Common/Config/GlobalConfiguration.cs +++ b/GroupDocs.Editor.MVC/Products/Common/Config/GlobalConfiguration.cs @@ -1,4 +1,5 @@ using GroupDocs.Editor.MVC.Products.Editor.Config; +using Microsoft.Extensions.Configuration; namespace GroupDocs.Editor.MVC.Products.Common.Config { @@ -15,12 +16,12 @@ public class GlobalConfiguration /// /// Get all configurations /// - public GlobalConfiguration() + public GlobalConfiguration(IConfiguration config) { - Server = new ServerConfiguration(); + Server = new ServerConfiguration(config); Application = new ApplicationConfiguration(); - Common = new CommonConfiguration(); - Editor = new EditorConfiguration(); + Common = new CommonConfiguration(config); + Editor = new EditorConfiguration(config); } public EditorConfiguration GetEditorConfiguration() diff --git a/src/Products/Common/Config/ServerConfiguration.cs b/GroupDocs.Editor.MVC/Products/Common/Config/ServerConfiguration.cs similarity index 58% rename from src/Products/Common/Config/ServerConfiguration.cs rename to GroupDocs.Editor.MVC/Products/Common/Config/ServerConfiguration.cs index 1050ad1..63b127e 100644 --- a/src/Products/Common/Config/ServerConfiguration.cs +++ b/GroupDocs.Editor.MVC/Products/Common/Config/ServerConfiguration.cs @@ -1,29 +1,31 @@ using GroupDocs.Editor.MVC.Products.Common.Util.Parser; +using Microsoft.Extensions.Configuration; using System; -using System.Collections.Specialized; -using System.Configuration; namespace GroupDocs.Editor.MVC.Products.Common.Config { /// /// Server configuration /// - public class ServerConfiguration : ConfigurationSection + public class ServerConfiguration { public int HttpPort { get; set; } public string HostAddress { get; set; } - private readonly NameValueCollection serverConfiguration = (NameValueCollection)System.Configuration.ConfigurationManager.GetSection("serverConfiguration"); + private IConfigurationSection ServerConfig { get; set; } /// - /// Get server configuration section of the web.config + /// Get server configuration section of the appsettings.json /// - public ServerConfiguration() { + public ServerConfiguration(IConfiguration config) { + ServerConfig = config.GetSection("ServerConfiguration"); + YamlParser parser = new YamlParser(); dynamic configuration = parser.GetConfiguration("server"); ConfigurationValuesGetter valuesGetter = new ConfigurationValuesGetter(configuration); - int defaultPort = Convert.ToInt32(serverConfiguration["httpPort"]); + int defaultPort = Convert.ToInt32(ServerConfig["HttpPort"]); + HttpPort = valuesGetter.GetIntegerPropertyValue("connector", defaultPort, "port"); - HostAddress = valuesGetter.GetStringPropertyValue("hostAddress", serverConfiguration["hostAddress"]); + HostAddress = valuesGetter.GetStringPropertyValue("hostAddress", ServerConfig["HostAddress"]); } } } \ No newline at end of file diff --git a/src/Products/Common/Entity/Web/ExceptionEntity.cs b/GroupDocs.Editor.MVC/Products/Common/Entity/Web/ExceptionEntity.cs similarity index 100% rename from src/Products/Common/Entity/Web/ExceptionEntity.cs rename to GroupDocs.Editor.MVC/Products/Common/Entity/Web/ExceptionEntity.cs diff --git a/src/Products/Common/Entity/Web/FileDescriptionEntity.cs b/GroupDocs.Editor.MVC/Products/Common/Entity/Web/FileDescriptionEntity.cs similarity index 73% rename from src/Products/Common/Entity/Web/FileDescriptionEntity.cs rename to GroupDocs.Editor.MVC/Products/Common/Entity/Web/FileDescriptionEntity.cs index 763bd9e..e5ca96e 100644 --- a/src/Products/Common/Entity/Web/FileDescriptionEntity.cs +++ b/GroupDocs.Editor.MVC/Products/Common/Entity/Web/FileDescriptionEntity.cs @@ -1,4 +1,6 @@  +using Newtonsoft.Json; + namespace GroupDocs.Editor.MVC.Products.Common.Entity.Web { /// @@ -6,10 +8,15 @@ namespace GroupDocs.Editor.MVC.Products.Common.Entity.Web /// public class FileDescriptionEntity { + [JsonProperty] public string guid{ get; set; } + [JsonProperty] public string name{ get; set; } + [JsonProperty] public string docType{ get; set; } + [JsonProperty] public bool isDirectory{ get; set; } + [JsonProperty] public long size{ get; set; } } } \ No newline at end of file diff --git a/src/Products/Common/Entity/Web/LoadDocumentEntity.cs b/GroupDocs.Editor.MVC/Products/Common/Entity/Web/LoadDocumentEntity.cs similarity index 100% rename from src/Products/Common/Entity/Web/LoadDocumentEntity.cs rename to GroupDocs.Editor.MVC/Products/Common/Entity/Web/LoadDocumentEntity.cs diff --git a/src/Products/Common/Entity/Web/PageDescriptionEntity.cs b/GroupDocs.Editor.MVC/Products/Common/Entity/Web/PageDescriptionEntity.cs similarity index 100% rename from src/Products/Common/Entity/Web/PageDescriptionEntity.cs rename to GroupDocs.Editor.MVC/Products/Common/Entity/Web/PageDescriptionEntity.cs diff --git a/src/Products/Common/Entity/Web/PostedDataEntity.cs b/GroupDocs.Editor.MVC/Products/Common/Entity/Web/PostedDataEntity.cs similarity index 100% rename from src/Products/Common/Entity/Web/PostedDataEntity.cs rename to GroupDocs.Editor.MVC/Products/Common/Entity/Web/PostedDataEntity.cs diff --git a/src/Products/Common/Entity/Web/UploadedDocumentEntity.cs b/GroupDocs.Editor.MVC/Products/Common/Entity/Web/UploadedDocumentEntity.cs similarity index 100% rename from src/Products/Common/Entity/Web/UploadedDocumentEntity.cs rename to GroupDocs.Editor.MVC/Products/Common/Entity/Web/UploadedDocumentEntity.cs diff --git a/src/Products/Common/Resources/Resources.cs b/GroupDocs.Editor.MVC/Products/Common/Resources/Resources.cs similarity index 100% rename from src/Products/Common/Resources/Resources.cs rename to GroupDocs.Editor.MVC/Products/Common/Resources/Resources.cs diff --git a/src/Products/Common/Util/Comparator/FileDateComparator.cs b/GroupDocs.Editor.MVC/Products/Common/Util/Comparator/FileDateComparator.cs similarity index 100% rename from src/Products/Common/Util/Comparator/FileDateComparator.cs rename to GroupDocs.Editor.MVC/Products/Common/Util/Comparator/FileDateComparator.cs diff --git a/src/Products/Common/Util/Comparator/FileNameComparator.cs b/GroupDocs.Editor.MVC/Products/Common/Util/Comparator/FileNameComparator.cs similarity index 100% rename from src/Products/Common/Util/Comparator/FileNameComparator.cs rename to GroupDocs.Editor.MVC/Products/Common/Util/Comparator/FileNameComparator.cs diff --git a/src/Products/Common/Util/Comparator/FileTypeComparator.cs b/GroupDocs.Editor.MVC/Products/Common/Util/Comparator/FileTypeComparator.cs similarity index 100% rename from src/Products/Common/Util/Comparator/FileTypeComparator.cs rename to GroupDocs.Editor.MVC/Products/Common/Util/Comparator/FileTypeComparator.cs diff --git a/src/Products/Common/Util/Directory/IDirectoryUtils.cs b/GroupDocs.Editor.MVC/Products/Common/Util/Directory/IDirectoryUtils.cs similarity index 100% rename from src/Products/Common/Util/Directory/IDirectoryUtils.cs rename to GroupDocs.Editor.MVC/Products/Common/Util/Directory/IDirectoryUtils.cs diff --git a/src/Products/Common/Util/Parser/YamlParser.cs b/GroupDocs.Editor.MVC/Products/Common/Util/Parser/YamlParser.cs similarity index 86% rename from src/Products/Common/Util/Parser/YamlParser.cs rename to GroupDocs.Editor.MVC/Products/Common/Util/Parser/YamlParser.cs index 731e9db..17a8236 100644 --- a/src/Products/Common/Util/Parser/YamlParser.cs +++ b/GroupDocs.Editor.MVC/Products/Common/Util/Parser/YamlParser.cs @@ -10,7 +10,8 @@ namespace GroupDocs.Editor.MVC.Products.Common.Util.Parser { public class YamlParser { - private static string YamlPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "configuration.yml"); + private static string appRoot = AppContext.BaseDirectory.Substring(0, AppContext.BaseDirectory.LastIndexOf("bin")); + private static string YamlPath = Path.Combine(appRoot, "configuration.yml"); private readonly dynamic ConfiguationData; public YamlParser() diff --git a/src/Products/Editor/Config/EditorConfiguration.cs b/GroupDocs.Editor.MVC/Products/Editor/Config/EditorConfiguration.cs similarity index 86% rename from src/Products/Editor/Config/EditorConfiguration.cs rename to GroupDocs.Editor.MVC/Products/Editor/Config/EditorConfiguration.cs index 2d5118e..921bbb7 100644 --- a/src/Products/Editor/Config/EditorConfiguration.cs +++ b/GroupDocs.Editor.MVC/Products/Editor/Config/EditorConfiguration.cs @@ -1,5 +1,6 @@ using GroupDocs.Editor.MVC.Products.Common.Config; using GroupDocs.Editor.MVC.Products.Common.Util.Parser; +using Microsoft.Extensions.Configuration; using Newtonsoft.Json; using System; using System.IO; @@ -27,7 +28,7 @@ public class EditorConfiguration : CommonConfiguration /// /// Constructor /// - public EditorConfiguration() + public EditorConfiguration(IConfiguration config) : base(config) { YamlParser parser = new YamlParser(); dynamic configuration = parser.GetConfiguration("editor"); @@ -37,7 +38,9 @@ public EditorConfiguration() filesDirectory = valuesGetter.GetStringPropertyValue("filesDirectory", filesDirectory); if (!IsFullPath(filesDirectory)) { - filesDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, filesDirectory); + // TODO: check for more cross-platform solution + var appRoot = AppContext.BaseDirectory.Substring(0, AppContext.BaseDirectory.LastIndexOf("bin")); + filesDirectory = Path.Combine(appRoot, filesDirectory); if (!Directory.Exists(filesDirectory)) { Directory.CreateDirectory(filesDirectory); @@ -51,7 +54,7 @@ public EditorConfiguration() private static bool IsFullPath(string path) { return !String.IsNullOrWhiteSpace(path) - && path.IndexOfAny(System.IO.Path.GetInvalidPathChars().ToArray()) == -1 + && path.IndexOfAny(Path.GetInvalidPathChars().ToArray()) == -1 && Path.IsPathRooted(path) && !Path.GetPathRoot(path).Equals(Path.DirectorySeparatorChar.ToString(), StringComparison.Ordinal); } diff --git a/src/Products/Editor/Controllers/EditorApiController.cs b/GroupDocs.Editor.MVC/Products/Editor/Controllers/EditorApiController.cs similarity index 60% rename from src/Products/Editor/Controllers/EditorApiController.cs rename to GroupDocs.Editor.MVC/Products/Editor/Controllers/EditorApiController.cs index 406d6f6..9174ad9 100644 --- a/src/Products/Editor/Controllers/EditorApiController.cs +++ b/GroupDocs.Editor.MVC/Products/Editor/Controllers/EditorApiController.cs @@ -5,26 +5,33 @@ using GroupDocs.Editor.MVC.Products.Editor.Config; using System; using System.Collections.Generic; -using System.Globalization; using System.IO; using System.Net; using System.Net.Http; using System.Net.Http.Headers; -using System.Web; -using System.Web.Http; -using System.Web.Http.Cors; using GroupDocs.Editor.MVC.Products.Editor.Entity.Web.Request; +using GroupDocs.Editor.Formats; +using System.Globalization; +using Microsoft.AspNetCore.Cors; +using Microsoft.AspNetCore.Mvc; +using Newtonsoft.Json; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Configuration; namespace GroupDocs.Editor.MVC.Products.Editor.Controllers { /// /// EditorApiController /// - [EnableCors(origins: "*", headers: "*", methods: "*")] - public class EditorApiController : ApiController + [EnableCors] + public class EditorApiController : ControllerBase { + private readonly Common.Config.GlobalConfiguration globalConfiguration; - private static Common.Config.GlobalConfiguration globalConfiguration = new Common.Config.GlobalConfiguration(); + public EditorApiController(IConfiguration _config) + { + globalConfiguration = new Common.Config.GlobalConfiguration(_config); + } /// /// Load Viewr configuration @@ -43,11 +50,14 @@ public EditorConfiguration LoadConfig() /// Post data /// List of files and directories [HttpPost] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] [Route("loadFileTree")] - public HttpResponseMessage loadFileTree(PostedDataEntity postedData) + public IActionResult loadFileTree(PostedDataEntity postedData) { // get request body string relDirPath = postedData.path; + // get file list from storage path try { @@ -95,11 +105,12 @@ public HttpResponseMessage loadFileTree(PostedDataEntity postedData) fileList.Add(fileDescription); } } - return Request.CreateResponse(HttpStatusCode.OK, fileList); + + return Ok(JsonConvert.SerializeObject(fileList)); } - catch (System.Exception ex) + catch (Exception ex) { - return Request.CreateResponse(HttpStatusCode.InternalServerError, new Resources().GenerateException(ex)); + return StatusCode(500, new Resources().GenerateException(ex)); } } @@ -120,19 +131,27 @@ public List LoadFormats() /// Post data /// Document info object [HttpPost] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + [ProducesResponseType(StatusCodes.Status403Forbidden)] [Route("loadDocumentDescription")] - public HttpResponseMessage LoadDocumentDescription(PostedDataEntity postedData) + public IActionResult LoadDocumentDescription([FromBody] PostedDataEntity postedData) { try { LoadDocumentEntity loadDocumentEntity = LoadDocument(postedData.guid, postedData.password); // return document description - return Request.CreateResponse(HttpStatusCode.OK, loadDocumentEntity); + return Ok(JsonConvert.SerializeObject(loadDocumentEntity)); } - catch (System.Exception ex) + catch (PasswordRequiredException ex) { // set exception message - return Request.CreateResponse(HttpStatusCode.Forbidden, new Resources().GenerateException(ex, postedData.password)); + return StatusCode(403, new Resources().GenerateException(ex, postedData.password)); + } + catch (Exception ex) + { + // set exception message + return StatusCode(500, new Resources().GenerateException(ex, postedData.password)); } } @@ -147,7 +166,7 @@ public HttpResponseMessage DownloadDocument(string path) { if (!string.IsNullOrEmpty(path)) { - if (File.Exists(path)) + if (System.IO.File.Exists(path)) { HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK); var fileStream = new FileStream(path, FileMode.Open); @@ -167,22 +186,24 @@ public HttpResponseMessage DownloadDocument(string path) /// Post data /// Uploaded document object [HttpPost] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] [Route("uploadDocument")] - public HttpResponseMessage UploadDocument() + public IActionResult UploadDocument() { try { - string url = HttpContext.Current.Request.Form["url"]; + string url = HttpContext.Request.Form["url"]; // get documents storage path string documentStoragePath = globalConfiguration.GetEditorConfiguration().GetFilesDirectory(); - bool rewrite = bool.Parse(HttpContext.Current.Request.Form["rewrite"]); + bool rewrite = bool.Parse(HttpContext.Request.Form["rewrite"]); string fileSavePath = ""; if (string.IsNullOrEmpty(url)) { - if (HttpContext.Current.Request.Files.AllKeys != null) + if (HttpContext.Request.Form.Files.Count > 0) { // Get the uploaded document from the Files collection - var httpPostedFile = HttpContext.Current.Request.Files["file"]; + var httpPostedFile = HttpContext.Request.Form.Files["file"]; if (httpPostedFile != null) { if (rewrite) @@ -196,7 +217,10 @@ public HttpResponseMessage UploadDocument() } // Save the uploaded file to "UploadedFiles" folder - httpPostedFile.SaveAs(fileSavePath); + using (var fileStream = new FileStream(fileSavePath, FileMode.Create)) + { + httpPostedFile.CopyToAsync(fileStream); + } } } } @@ -222,12 +246,13 @@ public HttpResponseMessage UploadDocument() } UploadedDocumentEntity uploadedDocument = new UploadedDocumentEntity(); uploadedDocument.guid = fileSavePath; - return Request.CreateResponse(HttpStatusCode.OK, uploadedDocument); + + return Ok(JsonConvert.SerializeObject(uploadedDocument)); } - catch (System.Exception ex) + catch (Exception ex) { // set exception message - return Request.CreateResponse(HttpStatusCode.InternalServerError, new Resources().GenerateException(ex)); + return StatusCode(500, new Resources().GenerateException(ex)); } } @@ -237,40 +262,67 @@ public HttpResponseMessage UploadDocument() /// Post data /// Document info object [HttpPost] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] [Route("saveFile")] - public HttpResponseMessage SaveFile(EditDocumentRequest postedData) + public IActionResult SaveFile([FromBody] EditDocumentRequest postedData) { try { string htmlContent = postedData.getContent(); // Initialize with HTML markup of the edited document - string saveFilePath = Path.Combine(globalConfiguration.GetEditorConfiguration().GetFilesDirectory(), postedData.GetGuid()); - if (File.Exists(saveFilePath)) - { - File.Delete(saveFilePath); - } - using (OutputHtmlDocument editedHtmlDoc = new OutputHtmlDocument(htmlContent, null)) + string tempFilename = Path.GetFileNameWithoutExtension(saveFilePath) + "_tmp"; + string tempPath = Path.Combine(Path.GetDirectoryName(saveFilePath), tempFilename + Path.GetExtension(saveFilePath)); + + ILoadOptions loadOptions = GetLoadOptions(postedData.GetGuid()); + loadOptions.Password = postedData.getPassword(); + + // Instantiate Editor object by loading the input file + using (GroupDocs.Editor.Editor editor = new GroupDocs.Editor.Editor(postedData.GetGuid(), delegate { return loadOptions; })) { - dynamic options = GetSaveOptions(saveFilePath); - if (options.GetType().Equals(typeof(WordProcessingSaveOptions))) + dynamic editOptions = GetEditOptions(postedData.GetGuid()); + + if (editOptions is WordProcessingEditOptions) { - options.EnablePagination = true; + editOptions.EnablePagination = true; + editOptions.FontExtraction = FontExtractionOptions.ExtractEmbeddedWithoutSystem; + editOptions.EnableLanguageInformation = true; } - options.Password = postedData.getPassword(); - options.OutputFormat = GetSaveFormat(saveFilePath); - using (System.IO.FileStream outputStream = System.IO.File.Create(saveFilePath)) + + using (EditableDocument beforeEdit = editor.Edit(editOptions)) { - EditorHandler.ToDocument(editedHtmlDoc, outputStream, options); + EditableDocument htmlContentDoc = EditableDocument.FromMarkup(htmlContent, null); + + dynamic saveOptions = GetSaveOptions(postedData.GetGuid()); + saveOptions.Password = postedData.getPassword(); + + if (saveOptions is WordProcessingSaveOptions) + { + saveOptions.EnablePagination = true; + } + + using (FileStream outputStream = System.IO.File.Create(tempPath)) + { + editor.Save(htmlContentDoc, outputStream, saveOptions); + } } } + + if (System.IO.File.Exists(saveFilePath)) + { + System.IO.File.Delete(saveFilePath); + } + + System.IO.File.Move(tempPath, saveFilePath); + LoadDocumentEntity loadDocumentEntity = LoadDocument(saveFilePath, postedData.getPassword()); // return document description - return Request.CreateResponse(HttpStatusCode.OK, loadDocumentEntity); + return Ok(JsonConvert.SerializeObject(loadDocumentEntity)); } - catch (System.Exception ex) + catch (Exception ex) { // set exception message - return Request.CreateResponse(HttpStatusCode.Forbidden, new Resources().GenerateException(ex, postedData.getPassword())); + return StatusCode(500, new Resources().GenerateException(ex, postedData.getPassword())); } } @@ -279,6 +331,7 @@ private dynamic GetSaveFormat(string saveFilePath) string extension = Path.GetExtension(saveFilePath).Replace(".", ""); extension = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(extension); dynamic format = null; + switch (extension) { @@ -309,30 +362,15 @@ private dynamic GetSaveFormat(string saveFilePath) case "Ott": format = WordProcessingFormats.Ott; break; - case "txt": - format = WordProcessingFormats.Text; - break; - case "Html": - format = WordProcessingFormats.Html; - break; - case "Mhtml": - format = WordProcessingFormats.Mhtml; - break; case "WordML": format = WordProcessingFormats.WordML; break; - case "Csv": - format = SpreadsheetFormats.Csv; - break; case "Ods": format = SpreadsheetFormats.Ods; break; case "SpreadsheetML": format = SpreadsheetFormats.SpreadsheetML; break; - case "TabDelimited": - format = SpreadsheetFormats.TabDelimited; - break; case "Xls": format = SpreadsheetFormats.Xls; break; @@ -354,114 +392,179 @@ private dynamic GetSaveFormat(string saveFilePath) default: format = WordProcessingFormats.Docx; break; - } + return format; } - private dynamic GetSaveOptions(string saveFilePath) + private ILoadOptions GetLoadOptions(string guid) { - string extension = Path.GetExtension(saveFilePath).Replace(".", ""); + string extension = Path.GetExtension(guid).Replace(".", ""); extension = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(extension); + if (extension.Equals("Txt")) { extension = "Text"; } - dynamic options = null; - foreach (var item in Enum.GetNames(typeof(WordProcessingFormats))) + + ILoadOptions options = null; + + foreach (var item in typeof(WordProcessingFormats).GetFields()) { - if (item.Equals("Auto")) + if (item.Name.Equals("Auto")) { continue; } - if (item.Equals(extension)) + + if (item.Name.Equals(extension)) { - options = new WordProcessingSaveOptions(); + options = new WordProcessingLoadOptions(); break; } } + if (options == null) { - options = new SpreadsheetSaveOptions(); + options = new SpreadsheetLoadOptions(); } + return options; } - private static List PrepareFormats() + private IEditOptions GetEditOptions(string guid) { - List outputListItems = new List(); + string extension = Path.GetExtension(guid).Replace(".", ""); + extension = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(extension); + + if (extension.Equals("Txt")) + { + extension = "Text"; + } + + IEditOptions options = null; - foreach (var item in Enum.GetNames(typeof(WordProcessingFormats))) + foreach (var item in typeof(WordProcessingFormats).GetFields()) { - if (item.Equals("Auto")) + if (item.Name.Equals("Auto")) { continue; } - if (item.Equals("Text")) - { - outputListItems.Add("Txt"); - } - else + + if (item.Name.Equals(extension)) { - outputListItems.Add(item); + options = new WordProcessingEditOptions(); + break; } + } + if (options == null) + { + options = new SpreadsheetEditOptions(); } - foreach (var item in Enum.GetNames(typeof(SpreadsheetFormats))) + return options; + } + + private ISaveOptions GetSaveOptions(string saveFilePath) + { + string extension = Path.GetExtension(saveFilePath).Replace(".", ""); + extension = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(extension); + + if (extension.Equals("Txt")) { - if (item.Equals("Auto")) + extension = "Text"; + } + + ISaveOptions options = null; + + foreach (var item in typeof(WordProcessingFormats).GetFields()) + { + if (item.Name.Equals("Auto")) { continue; } - outputListItems.Add(item); + + if (item.Name.Equals(extension)) + { + options = new WordProcessingSaveOptions(WordProcessingFormats.Docm); + break; + } } - return outputListItems; + if (options == null) + { + options = new SpreadsheetSaveOptions(SpreadsheetFormats.Xlsb); + } + + return options; } - private LoadDocumentEntity LoadDocument(string guid, string password) + private static List PrepareFormats() { - try + List outputListItems = new List(); + + foreach (var item in typeof(WordProcessingFormats).GetFields()) { - dynamic options = null; - //GroupDocs.Editor cannot detect text-based Cells documents formats (like CSV) automatically - if (guid.EndsWith("csv", StringComparison.OrdinalIgnoreCase)) + if (item.Name.Equals("Auto")) { - options = new SpreadsheetToHtmlOptions(); + continue; } - else + + if (item.Name.Equals("Text")) { - options = EditorHandler.DetectOptionsFromExtension(guid); + outputListItems.Add("Txt"); } - if (options is SpreadsheetToHtmlOptions) + else { - options.TextOptions = new SpreadsheetToHtmlOptions.TextLoadOptions(","); + outputListItems.Add(item.Name); } - else + } + + foreach (var item in typeof(SpreadsheetFormats).GetFields()) + { + if (item.Name.Equals("Auto")) { - options.Password = password; + continue; } - string bodyContent; - using (System.IO.FileStream inputDoc = System.IO.File.OpenRead(guid)) + outputListItems.Add(item.Name); + } + + return outputListItems; + } - using (InputHtmlDocument htmlDoc = EditorHandler.ToHtml(inputDoc, options)) + private LoadDocumentEntity LoadDocument(string guid, string password) + { + LoadDocumentEntity loadDocumentEntity = new LoadDocumentEntity(); + ILoadOptions loadOptions = GetLoadOptions(guid); + loadOptions.Password = password; + + // Instantiate Editor object by loading the input file + using (GroupDocs.Editor.Editor editor = new GroupDocs.Editor.Editor(guid, delegate { return loadOptions; })) + { + dynamic editOptions = GetEditOptions(guid); + if (editOptions is WordProcessingEditOptions) { - bodyContent = htmlDoc.GetEmbeddedHtml(); + editOptions.EnablePagination = true; } - LoadDocumentEntity loadDocumentEntity = new LoadDocumentEntity(); - loadDocumentEntity.SetGuid(System.IO.Path.GetFileName(guid)); + + // Open input document for edit — obtain an intermediate document, that can be edited + EditableDocument beforeEdit = editor.Edit(editOptions); + + // Get document as a single base64-encoded string, where all resources (images, fonts, etc) + // are embedded inside this string along with main textual content + string allEmbeddedInsideString = beforeEdit.GetEmbeddedHtml(); + + loadDocumentEntity.SetGuid(guid); PageDescriptionEntity page = new PageDescriptionEntity(); - page.SetData(bodyContent); + page.SetData(allEmbeddedInsideString); loadDocumentEntity.SetPages(page); - return loadDocumentEntity; - } - catch - { - throw; + + beforeEdit.Dispose(); } + + return loadDocumentEntity; } } } \ No newline at end of file diff --git a/src/Products/Editor/Entity/Web/EditableDocumentType.cs b/GroupDocs.Editor.MVC/Products/Editor/Entity/Web/EditableDocumentType.cs similarity index 100% rename from src/Products/Editor/Entity/Web/EditableDocumentType.cs rename to GroupDocs.Editor.MVC/Products/Editor/Entity/Web/EditableDocumentType.cs diff --git a/src/Products/Editor/Entity/Web/Request/EditDocumentRequest.cs b/GroupDocs.Editor.MVC/Products/Editor/Entity/Web/Request/EditDocumentRequest.cs similarity index 100% rename from src/Products/Editor/Entity/Web/Request/EditDocumentRequest.cs rename to GroupDocs.Editor.MVC/Products/Editor/Entity/Web/Request/EditDocumentRequest.cs diff --git a/GroupDocs.Editor.MVC/Program.cs b/GroupDocs.Editor.MVC/Program.cs new file mode 100644 index 0000000..c9584f4 --- /dev/null +++ b/GroupDocs.Editor.MVC/Program.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; + +namespace GroupDocs.Editor.MVC +{ + public class Program + { + public static void Main(string[] args) + { + CreateHostBuilder(args).Build().Run(); + } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStartup(); + }); + } +} diff --git a/GroupDocs.Editor.MVC/Properties/launchSettings.json b/GroupDocs.Editor.MVC/Properties/launchSettings.json new file mode 100644 index 0000000..fabbfb0 --- /dev/null +++ b/GroupDocs.Editor.MVC/Properties/launchSettings.json @@ -0,0 +1,28 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:8080/editor", + "sslPort": 0 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "launchUrl": "http://localhost:8080/editor", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "GroupDocs.Editor.MVC": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "applicationUrl": "https://localhost:5001;http://localhost:5000" + } + } +} \ No newline at end of file diff --git a/GroupDocs.Editor.MVC/Startup.cs b/GroupDocs.Editor.MVC/Startup.cs new file mode 100644 index 0000000..2a93c49 --- /dev/null +++ b/GroupDocs.Editor.MVC/Startup.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using GroupDocs.Editor.MVC.AppDomainGenerator; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.HttpsPolicy; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.FileProviders; +using Microsoft.Extensions.Hosting; + +namespace GroupDocs.Editor.MVC +{ + public class Startup + { + public Startup(IConfiguration configuration) + { + Configuration = configuration; + DomainGenerator editorDomainGenerator = new DomainGenerator("GroupDocs.Editor.dll", "GroupDocs.Editor.License", Configuration); + editorDomainGenerator.SetEditorLicense(); + } + + public IConfiguration Configuration { get; } + + // This method gets called by the runtime. Use this method to add services to the container. + public void ConfigureServices(IServiceCollection services) + { + services.AddControllersWithViews() + .AddNewtonsoftJson(options => + options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore + ); + + services.AddCors(o => o.AddPolicy("EditorPolicy", builder => + { + builder.AllowAnyOrigin() + .AllowAnyMethod() + .AllowAnyHeader(); + })); + + services.AddMvc().AddNewtonsoftJson(); + } + + // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + public void Configure(IApplicationBuilder app, IWebHostEnvironment env) + { + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + else + { + app.UseExceptionHandler("/Editor/Error"); + // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. + app.UseHsts(); + } + app.UseHttpsRedirection(); + app.UseStaticFiles(); + + app.UseStaticFiles(new StaticFileOptions + { + FileProvider = new PhysicalFileProvider( + Path.Combine(Directory.GetCurrentDirectory(), "Resources")), + RequestPath = "/Resources" + }); + + app.UseRouting(); + app.UseCors("EditorPolicy"); + app.UseAuthorization(); + + app.UseEndpoints(endpoints => + { + endpoints.MapControllerRoute( + name: "default", + pattern: "{controller=Editor}/{action=Index}/{id?}"); + }); + } + } +} diff --git a/GroupDocs.Editor.MVC/Views/Editor/Index.cshtml b/GroupDocs.Editor.MVC/Views/Editor/Index.cshtml new file mode 100644 index 0000000..2426778 --- /dev/null +++ b/GroupDocs.Editor.MVC/Views/Editor/Index.cshtml @@ -0,0 +1,21 @@ + + + + + Editor for .NET MVC + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/GroupDocs.Editor.MVC/appsettings.Development.json b/GroupDocs.Editor.MVC/appsettings.Development.json new file mode 100644 index 0000000..8983e0f --- /dev/null +++ b/GroupDocs.Editor.MVC/appsettings.Development.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + } +} diff --git a/GroupDocs.Editor.MVC/appsettings.json b/GroupDocs.Editor.MVC/appsettings.json new file mode 100644 index 0000000..dfa0744 --- /dev/null +++ b/GroupDocs.Editor.MVC/appsettings.json @@ -0,0 +1,22 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "AllowedHosts": "*", + "ServerConfiguration": { + "HostAddress": "localhost", + "HttpPort": 8080 + }, + "CommonConfiguration": { + "IsPageSelector": "true", + "IsDownload": "true", + "IsUpload": "true", + "IsPrint": "true", + "IsBrowse": "true", + "IsRewrite": "true" + } +} diff --git a/src/client/.editorconfig b/GroupDocs.Editor.MVC/client/.editorconfig similarity index 100% rename from src/client/.editorconfig rename to GroupDocs.Editor.MVC/client/.editorconfig diff --git a/src/client/.gitignore b/GroupDocs.Editor.MVC/client/.gitignore similarity index 100% rename from src/client/.gitignore rename to GroupDocs.Editor.MVC/client/.gitignore diff --git a/src/client/.prettierignore b/GroupDocs.Editor.MVC/client/.prettierignore similarity index 100% rename from src/client/.prettierignore rename to GroupDocs.Editor.MVC/client/.prettierignore diff --git a/src/client/.prettierrc b/GroupDocs.Editor.MVC/client/.prettierrc similarity index 100% rename from src/client/.prettierrc rename to GroupDocs.Editor.MVC/client/.prettierrc diff --git a/src/client/.vscode/extensions.json b/GroupDocs.Editor.MVC/client/.vscode/extensions.json similarity index 100% rename from src/client/.vscode/extensions.json rename to GroupDocs.Editor.MVC/client/.vscode/extensions.json diff --git a/src/client/README.md b/GroupDocs.Editor.MVC/client/README.md similarity index 100% rename from src/client/README.md rename to GroupDocs.Editor.MVC/client/README.md diff --git a/src/client/angular.json b/GroupDocs.Editor.MVC/client/angular.json similarity index 100% rename from src/client/angular.json rename to GroupDocs.Editor.MVC/client/angular.json diff --git a/src/client/apps/.gitkeep b/GroupDocs.Editor.MVC/client/apps/.gitkeep similarity index 100% rename from src/client/apps/.gitkeep rename to GroupDocs.Editor.MVC/client/apps/.gitkeep diff --git a/src/client/apps/editor-e2e/cypress.json b/GroupDocs.Editor.MVC/client/apps/editor-e2e/cypress.json similarity index 100% rename from src/client/apps/editor-e2e/cypress.json rename to GroupDocs.Editor.MVC/client/apps/editor-e2e/cypress.json diff --git a/src/client/apps/editor-e2e/src/fixtures/example.json b/GroupDocs.Editor.MVC/client/apps/editor-e2e/src/fixtures/example.json similarity index 100% rename from src/client/apps/editor-e2e/src/fixtures/example.json rename to GroupDocs.Editor.MVC/client/apps/editor-e2e/src/fixtures/example.json diff --git a/src/client/apps/editor-e2e/src/integration/app.spec.ts b/GroupDocs.Editor.MVC/client/apps/editor-e2e/src/integration/app.spec.ts similarity index 100% rename from src/client/apps/editor-e2e/src/integration/app.spec.ts rename to GroupDocs.Editor.MVC/client/apps/editor-e2e/src/integration/app.spec.ts diff --git a/src/client/apps/editor-e2e/src/plugins/index.js b/GroupDocs.Editor.MVC/client/apps/editor-e2e/src/plugins/index.js similarity index 100% rename from src/client/apps/editor-e2e/src/plugins/index.js rename to GroupDocs.Editor.MVC/client/apps/editor-e2e/src/plugins/index.js diff --git a/src/client/apps/editor-e2e/src/support/app.po.ts b/GroupDocs.Editor.MVC/client/apps/editor-e2e/src/support/app.po.ts similarity index 100% rename from src/client/apps/editor-e2e/src/support/app.po.ts rename to GroupDocs.Editor.MVC/client/apps/editor-e2e/src/support/app.po.ts diff --git a/src/client/apps/editor-e2e/src/support/commands.ts b/GroupDocs.Editor.MVC/client/apps/editor-e2e/src/support/commands.ts similarity index 100% rename from src/client/apps/editor-e2e/src/support/commands.ts rename to GroupDocs.Editor.MVC/client/apps/editor-e2e/src/support/commands.ts diff --git a/src/client/apps/editor-e2e/src/support/index.ts b/GroupDocs.Editor.MVC/client/apps/editor-e2e/src/support/index.ts similarity index 100% rename from src/client/apps/editor-e2e/src/support/index.ts rename to GroupDocs.Editor.MVC/client/apps/editor-e2e/src/support/index.ts diff --git a/src/client/apps/editor-e2e/tsconfig.e2e.json b/GroupDocs.Editor.MVC/client/apps/editor-e2e/tsconfig.e2e.json similarity index 100% rename from src/client/apps/editor-e2e/tsconfig.e2e.json rename to GroupDocs.Editor.MVC/client/apps/editor-e2e/tsconfig.e2e.json diff --git a/src/client/apps/editor-e2e/tsconfig.json b/GroupDocs.Editor.MVC/client/apps/editor-e2e/tsconfig.json similarity index 100% rename from src/client/apps/editor-e2e/tsconfig.json rename to GroupDocs.Editor.MVC/client/apps/editor-e2e/tsconfig.json diff --git a/src/client/apps/editor/browserslist b/GroupDocs.Editor.MVC/client/apps/editor/browserslist similarity index 100% rename from src/client/apps/editor/browserslist rename to GroupDocs.Editor.MVC/client/apps/editor/browserslist diff --git a/src/client/apps/editor/jest.config.js b/GroupDocs.Editor.MVC/client/apps/editor/jest.config.js similarity index 100% rename from src/client/apps/editor/jest.config.js rename to GroupDocs.Editor.MVC/client/apps/editor/jest.config.js diff --git a/src/client/apps/editor/src/app/app.component.html b/GroupDocs.Editor.MVC/client/apps/editor/src/app/app.component.html similarity index 100% rename from src/client/apps/editor/src/app/app.component.html rename to GroupDocs.Editor.MVC/client/apps/editor/src/app/app.component.html diff --git a/src/client/apps/editor/src/app/app.component.less b/GroupDocs.Editor.MVC/client/apps/editor/src/app/app.component.less similarity index 100% rename from src/client/apps/editor/src/app/app.component.less rename to GroupDocs.Editor.MVC/client/apps/editor/src/app/app.component.less diff --git a/src/client/apps/editor/src/app/app.component.spec.ts b/GroupDocs.Editor.MVC/client/apps/editor/src/app/app.component.spec.ts similarity index 100% rename from src/client/apps/editor/src/app/app.component.spec.ts rename to GroupDocs.Editor.MVC/client/apps/editor/src/app/app.component.spec.ts diff --git a/src/client/apps/editor/src/app/app.component.ts b/GroupDocs.Editor.MVC/client/apps/editor/src/app/app.component.ts similarity index 100% rename from src/client/apps/editor/src/app/app.component.ts rename to GroupDocs.Editor.MVC/client/apps/editor/src/app/app.component.ts diff --git a/src/client/apps/editor/src/app/app.module.ts b/GroupDocs.Editor.MVC/client/apps/editor/src/app/app.module.ts similarity index 100% rename from src/client/apps/editor/src/app/app.module.ts rename to GroupDocs.Editor.MVC/client/apps/editor/src/app/app.module.ts diff --git a/src/DocumentSamples/Editor/.gitkeep b/GroupDocs.Editor.MVC/client/apps/editor/src/assets/.gitkeep similarity index 100% rename from src/DocumentSamples/Editor/.gitkeep rename to GroupDocs.Editor.MVC/client/apps/editor/src/assets/.gitkeep diff --git a/src/client/apps/editor/src/environments/environment.prod.ts b/GroupDocs.Editor.MVC/client/apps/editor/src/environments/environment.prod.ts similarity index 100% rename from src/client/apps/editor/src/environments/environment.prod.ts rename to GroupDocs.Editor.MVC/client/apps/editor/src/environments/environment.prod.ts diff --git a/src/client/apps/editor/src/environments/environment.ts b/GroupDocs.Editor.MVC/client/apps/editor/src/environments/environment.ts similarity index 100% rename from src/client/apps/editor/src/environments/environment.ts rename to GroupDocs.Editor.MVC/client/apps/editor/src/environments/environment.ts diff --git a/src/client/apps/editor/src/favicon.ico b/GroupDocs.Editor.MVC/client/apps/editor/src/favicon.ico similarity index 100% rename from src/client/apps/editor/src/favicon.ico rename to GroupDocs.Editor.MVC/client/apps/editor/src/favicon.ico diff --git a/src/client/apps/editor/src/index.html b/GroupDocs.Editor.MVC/client/apps/editor/src/index.html similarity index 100% rename from src/client/apps/editor/src/index.html rename to GroupDocs.Editor.MVC/client/apps/editor/src/index.html diff --git a/src/client/apps/editor/src/main.ts b/GroupDocs.Editor.MVC/client/apps/editor/src/main.ts similarity index 100% rename from src/client/apps/editor/src/main.ts rename to GroupDocs.Editor.MVC/client/apps/editor/src/main.ts diff --git a/src/client/apps/editor/src/polyfills.ts b/GroupDocs.Editor.MVC/client/apps/editor/src/polyfills.ts similarity index 100% rename from src/client/apps/editor/src/polyfills.ts rename to GroupDocs.Editor.MVC/client/apps/editor/src/polyfills.ts diff --git a/src/client/apps/editor/src/styles.less b/GroupDocs.Editor.MVC/client/apps/editor/src/styles.less similarity index 100% rename from src/client/apps/editor/src/styles.less rename to GroupDocs.Editor.MVC/client/apps/editor/src/styles.less diff --git a/src/client/apps/editor/src/test-setup.ts b/GroupDocs.Editor.MVC/client/apps/editor/src/test-setup.ts similarity index 100% rename from src/client/apps/editor/src/test-setup.ts rename to GroupDocs.Editor.MVC/client/apps/editor/src/test-setup.ts diff --git a/src/client/apps/editor/tsconfig.app.json b/GroupDocs.Editor.MVC/client/apps/editor/tsconfig.app.json similarity index 100% rename from src/client/apps/editor/tsconfig.app.json rename to GroupDocs.Editor.MVC/client/apps/editor/tsconfig.app.json diff --git a/src/client/apps/editor/tsconfig.json b/GroupDocs.Editor.MVC/client/apps/editor/tsconfig.json similarity index 100% rename from src/client/apps/editor/tsconfig.json rename to GroupDocs.Editor.MVC/client/apps/editor/tsconfig.json diff --git a/src/client/apps/editor/tsconfig.spec.json b/GroupDocs.Editor.MVC/client/apps/editor/tsconfig.spec.json similarity index 100% rename from src/client/apps/editor/tsconfig.spec.json rename to GroupDocs.Editor.MVC/client/apps/editor/tsconfig.spec.json diff --git a/src/client/apps/editor/tslint.json b/GroupDocs.Editor.MVC/client/apps/editor/tslint.json similarity index 100% rename from src/client/apps/editor/tslint.json rename to GroupDocs.Editor.MVC/client/apps/editor/tslint.json diff --git a/src/client/jest.config.js b/GroupDocs.Editor.MVC/client/jest.config.js similarity index 100% rename from src/client/jest.config.js rename to GroupDocs.Editor.MVC/client/jest.config.js diff --git a/src/Licenses/.gitkeep b/GroupDocs.Editor.MVC/client/libs/.gitkeep similarity index 100% rename from src/Licenses/.gitkeep rename to GroupDocs.Editor.MVC/client/libs/.gitkeep diff --git a/src/client/nx.json b/GroupDocs.Editor.MVC/client/nx.json similarity index 100% rename from src/client/nx.json rename to GroupDocs.Editor.MVC/client/nx.json diff --git a/src/client/package.json b/GroupDocs.Editor.MVC/client/package.json similarity index 91% rename from src/client/package.json rename to GroupDocs.Editor.MVC/client/package.json index 68e19b4..4872d08 100644 --- a/src/client/package.json +++ b/GroupDocs.Editor.MVC/client/package.json @@ -6,7 +6,7 @@ "ng": "ng", "nx": "nx", "start": "ng serve", - "build": "..\\..\\packages\\Node-Kit.11.1.0.1\\node\\win\\node.exe .\\node_modules\\@angular\\cli\\bin\\ng build", + "build": "..\\..\\packages\\Node-Kit\\11.1.0.1\\node\\win\\node.exe .\\node_modules\\@angular\\cli\\bin\\ng build", "test": "ng test", "lint": "nx workspace-lint && ng lint", "e2e": "ng e2e", @@ -41,7 +41,7 @@ "rxjs": "~6.4.0", "zone.js": "^0.9.1", "@nrwl/angular": "^8.3.0", - "@groupdocs.examples.angular/editor": "^0.5.0" + "@groupdocs.examples.angular/editor": "^0.7.0" }, "devDependencies": { "cypress": "3.4.0", diff --git a/src/Resources/.gitkeep b/GroupDocs.Editor.MVC/client/tools/schematics/.gitkeep similarity index 100% rename from src/Resources/.gitkeep rename to GroupDocs.Editor.MVC/client/tools/schematics/.gitkeep diff --git a/src/client/tools/tsconfig.tools.json b/GroupDocs.Editor.MVC/client/tools/tsconfig.tools.json similarity index 100% rename from src/client/tools/tsconfig.tools.json rename to GroupDocs.Editor.MVC/client/tools/tsconfig.tools.json diff --git a/src/client/tsconfig.json b/GroupDocs.Editor.MVC/client/tsconfig.json similarity index 100% rename from src/client/tsconfig.json rename to GroupDocs.Editor.MVC/client/tsconfig.json diff --git a/src/client/tslint.json b/GroupDocs.Editor.MVC/client/tslint.json similarity index 100% rename from src/client/tslint.json rename to GroupDocs.Editor.MVC/client/tslint.json diff --git a/src/configuration.yml b/GroupDocs.Editor.MVC/configuration.yml similarity index 100% rename from src/configuration.yml rename to GroupDocs.Editor.MVC/configuration.yml diff --git a/GroupDocs.Editor.MVC/wwwroot/favicon.ico b/GroupDocs.Editor.MVC/wwwroot/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..a3a799985c43bc7309d701b2cad129023377dc71 GIT binary patch literal 32038 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 + + + + + \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index e13b395..0000000 --- a/README.md +++ /dev/null @@ -1,117 +0,0 @@ -![Alt text](https://raw.githubusercontent.com/groupdocs-Editor/groupdocs-Editor.github.io/master/resources/image/banner.png "Document Editor API for .NET MVC") -# GroupDocs.Editor for .NET MVC Example -###### version 1.20.0 - -[![Build status](https://ci.appveyor.com/api/projects/status/qu9h9b6wl177vmmn?svg=true)](https://ci.appveyor.com/project/egorovpavel/groupdocs-editor-for-net-mvc) -[![Codacy Badge](https://api.codacy.com/project/badge/Grade/92a01202aa6b45c39febe3fe77d1e6c6)](https://www.codacy.com/app/GroupDocs/GroupDocs.Editor-for-.NET-MVC?utm_source=github.com&utm_medium=referral&utm_content=groupdocs-editor/GroupDocs.Editor-for-.NET-MVC&utm_campaign=Badge_Grade) -[![GitHub license](https://img.shields.io/github/license/groupdocs-Editor/GroupDocs.Editor-for-.NET-MVC.svg)](https://github.com/groupdocs-Editor/GroupDocs.Editor-for-.NET-MVC/blob/master/LICENSE) - -## System Requirements -- .NET Framework 4.5 -- Visual Studio 2015 - - -## Document Editor API for .NET MVC - -[GroupDocs.Editor for .NET](https://products.groupdocs.com/Editor/net) is a library that allows you to **edit DOCX, ODT, XLS and other supported formats in form of HTML** and save it back to the original format. With GroupDocs.Editor you can easily edit documents on the web with your favorite WYSIWYG editor without external dependencies. - -This web application demonstrates the powerful capabilities of GroupDocs.Editor with a built-in **WYSIWYG document editor** and can be used as a standalone application or can be easily integrated into your project. - - -**Note:** without a license application will run in trial mode, purchase [GroupDocs.Editor for .NET license](https://purchase.groupdocs.com/order-online-step-1-of-8.aspx) or request [GroupDocs.Editor for .NET temporary license](https://purchase.groupdocs.com/temporary-license). - - -## Supported document Formats - -| Family | Formats | -| --------------------------- |:---------------------------------------------------------------------------------------------------------------------------------- | -| Microsoft Word | `DOC`, `DOCM` , `DOCX`, `DOT`, `DOTM`, `DOTX` | -| Microsoft Excel | `XLS`, `XLSB`, `XLSM`, `XLSX`, `XLT`, `XLTM`, `XLTX` | -| OpenDocument Formats | `ODT`, `ODP`, `ODS`, `OTT` | -| Plain Text File | `TXT` | -| Comma-Separated Values | `CSV` | -| HyperText Markup Language | `HTML`, `MHT`, `MHTML`, `SVG` | -| Extensible Markup Language | `XML`,`XML`, `XPS` | - -## Demo Video - -

- - - -

- -## Features -- Responsive design -- Cross-browser support (Safari, Chrome, Opera, Firefox) -- Cross-platform support (Windows, Linux, MacOS) -- Clean, modern and intuitive design -- Edit, format documents -- Mobile support (open application on any mobile device) -- Support over 50 documents and image formats including **DOCX**, **ODT** **XLS** -- Fully customizable navigation panel -- Open password protected documents -- Download documents -- Upload documents -- Print document - - -## How to run - -You can run this sample by one of following methods - -#### Build from source - -Download [source code](https://github.com/groupdocs-Editor/GroupDocs.Editor-for-.NET-MVC/archive/master.zip) from github or clone this repository. - -```bash -git clone https://github.com/groupdocs-Editor/GroupDocs.Editor-for-.NET-MVC -``` - -Open solution in the VisualStudio. -Update common parameters in `web.config` and example related properties in the `configuration.yml` to meet your requirements. - -Open http://localhost:8080/Editor in your favorite browser - -#### Docker image -Use [docker](https://www.docker.com/) image. - -```bash -mkdir DocumentSamples -mkdir Licenses -docker run -p 8080:8080 --env application.hostAddress=localhost -v `pwd`/DocumentSamples:/home/groupdocs/app/DocumentSamples -v `pwd`/Licenses:/home/groupdocs/app/Licenses groupdocs/Editor -## Open http://localhost:8080/Editor in your favorite browser. -``` - -### Configuration -For all methods above you can adjust settings in `configuration.yml`. By default in this sample will lookup for license file in `./Licenses` folder, so you can simply put your license file in that folder or specify relative/absolute path by setting `licensePath` value in `configuration.yml`. - -#### Editor configuration options - -| Option | Type | Default value | Description | -| ---------------------- | ------- |:-----------------:|:-------------------------------------------------------------------------------------------------------------------------------------------- | -| **`filesDirectory`** | String | `DocumentSamples` | Files directory path. Indicates where uploaded and predefined files are stored. It can be absolute or relative path | -| **`fontsDirectory`** | String | | Path to custom fonts directory. | -| **`defaultDocument`** | String | | Absolute path to default document that will be loaded automatically. | -| **`createNewFile`** | String | | Enable / disable new document creation. | - -## License -The MIT License (MIT). - -Please have a look at the LICENSE.md for more details - -## GroupDocs Document Editor on other platforms/frameworks - -- JAVA DropWizard [Document Editor](https://github.com/groupdocs-Editor/GroupDocs.Editor-for-Java-Dropwizard) -- JAVA Spring boot [Document Editor](https://github.com/groupdocs-Editor/GroupDocs.Editor-for-Java-Spring) -- .NET WebForms [Document Editor](https://github.com/groupdocs-Editor/GroupDocs.Editor-for-.NET-WebForms) - -## Resources -- **Website:** [www.groupdocs.com](http://www.groupdocs.com) -- **Product Home:** [GroupDocs.Editor for .NET](https://products.groupdocs.com/Editor/net) -- **Product API References:** [GroupDocs.Editor for .NET API](https://apireference.groupdocs.com/net/Editor) -- **Download:** [Download GroupDocs.Editor for .NET](http://downloads.groupdocs.com/Editor/net) -- **Documentation:** [GroupDocs.Editor for .NET Documentation](https://docs.groupdocs.com/display/Editornet/Home) -- **Free Support Forum:** [GroupDocs.Editor for .NET Free Support Forum](https://forum.groupdocs.com/c/Editor) -- **Paid Support Helpdesk:** [GroupDocs.Editor for .NET Paid Support Helpdesk](https://helpdesk.groupdocs.com) -- **Blog:** [GroupDocs.Editor for .NET Blog](https://blog.groupdocs.com/category/groupdocs-Editor-product-family/) diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index 418632b..0000000 --- a/appveyor.yml +++ /dev/null @@ -1,5 +0,0 @@ -version: 1.0.{build} -before_build: -- cmd: nuget restore -build: - verbosity: minimal \ No newline at end of file diff --git a/src/AppDomainGenerator/DomainGenerator.cs b/src/AppDomainGenerator/DomainGenerator.cs deleted file mode 100644 index 56de5c3..0000000 --- a/src/AppDomainGenerator/DomainGenerator.cs +++ /dev/null @@ -1,82 +0,0 @@ -using System; -using System.IO; -using System.Reflection; - -namespace GroupDocs.Editor.MVC.AppDomainGenerator -{ - /// - /// DomainGenerator - /// - public class DomainGenerator - { - private readonly Products.Common.Config.GlobalConfiguration globalConfiguration; - private readonly Type CurrentType; - - /// - /// Constructor - /// - public DomainGenerator(string assemblyName, string className) - { - globalConfiguration = new Products.Common.Config.GlobalConfiguration(); - // Get assembly path - string assemblyPath = GetAssemblyPath(assemblyName); - // Initiate GroupDocs license class - CurrentType = this.CreateDomain(assemblyName + "Domain", assemblyPath, className); - } - - /// - /// Get assembly full path by its name - /// - /// string - /// - private static string GetAssemblyPath(string assemblyName) - { - string path = ""; - // Get path of the executable - string codeBase = Assembly.GetExecutingAssembly().CodeBase; - UriBuilder uri = new UriBuilder(codeBase); - string uriPath = Uri.UnescapeDataString(uri.Path); - // Get path of the assembly - path = Path.Combine(Path.GetDirectoryName(uriPath), assemblyName); - return path; - } - - /// - /// Create AppDomain for the assembly - /// - /// string - /// string - /// string - /// - private Type CreateDomain(string domainName, string assemblyPath, string className) - { - // Create domain - AppDomain dom = AppDomain.CreateDomain(domainName); - AssemblyName assemblyName = new AssemblyName { CodeBase = assemblyPath }; - // Load assembly into the domain - Assembly assembly = dom.Load(assemblyName); - // Initiate class from the loaded assembly - Type type = assembly.GetType(className); - return type; - } - - /// - /// Set GroupDocs.Editor license - /// - /// Type - public void SetEditorLicense() - { - // Initiate license class - var obj = (GroupDocs.Editor.License)Activator.CreateInstance(CurrentType); - // Set license - SetLicense(obj); - } - - private void SetLicense(dynamic obj) { - if (!String.IsNullOrEmpty(globalConfiguration.GetApplicationConfiguration().GetLicensePath())) - { - obj.SetLicense(globalConfiguration.GetApplicationConfiguration().GetLicensePath()); - } - } - } -} \ No newline at end of file diff --git a/src/App_Start/FilterConfig.cs b/src/App_Start/FilterConfig.cs deleted file mode 100644 index fdaedf7..0000000 --- a/src/App_Start/FilterConfig.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System.Web.Mvc; - -namespace GroupDocs.Editor.MVC -{ - public class FilterConfig - { - public static void RegisterGlobalFilters(GlobalFilterCollection filters) - { - filters.Add(new HandleErrorAttribute()); - } - } -} diff --git a/src/App_Start/RouteConfig.cs b/src/App_Start/RouteConfig.cs deleted file mode 100644 index 6c5245c..0000000 --- a/src/App_Start/RouteConfig.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.Web.Mvc; -using System.Web.Routing; - -namespace GroupDocs.Editor.MVC -{ - public class RouteConfig - { - public static void RegisterRoutes(RouteCollection routes) - { - routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); - - routes.MapRoute( - name: "Default", - url: "{controller}/{action}/{id}", - defaults: new { controller = "Editor", action = "Index", id = UrlParameter.Optional } - ); - } - } -} diff --git a/src/App_Start/WebApiConfig.cs b/src/App_Start/WebApiConfig.cs deleted file mode 100644 index 88020e4..0000000 --- a/src/App_Start/WebApiConfig.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System.Web.Http; -using System.Web.Http.Cors; - -namespace GroupDocs.Editor.MVC -{ - public static class WebApiConfig - { - public static void Register(HttpConfiguration config) - { - // enable CORS - config.EnableCors(); - - // Web API routes - config.MapHttpAttributeRoutes(); - } - } -} diff --git a/src/Global.asax b/src/Global.asax deleted file mode 100644 index 6872676..0000000 --- a/src/Global.asax +++ /dev/null @@ -1 +0,0 @@ -<%@ Application Codebehind="Global.asax.cs" Inherits="GroupDocs.Editor.MVC.WebApiApplication" Language="C#" %> diff --git a/src/Global.asax.cs b/src/Global.asax.cs deleted file mode 100644 index a60de11..0000000 --- a/src/Global.asax.cs +++ /dev/null @@ -1,25 +0,0 @@ -using GroupDocs.Editor.MVC.AppDomainGenerator; -using System.Web.Http; -using System.Web.Mvc; -using System.Web.Routing; - -namespace GroupDocs.Editor.MVC -{ - public class WebApiApplication : System.Web.HttpApplication - { - protected void Application_Start() - { - // Fix required to use several GroupDocs products in one project. - // Set GroupDocs products assemblies names - string editorAssemblyName = "GroupDocs.Editor.dll"; - // set GroupDocs.Editor license - DomainGenerator editorDomainGenerator = new DomainGenerator(editorAssemblyName, "GroupDocs.Editor.License"); - editorDomainGenerator.SetEditorLicense(); - - AreaRegistration.RegisterAllAreas(); - GlobalConfiguration.Configure(WebApiConfig.Register); - FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); - RouteConfig.RegisterRoutes(RouteTable.Routes); - } - } -} \ No newline at end of file diff --git a/src/GroupDocs.Editor.MVC.csproj b/src/GroupDocs.Editor.MVC.csproj deleted file mode 100644 index 461e986..0000000 --- a/src/GroupDocs.Editor.MVC.csproj +++ /dev/null @@ -1,294 +0,0 @@ - - - - - - - Debug - AnyCPU - - - 2.0 - {A33CA8B0-A193-40A3-A86A-90FF444EE878} - {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} - Library - Properties - GroupDocs.Editor.MVC - GroupDocs.Editor.MVC - v4.5 - false - true - - - - - - - - - - - true - full - false - bin\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\ - TRACE - prompt - 4 - - - - ..\packages\Castle.Core.4.3.1\lib\net45\Castle.Core.dll - - - ..\packages\GroupDocs.Editor.19.5.0\lib\GroupDocs.Editor.dll - - - ..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\lib\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll - True - - - True - - - ..\packages\Moq.4.10.1\lib\net45\Moq.dll - - - ..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll - - - True - - - False - True - - - True - - - True - - - True - - - True - - - ..\packages\Microsoft.AspNet.WebApi.Client.5.2.5\lib\net45\System.Net.Http.Formatting.dll - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.0\lib\netstandard1.0\System.Runtime.CompilerServices.Unsafe.dll - - - ..\packages\System.Threading.Tasks.Extensions.4.5.1\lib\portable-net45+win8+wp8+wpa81\System.Threading.Tasks.Extensions.dll - - - ..\packages\System.ValueTuple.4.3.0\lib\netstandard1.0\System.ValueTuple.dll - - - ..\packages\Microsoft.AspNet.Cors.5.2.7\lib\net45\System.Web.Cors.dll - - - True - - - True - - - True - - - True - - - True - - - ..\packages\Microsoft.AspNet.WebApi.Core.5.2.5\lib\net45\System.Web.Http.dll - - - ..\packages\Microsoft.AspNet.WebApi.Cors.5.2.5\lib\net45\System.Web.Http.Cors.dll - True - - - ..\packages\Microsoft.AspNet.WebApi.WebHost.5.2.3\lib\net45\System.Web.Http.WebHost.dll - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - ..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll - - - True - - - True - - - True - ..\packages\Microsoft.AspNet.WebPages.3.2.3\lib\net45\System.Web.Helpers.dll - - - True - ..\packages\Microsoft.AspNet.Mvc.5.2.3\lib\net45\System.Web.Mvc.dll - - - ..\packages\Microsoft.AspNet.Web.Optimization.1.1.3\lib\net40\System.Web.Optimization.dll - - - True - ..\packages\Microsoft.AspNet.Razor.3.2.3\lib\net45\System.Web.Razor.dll - - - True - ..\packages\Microsoft.AspNet.WebPages.3.2.3\lib\net45\System.Web.WebPages.dll - - - True - ..\packages\Microsoft.AspNet.WebPages.3.2.3\lib\net45\System.Web.WebPages.Deployment.dll - - - True - ..\packages\Microsoft.AspNet.WebPages.3.2.3\lib\net45\System.Web.WebPages.Razor.dll - - - True - ..\packages\WebGrease.1.5.2\lib\WebGrease.dll - - - True - ..\packages\Antlr.3.4.1.9004\lib\Antlr3.Runtime.dll - - - ..\packages\YamlDotNet.5.2.1\lib\net45\YamlDotNet.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - Global.asax - - - - - - - - - - - Designer - - - Web.config - - - Web.config - - - - - - - - - - - - - - - 10.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - - - - - - - - - - - - True - True - 50289 - / - http://localhost:8080/editor - False - False - - - False - - - - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Properties/AssemblyInfo.cs b/src/Properties/AssemblyInfo.cs deleted file mode 100644 index fea60f6..0000000 --- a/src/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("GroupDocs.Editor MVC")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Aspose Pty Ltd")] -[assembly: AssemblyProduct("GroupDocs.Editor MVC")] -[assembly: AssemblyCopyright("2001-2018 Aspose Pty Ltd")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(true)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("cb1d0987-217d-43e0-afff-fae210c23d96")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Revision and Build Numbers -// by using the '*' as shown below: -[assembly: AssemblyVersion("0.1.0.0")] -[assembly: AssemblyFileVersion("0.1.0.0")] diff --git a/src/Views/Editor/Index.cshtml b/src/Views/Editor/Index.cshtml deleted file mode 100644 index a3f860a..0000000 --- a/src/Views/Editor/Index.cshtml +++ /dev/null @@ -1,24 +0,0 @@ -@{ - GroupDocs.Editor.MVC.Products.Common.Config.GlobalConfiguration config = new GroupDocs.Editor.MVC.Products.Common.Config.GlobalConfiguration(); -} - - - - - Editor for .NET MVC - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Views/Web.config b/src/Views/Web.config deleted file mode 100644 index 54b83f7..0000000 --- a/src/Views/Web.config +++ /dev/null @@ -1,43 +0,0 @@ - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/Web.config b/src/Web.config deleted file mode 100644 index 22ff074..0000000 --- a/src/Web.config +++ /dev/null @@ -1,117 +0,0 @@ - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/client/apps/editor/src/assets/.gitkeep b/src/client/apps/editor/src/assets/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/src/client/libs/.gitkeep b/src/client/libs/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/src/client/tools/schematics/.gitkeep b/src/client/tools/schematics/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/src/package.json b/src/package.json deleted file mode 100644 index dde2837..0000000 --- a/src/package.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "groupdocs.editor-for-net-mvc", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/groupdocs-editor/GroupDocs.Editor-for-NET-MVC.git" - }, - "author": "", - "license": "MIT", - "bugs": { - "url": "https://github.com/groupdocs-editor/GroupDocs.Editor-for-NET-MVC/issues" - }, - "homepage": "https://github.com/groupdocs-editor/GroupDocs.Editor-for-NET-MVC#readme" -} diff --git a/src/packages.config b/src/packages.config deleted file mode 100644 index a90a80d..0000000 --- a/src/packages.config +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file From 191b4f89c7882863ec1d017677719af4bfc8d5a0 Mon Sep 17 00:00:00 2001 From: Egor Date: Thu, 12 Mar 2020 19:01:51 +0300 Subject: [PATCH 2/3] Changes to the ability to run on Linux. --- .gitignore | 6 +-- .vscode/launch.json | 37 +++++++++++++++++++ .../GroupDocs.Editor.MVC.csproj | 4 +- GroupDocs.Editor.MVC/Program.cs | 1 + GroupDocs.Editor.MVC/Startup.cs | 6 ++- GroupDocs.Editor.MVC/client/.npmrc | 1 + GroupDocs.Editor.MVC/client/package.json | 3 +- 7 files changed, 51 insertions(+), 7 deletions(-) create mode 100644 .vscode/launch.json create mode 100644 GroupDocs.Editor.MVC/client/.npmrc diff --git a/.gitignore b/.gitignore index 6a1a947..7cdd9f4 100644 --- a/.gitignore +++ b/.gitignore @@ -30,11 +30,11 @@ msbuild.wrn package-lock.json # Resources -Resources/* -!Resources/.gitkeep +[Rr]esources/ +![Rr]esources/.gitkeep # Licenses -Licenses +Licenses/ !Licenses/.gitkeep # Document samples diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..b5d743a --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,37 @@ +{ + // Use IntelliSense to find out which attributes exist for C# debugging + // Use hover for the description of the existing attributes + // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md + "version": "0.2.0", + "configurations": [ + { + "name": ".NET Core Launch (web)", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "build", + // If you have changed target frameworks, make sure to update the program path. + "program": "${workspaceFolder}/GroupDocs.Editor.MVC/bin/Debug/netcoreapp3.1/GroupDocs.Editor.MVC.dll", + "args": [], + "cwd": "${workspaceFolder}/GroupDocs.Editor.MVC", + "stopAtEntry": false, + // Enable launching a web browser when ASP.NET Core starts. For more information: https://aka.ms/VSCode-CS-LaunchJson-WebBrowser + "serverReadyAction": { + "action": "openExternally", + "pattern": "^\\s*Now listening on:\\s+(https?://\\S+)", + "uriFormat": "%s/editor" + }, + "env": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "sourceFileMap": { + "/Views": "${workspaceFolder}/Views" + } + }, + { + "name": ".NET Core Attach", + "type": "coreclr", + "request": "attach", + "processId": "${command:pickProcess}" + } + ] + } \ No newline at end of file diff --git a/GroupDocs.Editor.MVC/GroupDocs.Editor.MVC.csproj b/GroupDocs.Editor.MVC/GroupDocs.Editor.MVC.csproj index f68615c..56c1a8b 100644 --- a/GroupDocs.Editor.MVC/GroupDocs.Editor.MVC.csproj +++ b/GroupDocs.Editor.MVC/GroupDocs.Editor.MVC.csproj @@ -29,8 +29,10 @@ + + - + diff --git a/GroupDocs.Editor.MVC/Program.cs b/GroupDocs.Editor.MVC/Program.cs index c9584f4..73f80e8 100644 --- a/GroupDocs.Editor.MVC/Program.cs +++ b/GroupDocs.Editor.MVC/Program.cs @@ -21,6 +21,7 @@ public static IHostBuilder CreateHostBuilder(string[] args) => .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); + webBuilder.UseUrls("http://localhost:8080"); }); } } diff --git a/GroupDocs.Editor.MVC/Startup.cs b/GroupDocs.Editor.MVC/Startup.cs index 2a93c49..63ee488 100644 --- a/GroupDocs.Editor.MVC/Startup.cs +++ b/GroupDocs.Editor.MVC/Startup.cs @@ -46,6 +46,8 @@ public void ConfigureServices(IServiceCollection services) // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { + app.UsePathBase("/editor"); + if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); @@ -62,8 +64,8 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env) app.UseStaticFiles(new StaticFileOptions { FileProvider = new PhysicalFileProvider( - Path.Combine(Directory.GetCurrentDirectory(), "Resources")), - RequestPath = "/Resources" + Path.Combine(Directory.GetCurrentDirectory(), "resources")), + RequestPath = "/resources" }); app.UseRouting(); diff --git a/GroupDocs.Editor.MVC/client/.npmrc b/GroupDocs.Editor.MVC/client/.npmrc new file mode 100644 index 0000000..a21347f --- /dev/null +++ b/GroupDocs.Editor.MVC/client/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/GroupDocs.Editor.MVC/client/package.json b/GroupDocs.Editor.MVC/client/package.json index 4872d08..95709dd 100644 --- a/GroupDocs.Editor.MVC/client/package.json +++ b/GroupDocs.Editor.MVC/client/package.json @@ -6,7 +6,8 @@ "ng": "ng", "nx": "nx", "start": "ng serve", - "build": "..\\..\\packages\\Node-Kit\\11.1.0.1\\node\\win\\node.exe .\\node_modules\\@angular\\cli\\bin\\ng build", + "build-linux": "../../packages/node-kit/11.1.0.1/node/linux/node ./node_modules/@angular/cli/bin/ng build", + "build-win": "..\\..\\packages\\Node-Kit\\11.1.0.1\\node\\win\\node.exe .\\node_modules\\@angular\\cli\\bin\\ng build", "test": "ng test", "lint": "nx workspace-lint && ng lint", "e2e": "ng e2e", From ca8076d859de667436495aff920d86c83971c5f2 Mon Sep 17 00:00:00 2001 From: Alex Bobkov Date: Tue, 17 Mar 2020 15:42:50 +0300 Subject: [PATCH 3/3] Added OSX condition & config --- GroupDocs.Editor.MVC/GroupDocs.Editor.MVC.csproj | 14 ++++++-------- GroupDocs.Editor.MVC/client/package.json | 1 + 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/GroupDocs.Editor.MVC/GroupDocs.Editor.MVC.csproj b/GroupDocs.Editor.MVC/GroupDocs.Editor.MVC.csproj index 56c1a8b..c5d61e2 100644 --- a/GroupDocs.Editor.MVC/GroupDocs.Editor.MVC.csproj +++ b/GroupDocs.Editor.MVC/GroupDocs.Editor.MVC.csproj @@ -23,16 +23,14 @@ - - - - - - - - + + + + + + diff --git a/GroupDocs.Editor.MVC/client/package.json b/GroupDocs.Editor.MVC/client/package.json index 95709dd..766dcd1 100644 --- a/GroupDocs.Editor.MVC/client/package.json +++ b/GroupDocs.Editor.MVC/client/package.json @@ -8,6 +8,7 @@ "start": "ng serve", "build-linux": "../../packages/node-kit/11.1.0.1/node/linux/node ./node_modules/@angular/cli/bin/ng build", "build-win": "..\\..\\packages\\Node-Kit\\11.1.0.1\\node\\win\\node.exe .\\node_modules\\@angular\\cli\\bin\\ng build", + "build-osx": "../../packages/node-kit/11.1.0.1/node/osx/node ./node_modules/@angular/cli/bin/ng build", "test": "ng test", "lint": "nx workspace-lint && ng lint", "e2e": "ng e2e",