Exemple #1
0
        public async Task <IActionResult> Update(IFormCollection model)
        {
            try
            {
                // Perform an initial check to catch FileUpload class
                // attribute violations.
                if (!(ModelState.IsValid) || !(User.Identity.IsAuthenticated))
                {
                    return(View());
                }

                if (model.Files.Count > 0)
                {
                    ProjectFormData result = new ProjectFormData()
                    {
                        Title       = model["item.Title"],
                        Author      = model["item.Author"],
                        Description = model["item.Description"],
                        Language    = model["item.Language"],
                        GithubLink  = model["item.GithubLink"],
                        Status      = model["item.Status"].ToString(),
                        File        = model.Files[0]
                    };

                    await _unitOfWork.ProjectControl.UpdateProject(result, ModelState, Guid.Parse(model["item.ProjectId"]), User.Identity.Name);

                    _unitOfWork.Complete();
                    return(RedirectToAction(nameof(Index)));
                }
                else
                {
                    ProjectFormData result = new ProjectFormData()
                    {
                        Title       = model["item.Title"],
                        Author      = model["item.Author"],
                        Description = model["item.Description"],
                        Language    = model["item.Language"],
                        GithubLink  = model["item.GithubLink"],
                        Status      = model["item.Status"].ToString()
                    };

                    await _unitOfWork.ProjectControl.UpdateProject(result, ModelState, Guid.Parse(model["item.ProjectId"]), User.Identity.Name);

                    _unitOfWork.Complete();
                    return(RedirectToAction(nameof(Index)));
                }
            }
            catch
            {
                return(View());
            }
        }
Exemple #2
0
        public async Task UpdateProject(ProjectFormData model, ModelStateDictionary modelState, Guid id, string userName)
        {
            var user = await _userManager.FindByNameAsync(userName);

            var trustedFileNameForDisplay     = string.Empty;
            var streamedFileImageContent      = new byte[0];
            var untrustedFileNameForStorage   = string.Empty;
            var trustedFilePathStorage        = string.Empty;
            var trustedFileNameForFileStorage = string.Empty;
            var checkState = string.Empty;

            // Get Project Id and update all new fields
            var getProject = await _context.ClamUserProjects.FindAsync(id);

            if (model.File != null)
            {
                streamedFileImageContent =
                    await FileHelpers.ProcessFormFile <ProjectFormData>(
                        model.File, modelState, _permittedExtentions,
                        _fileSizeLimit);

                // Filter Check the state of the file
                if (!modelState.IsValid)
                {
                    checkState = "ModelState is Invalid";
                }

                untrustedFileNameForStorage = model.File.FileName;
                // Don't trust the file name sent by the client. To display
                // the file name, HTML-encode the value.
                trustedFileNameForDisplay = WebUtility.HtmlEncode(
                    model.File.FileName);

                // Bind form data to the model
                var keyPathFolder     = FilePathUrlHelper.GenerateKeyPath(user.Id);
                var generateKeyFolder = GenerateSecurity.Encode(user.Id);

                // Path Location & Directory Check
                trustedFilePathStorage = String.Format("{0}\\{1}\\{2}\\{3}",
                                                       _targetFolderPath,
                                                       keyPathFolder,
                                                       generateKeyFolder,
                                                       Path.GetRandomFileName());

                Directory.CreateDirectory(trustedFilePathStorage);

                using (var fileStream = new FileStream(Path.Combine(trustedFilePathStorage, untrustedFileNameForStorage),
                                                       FileMode.Create, FileAccess.Write))
                {
                    await model.File.CopyToAsync(fileStream);

                    fileStream.Close();
                }
                // Remove Physical Location
                await RemoveProject(id);

                _context.Entry(getProject).Entity.Title            = model.Title;
                _context.Entry(getProject).Entity.Author           = model.Author;
                _context.Entry(getProject).Entity.Description      = model.Description;
                _context.Entry(getProject).Entity.Language         = model.Language;
                _context.Entry(getProject).Entity.GithubLink       = model.GithubLink;
                _context.Entry(getProject).Entity.Status           = bool.Parse(model.Status);
                _context.Entry(getProject).Entity.LastModified     = DateTime.Now;
                _context.Entry(getProject).Entity.ImageGifLocation = Path.Combine(trustedFilePathStorage, untrustedFileNameForStorage);
                _context.Update(getProject);
                await _context.SaveChangesAsync();
            }
            else
            {
                _context.Entry(getProject).Entity.Title        = model.Title;
                _context.Entry(getProject).Entity.Author       = model.Author;
                _context.Entry(getProject).Entity.Description  = model.Description;
                _context.Entry(getProject).Entity.Language     = model.Language;
                _context.Entry(getProject).Entity.GithubLink   = model.GithubLink;
                _context.Entry(getProject).Entity.Status       = bool.Parse(model.Status);
                _context.Entry(getProject).Entity.LastModified = DateTime.Now;
                _context.Update(getProject);
                await _context.SaveChangesAsync();
            }
        }
Exemple #3
0
        public async Task AddProject(ProjectFormData model, ModelStateDictionary modelState, string userName)
        {
            var user = await _userManager.FindByNameAsync(userName);

            var trustedFileNameForDisplay     = string.Empty;
            var streamedFileImageContent      = new byte[0];
            var untrustedFileNameForStorage   = string.Empty;
            var trustedFilePathStorage        = string.Empty;
            var trustedFileNameForFileStorage = string.Empty;

            var test = string.Empty;

            streamedFileImageContent =
                await FileHelpers.ProcessFormFile <ProjectFormData>(
                    model.File, modelState, _permittedExtentions,
                    _fileSizeLimit);

            if (!modelState.IsValid)
            {
                test = "ModelState is Invalid";
            }

            untrustedFileNameForStorage = model.File.FileName;
            // Don't trust the file name sent by the client. To display
            // the file name, HTML-encode the value.
            trustedFileNameForDisplay = WebUtility.HtmlEncode(
                model.File.FileName);

            // Bind form data to the model
            var keyPathFolder     = FilePathUrlHelper.GenerateKeyPath(user.Id);
            var generateKeyFolder = GenerateSecurity.Encode(user.Id);

            // Path Location & Directory Check
            trustedFilePathStorage = String.Format("{0}\\{1}\\{2}\\{3}",
                                                   _targetFolderPath,
                                                   keyPathFolder,
                                                   generateKeyFolder,
                                                   Path.GetRandomFileName());

            Directory.CreateDirectory(trustedFilePathStorage);

            using (var fileStream = new FileStream(Path.Combine(trustedFilePathStorage, untrustedFileNameForStorage),
                                                   FileMode.Create, FileAccess.Write))
            {
                await model.File.CopyToAsync(fileStream);

                fileStream.Close();
            }

            ClamUserProjects result = new ClamUserProjects()
            {
                Author           = user.FirstName,
                Title            = model.Title,
                Description      = model.Description,
                ImageGifLocation = Path.Combine(trustedFilePathStorage, untrustedFileNameForStorage),
                Language         = model.Language,
                GithubLink       = model.GithubLink,
                Status           = bool.Parse(model.Status),
                UserId           = user.Id,
                LastModified     = DateTime.Now,
                DateCreated      = DateTime.Now
            };
            await _context.AddAsync(result);

            await _context.SaveChangesAsync();
        }