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)); }
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))); } }
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)); }
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; } } }
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))); } }