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