Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        public IActionResult AdminPanel(AdminPanelPages pageID, int?itemID, string path, IFormFile uploadedFile)
        {
            AccessLevelConfiguration accessLevelConfiguration = HttpContext.RequestServices.GetService <AccessLevelConfiguration>();

            HttpContext.Items["AccessLevelConfiguration"] = accessLevelConfiguration;
            User user = SecurityFunctions.CheckCookies(db, HttpContext);

            if (!SecurityFunctions.HasAccessTo(pageID, user, HttpContext))
            {
                return(RedirectToAction(nameof(AdminPanel)));
            }

            HttpContext.Items["User"]            = user;
            HttpContext.Items["LogLocalization"] = localization;

            switch (pageID)
            {
            case AdminPanelPages.AddProductImage:
                ImagesManagementFunctions.UploadProductImageToServer(db, uploadedFile, itemID, HttpContext, out bool successfullyUploadedImage);
                if (successfullyUploadedImage)
                {
                    return(StatusCode(200));
                }
                else
                {
                    return(StatusCode(415));
                }

            case AdminPanelPages.UploadFile:
                FileManagerManagementFunctions.UploadFileToServer(db, path, uploadedFile, HttpContext, out bool successfullyUploadedFile);
                if (successfullyUploadedFile)
                {
                    return(StatusCode(200));
                }
                else
                {
                    return(StatusCode(415));
                }

            default:
                return(RedirectToAction(nameof(AdminPanel)));
            }
        }
Ejemplo n.º 3
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));
        }
