Пример #1
0
        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);
        }
Пример #3
0
        // 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)));
        }
Пример #4
0
        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();
        }