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