Пример #1
0
        public async Task <ServiceModels.ServiceResponse> UpdateAvatar(InputModels.UpdateAvatarInput input)
        {
            var serviceResponse = new ServiceModels.ServiceResponse();

            var userRecord = await UserManager.FindByIdAsync(input.Id);

            if (userRecord is null)
            {
                var message = $"No user record found for '{input.Id}'.";
                serviceResponse.Error(message);
                Log.LogCritical(message);
            }

            CanEdit(input.Id);

            if (!serviceResponse.Success)
            {
                return(serviceResponse);
            }

            var allowedExtensions = new[] { ".gif", ".jpg", ".png", ".jpeg" };

            var extension = Path.GetExtension(input.NewAvatar.FileName).ToLower();

            if (!allowedExtensions.Contains(extension))
            {
                serviceResponse.Error(nameof(input.NewAvatar), "Your avatar must end with .gif, .jpg, .jpeg, or .png");
            }

            if (!serviceResponse.Success)
            {
                return(serviceResponse);
            }

            using (var inputStream = input.NewAvatar.OpenReadStream()) {
                inputStream.Position = 0;

                userRecord.AvatarPath = await ImageStore.Save(new ImageStoreSaveOptions {
                    ContainerName = Constants.InternalKeys.AvatarContainer,
                    FileName      = $"avatar{userRecord.Id}.png",
                    ContentType   = "image/png",
                    InputStream   = inputStream,
                    MaxDimension  = 100,
                    Overwrite     = true
                });
            }

            DbContext.Update(userRecord);
            DbContext.SaveChanges();

            Log.LogInformation($"Avatar was modified by '{UserContext.ApplicationUser.DisplayName}' for account '{userRecord.DisplayName}'.");

            return(serviceResponse);
        }
Пример #2
0
        public async Task <IActionResult> UpdateAvatar(InputModels.UpdateAvatarInput input)
        {
            if (ModelState.IsValid)
            {
                var serviceResponse = await AccountRepository.UpdateAvatar(input);

                return(await this.RedirectFromService(serviceResponse, FailureCallback));
            }

            return(await FailureCallback());

            async Task <IActionResult> FailureCallback()
            {
                var userRecord = input.Id is null ? UserContext.ApplicationUser : await UserManager.FindByIdAsync(input.Id);

                if (userRecord is null)
                {
                    userRecord = UserContext.ApplicationUser;
                }

                AccountRepository.CanEdit(userRecord.Id);

                var viewModel = new ViewModels.Account.DetailsPage {
                    AvatarPath       = userRecord.AvatarPath,
                    Id               = userRecord.Id,
                    DisplayName      = userRecord.DisplayName,
                    NewEmail         = userRecord.Email,
                    EmailConfirmed   = userRecord.EmailConfirmed,
                    BirthdayDays     = DayPickList(userRecord.Birthday.Day),
                    BirthdayMonths   = MonthPickList(userRecord.Birthday.Month),
                    BirthdayDay      = userRecord.Birthday.Day.ToString(),
                    BirthdayMonth    = userRecord.Birthday.Month.ToString(),
                    FrontPage        = userRecord.FrontPage,
                    FrontPageOptions = FrontPagePickList(userRecord.FrontPage),
                    MessagesPerPage  = userRecord.MessagesPerPage,
                    PopularityLimit  = userRecord.PopularityLimit,
                    Poseys           = userRecord.Poseys,
                    ShowFavicons     = userRecord.ShowFavicons ?? true,
                    TopicsPerPage    = userRecord.TopicsPerPage
                };

                return(View(nameof(Details), viewModel));
            }
        }
Пример #3
0
        public async Task <IActionResult> UpdateAvatar(InputModels.UpdateAvatarInput input)
        {
            if (ModelState.IsValid)
            {
                var serviceResponse = await AccountRepository.UpdateAvatar(input);

                return(await ForumViewResult.RedirectFromService(this, serviceResponse, FailureCallback));
            }

            return(await FailureCallback());

            async Task <IActionResult> FailureCallback()
            {
                var userRecord = input.Id is null ? UserContext.ApplicationUser : await UserManager.FindByIdAsync(input.Id);

                if (userRecord is null)
                {
                    userRecord = UserContext.ApplicationUser;
                }

                AccountRepository.CanEdit(userRecord.Id);

                var viewModel = new ViewModels.Account.DetailsPage {
                    AvatarPath     = userRecord.AvatarPath,
                    Id             = userRecord.Id,
                    DisplayName    = userRecord.DisplayName,
                    NewEmail       = userRecord.Email,
                    EmailConfirmed = userRecord.EmailConfirmed,
                    BirthdayDays   = DayPickList(userRecord.Birthday.Day),
                    BirthdayMonths = MonthPickList(userRecord.Birthday.Month),
                    BirthdayYears  = YearPickList(userRecord.Birthday.Year),
                    BirthdayDay    = userRecord.Birthday.Day.ToString(),
                    BirthdayMonth  = userRecord.Birthday.Month.ToString(),
                    BirthdayYear   = userRecord.Birthday.Year.ToString(),
                };

                return(ForumViewResult.ViewResult(this, nameof(Details), viewModel));
            }
        }