示例#1
0
 public DocumentationController(IRepositoryWrapper repoWrapper, UserManager<User> userManager, IAnnualReportVMInitializer annualReportVMCreator,
     IDecisionVMIitializer decisionVMCreator, IPDFService PDFService, IHostingEnvironment appEnvironment, IViewAnnualReportsVMInitializer viewAnnualReportsVMInitializer,
     ICityAccessManager cityAccessManager, IDirectoryManager directoryManager, IFileManager fileManager, IFileStreamManager fileStreamManager,
     ILogger<DocumentationController> logger)
 {
     _repoWrapper = repoWrapper;
     _annualReportVMCreator = annualReportVMCreator;
     _userManager = userManager;
     _PDFService = PDFService;
     _decisionVMCreator = decisionVMCreator;
     _appEnvironment = appEnvironment;
     _viewAnnualReportsVMInitializer = viewAnnualReportsVMInitializer;
     _directoryManager = directoryManager;
     _fileManager = fileManager;
     _fileStreamManager = fileStreamManager;
     _cityAccessManager = cityAccessManager;
     _logger = logger;
 }
示例#2
0
        public FileFinder(String projectPath, IFileFinderPermissions permissions, FileFinder next = null, IFileStreamManager fileStreamManager = null, IDraftManager draftManager = null, String projectFilePath = "edity/edity.json")
        {
            this.fileStreamManager = fileStreamManager;
            if (this.fileStreamManager == null)
            {
                this.fileStreamManager = new FileStreamManager();
            }

            this.draftManager = draftManager;
            if (this.draftManager == null)
            {
                this.draftManager = new NoDrafts();
            }

            project = new Lazy <EdityProject>(loadProject);

            this.projectPath     = Path.GetFullPath(projectPath);
            this.projectFilePath = projectFilePath;
            this.next            = next;
            this.permissions     = permissions;
        }
        /// <exclude />
        public static void SubscribeOnChanged(this IFile file, OnFileChangedDelegate handler)
        {
            IFileStreamManager manager = FileStreamManagerLocator.GetFileStreamManager(file.GetType());

            manager.SubscribeOnFileChanged(file, handler);
        }
        /// <exclude />
        public static Stream GetNewWriteStream(this IFile file)
        {
            IFileStreamManager manager = FileStreamManagerLocator.GetFileStreamManager(file.GetType());

            return(manager.GetNewWriteStream(file));
        }
示例#5
0
        /// <summary>
        /// Add a default file finder that has a content folder and a backup location. The
        /// edity folder in the content folder is not considered content.
        /// This will only do something if you have not previously registered a IFileFinder service.
        /// </summary>
        /// <param name="services">The service collection.</param>
        /// <returns></returns>
        public static IServiceCollection AddDefaultFileFinder(this IServiceCollection services)
        {
            services.TryAddScoped <IFileFinder>(s =>
            {
                var userInfo               = s.GetRequiredService <IUserInfo>();
                var projectFinder          = s.GetRequiredService <ProjectFinder>();
                var phaseDetector          = s.GetRequiredService <IPhaseDetector>();
                var compileRequestDetector = s.GetRequiredService <ICompileRequestDetector>();

                String projectFolder;
                if (compileRequestDetector.IsCompileRequest)
                {
                    projectFolder = projectFinder.PublishedProjectPath;
                }
                else
                {
                    projectFolder = projectFinder.GetUserProjectPath(userInfo.UniqueUserName);
                }

                //Any folders that can write should use these permissions, they will prevent the writing of .draft files.
                var sharedWritePermissions = new DraftFilePermissions(s.GetRequiredService <IHttpContextAccessor>());

                //Folder blacklist
                var edityFolderList = new PathList();
                edityFolderList.AddDirectory("edity");

                //Editor core location
                var backupPermissions = new DefaultFileFinderPermissions();
                backupPermissions.WritePermission.Permit          = false;
                backupPermissions.TreatAsContentPermission.Permit = false;
                var editorCoreFinder = new FileFinder(projectFinder.EdityCorePath, backupPermissions);

                //Site specific files, not editable
                var projectBackupPermissions = new DefaultFileFinderPermissions();
                projectBackupPermissions.WritePermission.Permit = false;
                projectBackupPermissions.TreatAsContentPermission.Permissions = new PathBlacklist(edityFolderList);
                var siteFileFinder = new FileFinder(projectFinder.SitePath, projectBackupPermissions, editorCoreFinder);

                //Project location
                var contentFolderPermissions = new DefaultFileFinderPermissions();
                contentFolderPermissions.TreatAsContentPermission.Permissions = new PathBlacklist(edityFolderList);
                contentFolderPermissions.WritePermission.Permissions          = sharedWritePermissions;

                //Always use the git draft manager for the project content, this way you can actually create drafts.
                var draftManager = new GitDraftManager(new PathBlacklist(edityFolderList));
                IFileStreamManager streamManager = null;

                if (phaseDetector.Phase == Phases.Draft || compileRequestDetector.IsCompileRequest)
                {
                    //If the request is in draft mode, change the content to only files with draft files and change the file stream
                    //manager to read published versions out of git
                    var oldPermissions = contentFolderPermissions.TreatAsContentPermission.Permissions;
                    contentFolderPermissions.TreatAsContentPermission.Permissions = new MustHaveGitDraftFile(draftManager, oldPermissions);
                    streamManager = new GitDraftFileStreamManager(draftManager);
                }

                return(new FileFinder(projectFolder, contentFolderPermissions, siteFileFinder, streamManager, draftManager));
            });

            return(services);
        }