Beispiel #1
0
        public async Task <IActionResult> OnPostAsync(IFormFile upload)
        {
            if (!ModelState.IsValid)
            {
                return(Page());
            }

            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                return(NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."));
            }

            var email = await _userManager.GetEmailAsync(user);

            if (Input.Email != email)
            {
                var setEmailResult = await _userManager.SetEmailAsync(user, Input.Email);

                if (!setEmailResult.Succeeded)
                {
                    var userId = await _userManager.GetUserIdAsync(user);

                    throw new InvalidOperationException($"Unexpected error occurred setting email for user with ID '{userId}'.");
                }
            }

            var phoneNumber = await _userManager.GetPhoneNumberAsync(user);

            if (Input.PhoneNumber != phoneNumber)
            {
                var setPhoneResult = await _userManager.SetPhoneNumberAsync(user, Input.PhoneNumber);

                if (!setPhoneResult.Succeeded)
                {
                    var userId = await _userManager.GetUserIdAsync(user);

                    throw new InvalidOperationException($"Unexpected error occurred setting phone number for user with ID '{userId}'.");
                }
            }

            var name = await _userManager.GetNameAsync(user);

            if (Input.Name != name)
            {
                var setNameResult = await _userManager.SetNameAsync(user, Input.Name);

                if (!setNameResult.Succeeded)
                {
                    var userId = await _userManager.GetUserIdAsync(user);

                    throw new InvalidOperationException($"Unexpected error occurred setting name for user with ID '{userId}'.");
                }
            }

            var description = await _userManager.GetDescriptionAsync(user);

            if (Input.Description != description)
            {
                var setDescriptionResult = await _userManager.SetDescriptionAsync(user, Input.Description);

                if (!setDescriptionResult.Succeeded)
                {
                    var userId = await _userManager.GetUserIdAsync(user);

                    throw new InvalidOperationException($"Unexpected error occurred setting description for user with ID '{userId}'.");
                }
            }

            var location = await _userManager.GetLocationAsync(user);

            if (Input.Location != location)
            {
                var setLocationResult = await _userManager.SetLocationAsync(user, Input.Location);

                if (!setLocationResult.Succeeded)
                {
                    var userId = await _userManager.GetUserIdAsync(user);

                    throw new InvalidOperationException($"Unexpected error occurred setting location for user with ID '{userId}'.");
                }
            }

            var gender = await _userManager.GetGenderAsync(user);

            if (Input.Gender != gender)
            {
                var setGenderResult = await _userManager.SetGenderAsync(user, Input.Gender);

                if (!setGenderResult.Succeeded)
                {
                    var userId = await _userManager.GetUserIdAsync(user);

                    throw new InvalidOperationException($"Unexpected error occurred setting location for user with ID '{userId}'.");
                }
            }

            var currentAvatar = _profilePictureService.GetUserAvatar(user.Id);

            try
            {
                if (upload != null && upload.Length > 0)
                {
                    var avatar = new ProfilePicture
                    {
                        FileName    = System.IO.Path.GetFileName(upload.FileName),
                        FileType    = FileType.Avatar,
                        ContentType = upload.ContentType,
                        UserId      = user.Id
                    };

                    using (var reader = new System.IO.BinaryReader(upload.OpenReadStream()))
                    {
                        avatar.Content = reader.ReadBytes((int)upload.Length);
                    }

                    if (currentAvatar != null)
                    {
                        _profilePictureService.Remove(currentAvatar);
                    }

                    _profilePictureService.Add(avatar);
                }
            }
            catch (RetryLimitExceededException)
            {
                ModelState.AddModelError("", "Unable to save changes.");
            }

            await _signInManager.RefreshSignInAsync(user);

            StatusMessage = "Your profile has been updated";
            return(RedirectToPage());
        }