Ejemplo n.º 4
0
        public IActionResult AdminPanel(AdminPanelPages pageID, int?itemID, int?imageID, string path)
        {
            AccessLevelConfiguration accessLevelConfiguration = HttpContext.RequestServices.GetService <AccessLevelConfiguration>();

            HttpContext.Items["AccessLevelConfiguration"] = accessLevelConfiguration;
            User user = SecurityFunctions.CheckCookies(db, HttpContext);

            if (pageID == AdminPanelPages.Exit)
            {
                DatabaseInteraction.Exit(db, user, HttpContext, out int exitStatusCode);
                return(StatusCode(exitStatusCode));
            }
            if (!SecurityFunctions.HasAccessTo(pageID, user, HttpContext))
            {
                return(RedirectToAction(nameof(AdminPanel)));
            }

            HttpContext.Items["User"]            = user;
            HttpContext.Items["LogLocalization"] = localization;

            switch (pageID)
            {
            case AdminPanelPages.DeletePage:
                DatabaseInteraction.DeletePage(db, PageType.Usual, itemID, HttpContext, out bool pageDeleted);
                if (pageDeleted)
                {
                    return(StatusCode(200));
                }
                else
                {
                    return(StatusCode(404));
                }

            case AdminPanelPages.DeleteCategory:
                DatabaseInteraction.DeletePage(db, PageType.Category, itemID, HttpContext, out bool categoryDeleted);
                if (categoryDeleted)
                {
                    return(StatusCode(200));
                }
                else
                {
                    return(StatusCode(404));
                }

            case AdminPanelPages.DeleteProduct:
                DatabaseInteraction.DeleteProduct(db, itemID, HttpContext, out bool productDeleted);
                if (productDeleted)
                {
                    return(StatusCode(200));
                }
                else
                {
                    return(StatusCode(404));
                }

            case AdminPanelPages.DeleteProductImage:
                ImagesManagementFunctions.DeleteProductImage(db, itemID, imageID, HttpContext, out bool productImageDeleted);
                if (productImageDeleted)
                {
                    return(StatusCode(200));
                }
                else
                {
                    return(StatusCode(404));
                }

            case AdminPanelPages.DeleteRedirection:
                DatabaseInteraction.DeleteRedirection(db, itemID, HttpContext, out bool redirectionDeleted);
                if (redirectionDeleted)
                {
                    return(StatusCode(200));
                }
                else
                {
                    return(StatusCode(404));
                }

            case AdminPanelPages.DeleteTemplate:
                DatabaseInteraction.DeleteTemplate(db, itemID, HttpContext, out bool templateDeleted);
                if (templateDeleted)
                {
                    return(StatusCode(200));
                }
                else
                {
                    return(StatusCode(404));
                }

            case AdminPanelPages.DeleteChunk:
                DatabaseInteraction.DeleteChunk(db, itemID, HttpContext, out bool chunkDeleted);
                if (chunkDeleted)
                {
                    return(StatusCode(200));
                }
                else
                {
                    return(StatusCode(404));
                }

            case AdminPanelPages.DeleteFileOrFolder:
                FileManagerManagementFunctions.DeleteFileOrFolder(db, path, HttpContext, out string redirectPath);
                if (redirectPath == null)
                {
                    return(StatusCode(404));
                }
                else
                {
                    string redirectUrl = $"{HttpContext.Request.Scheme}://{HttpContext.Request.Host}{HttpContext.Request.Path}?pageID={(int)AdminPanelPages.FileManager}&path={redirectPath}";
                    HttpContext.Response.Headers.Add("location", redirectUrl);
                    return(StatusCode(200));
                }

            case AdminPanelPages.DeleteUser:
                DatabaseInteraction.DeleteUser(db, itemID, HttpContext, out int userDeletionStatusCode);
                return(StatusCode(userDeletionStatusCode));

            case AdminPanelPages.DeleteUserType:
                DatabaseInteraction.DeleteUserType(db, itemID, HttpContext, out bool userTypeDeleted);
                if (userTypeDeleted)
                {
                    return(StatusCode(200));
                }
                else
                {
                    return(StatusCode(404));
                }

            case AdminPanelPages.DeleteSynonymForString:
                DatabaseInteraction.DeleteSynonymForString(db, itemID, HttpContext, out bool synonymForStringDeleted);
                if (synonymForStringDeleted)
                {
                    return(StatusCode(200));
                }
                else
                {
                    return(StatusCode(404));
                }

            default:
                return(RedirectToAction(nameof(AdminPanel)));
            }
        }
        public static void UploadProductImageToServer(CMSDatabase db, IFormFile file, int?itemID, HttpContext context, out bool successfullyUploaded)
        {
            successfullyUploaded = true;
            if (!itemID.HasValue || file == null)
            {
                successfullyUploaded = false;
                return;
            }
            ProductPage product = db.ProductPages.AsNoTracking().FirstOrDefault(pp => pp.ID == itemID);

            if (product == null)
            {
                successfullyUploaded = false;
                return;
            }
            IHostingEnvironment env = context.RequestServices.GetRequiredService <IHostingEnvironment>();
            string imagesPath       = $"{env.GetProductsImagesFolderFullPath()}{product.ID}/";

            Directory.CreateDirectory(imagesPath);
            string fullImageName = FileManagerManagementFunctions.GetUniqueFileOrFolderName(imagesPath, product.Alias, ".jpg");
            string pathToFile    = $"{imagesPath}{fullImageName}";

            using (Stream stream = file.OpenReadStream())
            {
                try
                {
                    using (Image <Rgba32> source = SixLabors.ImageSharp.Image.Load(stream))
                    {
                        // Если остались зависимости от предыдущего изображения, то удаляем их
                        DeleteDependentImages(imagesPath, fullImageName);
                        // Добавляем или изменяем информацию в БД
                        string shortPathToImage       = pathToFile.Substring(env.GetStorageFolderFullPath().Length).Insert(0, "/");
                        Database.Entities.Image image = db.Images.FirstOrDefault(img => img.ShortPathHash == OtherFunctions.GetHashFromString(shortPathToImage) &&
                                                                                 img.ShortPath.Equals(shortPathToImage, StringComparison.Ordinal));
                        if (image == null)
                        {
                            image = new Database.Entities.Image
                            {
                                ShortPath     = shortPathToImage,
                                ShortPathHash = OtherFunctions.GetHashFromString(shortPathToImage),
                                FullName      = shortPathToImage.Substring(shortPathToImage.LastIndexOf('/') + 1),
                                Width         = (uint)source.Width,
                                Height        = (uint)source.Height
                            };
                            db.Images.Add(image);
                        }
                        else // Если вдруг каким-то образом информация об изображении не была удалена из БД
                        {
                            image.Width  = (uint)source.Width;
                            image.Height = (uint)source.Height;
                        }
                        db.SaveChanges();
                        source.Save(pathToFile);
                        LogManagementFunctions.AddAdminPanelLog(
                            db: db,
                            context: context,
                            info: $"{product.PageName} (ID-{product.ID.ToString()}): {(context.Items["LogLocalization"] as IAdminPanelLogLocalization)?.ProductImageUploaded}"
                            );
                    }
                }
                catch (NotSupportedException) { successfullyUploaded = false; }
            }
        }
