public async Task <ActionResult> ChangeProfilePicture(ChangeProfilePictureVM model) { var validImageTypes = new string[] { "image/gif", "image/jpeg", "image/pjpeg", "image/png" }; if (model.ProfilePictureUpload != null) { if (!validImageTypes.Contains(model.ProfilePictureUpload.ContentType)) { ModelState.AddModelError("CustomError", "Please choose either a GIF, JPG or PNG image."); return(View()); } } if (ModelState.IsValid) { ApplicationUser applicationUser = await _userManager.GetUserAsync(HttpContext.User); UserProfile currentUser = await _repository.GetUserByIdAsync(new Guid(applicationUser.Id)); if (currentUser == null) { return(RedirectToAction("MakeNewProfile", "Main")); } Picture profilePicture = currentUser.ProfilePicture; byte[] data = null; BinaryReader reader = new BinaryReader(model.ProfilePictureUpload.OpenReadStream()); data = reader.ReadBytes((int)model.ProfilePictureUpload.Length); var azureStorageUtility = new AzureStorageUtility(_storageAccountName, _storageAccountKey); Picture oldProfilepicture = profilePicture; profilePicture = await azureStorageUtility.Upload(_storageContainerName, data); profilePicture.UserId = currentUser.Id; try { await _repository.DeletePictureAsync(oldProfilepicture, currentUser.Id); currentUser.ProfilePicture = profilePicture; await _repository.UpdateUserAsync(currentUser); await azureStorageUtility.Delete(_storageContainerName, oldProfilepicture.Id); } catch (UnauthorizedAttemptException) { return(View("~/Views/Shared/InvalidAttempt.cshtml")); } return(RedirectToAction("Index")); } else { return(View()); } }
public async Task <IActionResult> DeletePicture(Guid pictureId) { ApplicationUser applicationUser = await _userManager.GetUserAsync(HttpContext.User); Guid currentUserId = new Guid(applicationUser.Id); if (!await _repository.ContainsUserAsync(currentUserId)) { return(RedirectToAction("MakeNewProfile", "Main")); } Picture picture = await _repository.GetPictureAsync(pictureId); if (picture == null) { return(View("~/Views/Shared/InvalidAttempt.cshtml")); } Guid albumId = picture.Album.Id; List <string> roles = (List <string>) await _userManager.GetRolesAsync(applicationUser); bool isAdmin = roles.Contains("Admin"); if (isAdmin) { currentUserId = picture.UserId; } try { await _repository.DeletePictureAsync(picture, currentUserId); var azureUtility = new AzureStorageUtility(_storageAccountName, _storageAccountKey); await azureUtility.Delete(_storageContainerName, picture.Id); } catch (UnauthorizedAttemptException) { return(View("~/Views/Shared/InvalidAttempt.cshtml")); } return(RedirectToAction("Index", "ManageAlbum", new { id = albumId })); }