public async Task <IActionResult> Cancel(RequestCancelModel model) { if (ModelState.IsValid) { var request = await _dbContext.Requests.GetRequestWithContactsById(model.RequestId); if (request == null) { return(RedirectToAction("Index", "Home", new { ErrorMessage = "Tillfället kunde inte avbokas" })); } if ((await _authorizationService.AuthorizeAsync(User, request, Policies.Cancel)).Succeeded && request != null) { try { _requestService.CancelByBroker(request, _clock.SwedenNow, User.GetUserId(), User.TryGetImpersonatorId(), model.CancelMessage); _dbContext.SaveChanges(); } catch (InvalidOperationException ex) { _logger.LogError("Cancel by broker Request {request.Status}, RequestId: {request.RequestId}. Message: {ex.Message}", request.Status, request.RequestId, ex.Message); return(RedirectToAction("Index", "Home", new { errormessage = "Det gick inte att avboka uppdraget" })); } return(RedirectToAction("Index", "Home", new { message = "Avbokning har genomförts" })); } return(Forbid()); } return(RedirectToAction(nameof(View), new { id = model.RequestId })); }
public StatisticsServiceTests() { _tolkDbContext = CreateTolkDbContext(); _clock = new StubSwedishClock(DateTimeOffset.Now.ToString()); var mockLanguages = MockEntities.MockLanguages; var mockRankings = MockEntities.MockRankings; var mockCustomers = MockEntities.MockCustomers; var mockCustomerUsers = MockEntities.MockCustomerUsers(mockCustomers); var mockOrders = MockEntities.MockOrders(mockLanguages, mockRankings, mockCustomerUsers); var mockRequisitions = MockEntities.MockRequisitions(mockOrders); var mockComplaints = MockEntities.MockComplaints(mockOrders); var regions = Region.Regions; //Initialize data if not already initialized if (!_tolkDbContext.CustomerOrganisations.Any()) { _tolkDbContext.AddRange(mockCustomers); _tolkDbContext.AddRange(mockCustomerUsers); _tolkDbContext.AddRange(mockLanguages); _tolkDbContext.AddRange(mockRankings); _tolkDbContext.AddRange(mockOrders); _tolkDbContext.AddRange(mockRequisitions); _tolkDbContext.AddRange(mockComplaints); _tolkDbContext.AddRange(regions); } _tolkDbContext.SaveChanges(); _statService = new StatisticsService(_tolkDbContext, _clock); }
// Common logic for setting of password and forgot password flows. private async Task <IActionResult> SendPasswordResetLink(AspNetUser user) { if (!(await _userManager.IsEmailConfirmedAsync(user))) { // Here we'll just throw. Calling action might check this as well and do better error handling. throw new InvalidOperationException($"Cannot send password reset to user {user.Id}/{user.Email} because email is not confirmed."); } var code = await _userManager.GeneratePasswordResetTokenAsync(user); var resetLink = Url.ResetPasswordCallbackLink(user.Id.ToSwedishString(), code); var bodyPlain = $@"Återställning av lösenord för {Constants.SystemName} Om du har begärt att lösenordet ska återställas för '{user.FullName}' klicka eller klistra in länken nedan i webbläsaren. {resetLink} {(user.IsActive ? string.Empty : @"Notera att din användare är inaktiverad. Du kommer fortfarande få byta lösenord, men du behöver kontakta [email protected] för att få mer information om aktivering av konto.")} Om du inte har begärt en återställning av ditt lösenord kan du radera det här meddelandet. Om du får flera meddelanden som du inte har begärt, kontakta supporten på {_options.Support.FirstLineEmail}."; var bodyHtml = $@"<h2>Återställning av lösenord för {Constants.SystemName}</h2> <div>Om du har begärt att lösenordet ska återställas för '{user.FullName}' klicka på länken nedan:<br /><br /></div> <div>{HtmlHelper.GetButtonDefaultLargeTag(resetLink.AsUri(), "Återställ lösenord")}<br /><br /></div> <div>Om det inte fungerar att klicka på länken så klistra in länken nedan i en webbläsare:<br /><br /></div> <div>{resetLink}<br /><br /></div> <div>{(user.IsActive ? string.Empty : @"Notera att din användare är inaktiverad. Du kommer fortfarande få byta lösenord, men du behöver kontakta [email protected] för att få mer information om aktivering av konto.")} Om du inte har begärt en återställning av ditt lösenord kan du radera det här meddelandet. Om du får flera meddelanden som du inte har begärt, kontakta supporten på {_options.Support.FirstLineEmail}.</div>"; _notificationService.CreateEmail( user.Email, $"Återställning lösenord {Constants.SystemName}", bodyPlain, bodyHtml, NotificationType.PasswordReset, false, false); _dbContext.SaveChanges(); _logger.LogInformation("Password reset link sent to {email} for {userId}", user.Email, user.Id); return(RedirectToAction(nameof(ForgotPasswordConfirmation))); }
public JsonResult Upload(List <IFormFile> files, Guid?groupKey = null) { if (files == null) { return(Json(new { success = false, ErrorMessage = $"Inga filer hittades för uppladdning." })); } var list = new List <FileModel>(); var uploadedLength = files.Sum(f => f.Length); if (uploadedLength < _options.CombinedMaxSizeAttachments && groupKey.HasValue) { uploadedLength += _dbContext.TemporaryAttachmentGroups.GetTemporaryAttachmentGroupsByGroupKey(groupKey.Value).ToList().Sum(t => t.Attachment.Blob.Length); } if (uploadedLength > _options.CombinedMaxSizeAttachments) { //log here as well return(Json(new { success = false, ErrorMessage = $"Den totala storleken på alla bifogade filer överstiger den tillåtna gränsen {_options.CombinedMaxSizeAttachments / 1024 / 1024} MB" })); } using (var trn = _dbContext.Database.BeginTransaction()) { //Create group groupKey ??= Guid.NewGuid(); foreach (var file in files) { var extension = Path.GetExtension(file.FileName); if (!_options.AllowedFileExtensions.Split(",").Any(e => e.ToSwedishUpper() == extension.ToSwedishUpper())) { trn.Rollback(); //log here as well return(Json(new { success = false, ErrorMessage = $"Filer av typen {extension} är inte tillåtna. Inga filer laddades upp." })); } using Stream stream = file.OpenReadStream(); byte[] byteArray = new byte[file.Length]; stream.Read(byteArray, 0, (int)file.Length); stream.Close(); var fileName = Path.GetFileName(file.FileName); var attachment = new Attachment { Blob = byteArray, FileName = fileName, CreatedBy = User.GetUserId(), ImpersonatingCreator = User.TryGetImpersonatorId(), TemporaryAttachmentGroup = new TemporaryAttachmentGroup { TemporaryAttachmentGroupKey = groupKey.Value, CreatedAt = _clock.SwedenNow, } }; _dbContext.Attachments.Add(attachment); _dbContext.SaveChanges(); list.Add(new FileModel { Id = attachment.AttachmentId, FileName = fileName, Size = file.Length }); } trn.Commit(); } return(Json(new { success = true, fileInfo = list.ToArray(), groupKey })); }
public void GetWeeklyUserLoginStatistics(int weekBefore, int thisWeek, decimal expectedPercentageDiff, StatisticsChangeType expectedChangeType) { List <UserLoginLogEntry> usersLogIn = new List <UserLoginLogEntry>(); for (int i = 1; i <= weekBefore; i++) { usersLogIn.Add(new UserLoginLogEntry { LoggedInAt = dateIn_14_DaysRange, UserId = i }); } for (int i = weekBefore + 1; i <= (weekBefore + thisWeek); i++) { usersLogIn.Add(new UserLoginLogEntry { LoggedInAt = dateIn_7_DaysRange, UserId = i }); } _tolkDbContext.UserLoginLogEntries.AddRange(usersLogIn); _tolkDbContext.SaveChanges(); WeeklyStatisticsModel ws = _statService.GetWeeklyUserLogins(breakDate); Assert.Equal(expectedPercentageDiff, ws.DiffPercentage); Assert.Equal(expectedChangeType, ws.ChangeType); _tolkDbContext.UserLoginLogEntries.RemoveRange(usersLogIn); _tolkDbContext.SaveChanges(); }