Ejemplo n.º 6
0
        public IActionResult AdminPanel(Model model, LoginFormModel loginFormModel)
        {
            HttpContext.Items["LogLocalization"] = localization;
            User user = null;

            if (model.PageId == AdminPanelPages.LoginForm)
            {
                if (SecurityFunctions.IsValidLoginFormData(db, loginFormModel, HttpContext, out user))
                {
                    DatabaseInteraction.AddConnectedUser(db, user, HttpContext);
                    return(StatusCode(200));
                }
                else
                {
                    return(StatusCode(401));
                }
            }

            AccessLevelConfiguration accessLevelConfiguration = HttpContext.RequestServices.GetService <AccessLevelConfiguration>();

            HttpContext.Items["AccessLevelConfiguration"] = accessLevelConfiguration;
            user = SecurityFunctions.CheckCookies(db, HttpContext);
            if (!SecurityFunctions.HasAccessTo(model.PageId, user, HttpContext))
            {
                return(RedirectToAction(nameof(AdminPanel)));
            }

            HttpContext.Items["User"] = user;

            switch (model.PageId)
            {
            case AdminPanelPages.AddPage:
                model.PageModel.PageType = PagesManagement.PageType.Usual;
                DatabaseInteraction.AddPage(db, model.PageModel, HttpContext, out bool pageAdded);
                if (pageAdded)
                {
                    string createdPageUrl = $"{HttpContext.Request.Scheme}://{HttpContext.Request.Host}{HttpContext.Request.Path}?pageID={(int)AdminPanelPages.EditPage}&itemID={model.PageModel.ID}";
                    HttpContext.Response.Headers.Add("location", createdPageUrl);
                    return(StatusCode(201));
                }
                else
                {
                    return(StatusCode(422));
                }

            case AdminPanelPages.EditPage:
                model.PageType = PagesManagement.PageType.Usual;
                DatabaseInteraction.EditPage(db, model, HttpContext, out bool pageEdited);
                if (pageEdited)
                {
                    return(StatusCode(200));
                }
                else
                {
                    return(StatusCode(422));
                }

            case AdminPanelPages.AddCategory:
                model.PageModel.PageType = PagesManagement.PageType.Category;
                DatabaseInteraction.AddPage(db, model.PageModel, HttpContext, out bool categoryAdded);
                if (categoryAdded)
                {
                    string createdCategoryUrl = $"{HttpContext.Request.Scheme}://{HttpContext.Request.Host}{HttpContext.Request.Path}?pageID={(int)AdminPanelPages.EditCategory}&itemID={model.PageModel.ID}";
                    HttpContext.Response.Headers.Add("location", createdCategoryUrl);
                    return(StatusCode(201));
                }
                else
                {
                    return(StatusCode(422));
                }

            case AdminPanelPages.EditCategory:
                model.PageType = PagesManagement.PageType.Category;
                DatabaseInteraction.EditPage(db, model, HttpContext, out bool categoryEdited);
                if (categoryEdited)
                {
                    return(StatusCode(200));
                }
                else
                {
                    return(StatusCode(422));
                }

            case AdminPanelPages.AddProduct:
                DatabaseInteraction.AddProduct(db, model.PageModel, model.itemID, HttpContext, out bool productAdded);
                if (productAdded)
                {
                    string createdProductUrl = $"{HttpContext.Request.Scheme}://{HttpContext.Request.Host}{HttpContext.Request.Path}?pageID={(int)AdminPanelPages.EditProduct}&itemID={model.PageModel.ID}";
                    HttpContext.Response.Headers.Add("location", createdProductUrl);
                    return(StatusCode(201));
                }
                else
                {
                    return(StatusCode(422));
                }

            case AdminPanelPages.EditProduct:
                DatabaseInteraction.EditProduct(db, model.PageModel, model.itemID, HttpContext, out bool productEdited);
                if (productEdited)
                {
                    return(StatusCode(200));
                }
                else
                {
                    return(StatusCode(422));
                }

            case AdminPanelPages.AddRedirection:
                DatabaseInteraction.AddRedirection(db, model.RedirectionModel, HttpContext, out bool redirectionAdded);
                if (redirectionAdded)
                {
                    return(StatusCode(201));
                }
                else
                {
                    return(StatusCode(422));
                }

            case AdminPanelPages.EditRedirection:
                DatabaseInteraction.EditRedirection(db, model.itemID, model.RedirectionModel, HttpContext, out bool redirectionEdited);
                if (redirectionEdited)
                {
                    return(StatusCode(200));
                }
                else
                {
                    return(StatusCode(422));
                }

            case AdminPanelPages.AddTemplate:
                DatabaseInteraction.AddTemplate(db, model.TemplateModel, HttpContext, out bool templateAdded);
                if (templateAdded)
                {
                    string createdTemplateUrl = $"{HttpContext.Request.Scheme}://{HttpContext.Request.Host}{HttpContext.Request.Path}?pageID={(int)AdminPanelPages.EditTemplate}&itemID={model.TemplateModel.ID}";
                    HttpContext.Response.Headers.Add("location", createdTemplateUrl);
                    return(StatusCode(201));
                }
                else
                {
                    return(StatusCode(422));
                }

            case AdminPanelPages.EditTemplate:
                DatabaseInteraction.EditTemplate(db, model.itemID, model.TemplateModel, HttpContext, out bool templateEdited);
                if (templateEdited)
                {
                    return(StatusCode(200));
                }
                else
                {
                    return(StatusCode(422));
                }

            case AdminPanelPages.AddChunk:
                DatabaseInteraction.AddChunk(db, model.TemplateModel, HttpContext, out bool chunkAdded);
                if (chunkAdded)
                {
                    string createdChunkUrl = $"{HttpContext.Request.Scheme}://{HttpContext.Request.Host}{HttpContext.Request.Path}?pageID={(int)AdminPanelPages.EditChunk}&itemID={model.TemplateModel.ID}";
                    HttpContext.Response.Headers.Add("location", createdChunkUrl);
                    return(StatusCode(201));
                }
                else
                {
                    return(StatusCode(422));
                }

            case AdminPanelPages.EditChunk:
                DatabaseInteraction.EditChunk(db, model.itemID, model.TemplateModel, HttpContext, out bool chunkEdited);
                if (chunkEdited)
                {
                    return(StatusCode(200));
                }
                else
                {
                    return(StatusCode(422));
                }

            case AdminPanelPages.CreateFolder:
                FileManagerManagementFunctions.CreateFolder(db, model.Path, model.Name, HttpContext, out bool folderCreated);
                if (folderCreated)
                {
                    return(StatusCode(201));
                }
                else
                {
                    return(StatusCode(422));
                }

            case AdminPanelPages.CreateStyle:
                FileManagerManagementFunctions.CreateCssFile(db, model.Path, model.Name, HttpContext, out bool styleFileCreated);
                if (styleFileCreated)
                {
                    return(StatusCode(201));
                }
                else
                {
                    return(StatusCode(422));
                }

            case AdminPanelPages.CreateScript:
                FileManagerManagementFunctions.CreateScriptFile(db, model.Path, model.Name, HttpContext, out bool scriptFileCreated);
                if (scriptFileCreated)
                {
                    return(StatusCode(201));
                }
                else
                {
                    return(StatusCode(422));
                }

            case AdminPanelPages.EditStyle:
                FileManagerManagementFunctions.EditCssFile(db, model.Path, model.StyleModel, HttpContext, out string editedStylePath, out bool cssFileEdited);
                if (cssFileEdited)
                {
                    string editedCssFileUrl = $"{HttpContext.Request.Scheme}://{HttpContext.Request.Host}{HttpContext.Request.Path}?pageID={(int)AdminPanelPages.EditStyle}&path={editedStylePath}";
                    HttpContext.Response.Headers.Add("location", editedCssFileUrl);
                    return(StatusCode(200));
                }
                else
                {
                    return(StatusCode(422));
                }

            case AdminPanelPages.EditScript:
                FileManagerManagementFunctions.EditScriptFile(db, model.Path, model.StyleModel, HttpContext, out string editedScriptPath, out bool scriptFileEdited);
                if (scriptFileEdited)
                {
                    string editedScriptFileUrl = $"{HttpContext.Request.Scheme}://{HttpContext.Request.Host}{HttpContext.Request.Path}?pageID={(int)AdminPanelPages.EditScript}&path={editedScriptPath}";
                    HttpContext.Response.Headers.Add("location", editedScriptFileUrl);
                    return(StatusCode(200));
                }
                else
                {
                    return(StatusCode(422));
                }

            case AdminPanelPages.AddUser:
                DatabaseInteraction.AddUser(db, model.UserModel, HttpContext, out int userAdditionStatusCode);
                return(StatusCode(userAdditionStatusCode));

            case AdminPanelPages.EditUser:
                DatabaseInteraction.EditUser(db, model.itemID, model.UserModel, HttpContext, out int userEditionStatusCode);
                return(StatusCode(userEditionStatusCode));

            case AdminPanelPages.AddUserType:
                DatabaseInteraction.AddUserType(db, model.UserTypeModel, HttpContext, out bool userTypeAdded);
                if (userTypeAdded)
                {
                    return(StatusCode(201));
                }
                else
                {
                    return(StatusCode(422));
                }

            case AdminPanelPages.EditUserType:
                DatabaseInteraction.EditUserType(db, model.itemID, model.UserTypeModel, HttpContext, out bool userTypeEdited);
                if (userTypeEdited)
                {
                    return(StatusCode(200));
                }
                else
                {
                    return(StatusCode(422));
                }

            case AdminPanelPages.AddSynonymForString:
                DatabaseInteraction.AddSynonymForString(db, model.SynonymForStringModel, HttpContext, out bool synonymForStringAdded);
                if (synonymForStringAdded)
                {
                    return(StatusCode(201));
                }
                else
                {
                    return(StatusCode(422));
                }

            case AdminPanelPages.EditSynonymForString:
                DatabaseInteraction.EditSynonymForString(db, model.itemID, model.SynonymForStringModel, HttpContext, out bool synonymForStringEdited);
                if (synonymForStringEdited)
                {
                    return(StatusCode(200));
                }
                else
                {
                    return(StatusCode(422));
                }

            case AdminPanelPages.EditUserData:
                DatabaseInteraction.EditUserData(db, model.UserModel, HttpContext, out int userDataEditionStatusCode);
                return(StatusCode(userDataEditionStatusCode));

            case AdminPanelPages.EditSettings:
                return(EditSettings(db, model.SettingsModel, HttpContext));

            default:
                return(RedirectToAction(nameof(AdminPanel)));
            }
        }