コード例 #1
0
ファイル: FileManager.cs プロジェクト: Treynessen/StoreCMS
        public IActionResult FileManager(string path)
        {
            string fullPath         = string.Empty;
            IHostingEnvironment env = HttpContext.RequestServices.GetService <IHostingEnvironment>();

            if (string.IsNullOrEmpty(path))
            {
                fullPath = env.GetStorageFolderFullPath();
            }
            else
            {
                Regex regex = new Regex(@"^((\w|-|_)+)(>(\w|-|_)+)*$");
                if (!regex.IsMatch(path))
                {
                    return(Redirect($"{HttpContext.Request.Path}?pageID={(int)AdminPanelPages.FileManager}"));
                }
                fullPath = env.GetStorageFolderFullPath() + path.Replace('>', '/').Insert(path.Length, "/");
            }
            // Проверяем можно ли зайти в текущую директорию
            if (!FileManagerManagementFunctions.HasAccessToFolder(fullPath, env))
            {
                return(Redirect($"{HttpContext.Request.Path}?pageID={(int)AdminPanelPages.FileManager}"));
            }
            // Получаем файлы и папки в текущей директории
            FileManagerObject[] fileManagerObjects = FileManagerManagementFunctions.GetFilesAndFolders(fullPath, env, out bool pathExists);
            if (!pathExists)
            {
                return(Redirect($"{HttpContext.Request.Path}?pageID={(int)AdminPanelPages.FileManager}"));
            }
            HttpContext.Items["pageID"] = AdminPanelPages.FileManager;

            // Получаем навигационную цепочку
            LinkedList <KeyValuePair <string, string> > breadcrumbs = new LinkedList <KeyValuePair <string, string> >();
            // Key - название; Value - путь
            StringBuilder pathBuilder = new StringBuilder();

            breadcrumbs.AddLast(new KeyValuePair <string, string>("/", string.Empty));
            if (!string.IsNullOrEmpty(path))
            {
                string[] subdirectories = path.Split('>');
                for (int i = 0; i < subdirectories.Length; ++i)
                {
                    pathBuilder.Clear();
                    for (int j = 0; j <= i; ++j)
                    {
                        pathBuilder.Append($"{subdirectories[j]}");
                        if (j != i)
                        {
                            pathBuilder.Append(">");
                        }
                    }
                    breadcrumbs.AddLast(new KeyValuePair <string, string>(subdirectories[i], pathBuilder.ToString()));
                }
            }
            HttpContext.Items["CurrentDirectoryBreadcrumbs"] = breadcrumbs;

            return(View("FileManager/Index", fileManagerObjects));
        }
コード例 #2
0
        public IActionResult EditScriptFile(string path)
        {
            Regex regex = new Regex(@"^((\w|-|_)+)(>(\w|-|_)+)*\.js$");

            if (!regex.IsMatch(path))
            {
                return(Redirect($"{HttpContext.Request.Path}?pageID={(int)AdminPanelPages.FileManager}"));
            }
            HttpContext.Items["PathToFile"] = path;
            IHostingEnvironment env = HttpContext.RequestServices.GetService <IHostingEnvironment>();

            HttpContext.Items["pageID"] = AdminPanelPages.EditScript;
            string scriptFileFullName = path.Substring(path.LastIndexOf('>') + 1);

            path = path.Substring(0, path.Length - scriptFileFullName.Length);
            if (!string.IsNullOrEmpty(path))
            {
                path = path.Replace('>', '/');
                if (!path[path.Length - 1].Equals('/'))
                {
                    path = path.Insert(path.Length, "/");
                }
            }
            path = $"{env.GetStorageFolderFullPath()}{path}";
            string pathToFile = path + scriptFileFullName;

            if (!System.IO.File.Exists(pathToFile) || !FileManagerManagementFunctions.HasAccessToFolder(path, env))
            {
                return(Redirect($"{HttpContext.Request.Path}?pageID={(int)AdminPanelPages.FileManager}"));
            }
            string     scriptFileContent = OtherFunctions.GetFileContent(pathToFile);
            StyleModel model             = new StyleModel {
                FileName = scriptFileFullName.Substring(0, scriptFileFullName.Length - 3), FileContent = scriptFileContent
            };

            return(View("FileManager/EditScriptFile", model));
        }