Example #1
0
        public IActionResult ReportDiscardDraftPost(string encryptedOrganisationId, int reportingYear)
        {
            ControllerHelper.Throw404IfFeatureDisabled(FeatureFlag.NewReportingJourney);

            long organisationId = ControllerHelper.DecryptOrganisationIdOrThrow404(encryptedOrganisationId);

            ControllerHelper.ThrowIfUserAccountRetiredOrEmailNotVerified(User, dataRepository);
            ControllerHelper.ThrowIfUserDoesNotHavePermissionsForGivenOrganisation(User, dataRepository, organisationId);
            ControllerHelper.ThrowIfReportingYearIsOutsideOfRange(reportingYear);

            DraftReturn draftReturn       = draftReturnService.GetDraftReturn(organisationId, reportingYear);
            bool        draftReturnExists = draftReturn != null;

            if (!draftReturnExists)
            {
                string nextPageNoDraftUrl = Url.Action("ReportOverview", "ReportOverview", new { encryptedOrganisationId = encryptedOrganisationId, reportingYear = reportingYear });
                StatusMessageHelper.SetStatusMessage(Response, "No draft to discard", nextPageNoDraftUrl);
                return(LocalRedirect(nextPageNoDraftUrl));
            }

            dataRepository.Delete(draftReturn);
            dataRepository.SaveChanges();

            Organisation organisation             = dataRepository.Get <Organisation>(organisationId);
            Return       submittedReturn          = organisation.GetReturn(reportingYear);
            bool         isEditingSubmittedReturn = submittedReturn != null;

            string yourChangesOrYourDraftReport = isEditingSubmittedReturn ? "your changes" : "your draft report";

            string nextPageUrl = Url.Action("ReportOverview", "ReportOverview", new { encryptedOrganisationId = encryptedOrganisationId, reportingYear = reportingYear });

            StatusMessageHelper.SetStatusMessage(Response, $"Discarded {yourChangesOrYourDraftReport}", nextPageUrl);
            return(LocalRedirect(nextPageUrl));
        }
Example #2
0
        public IActionResult ReportSizeOfOrganisationPost(string encryptedOrganisationId, int reportingYear, ReportSizeOfOrganisationViewModel viewModel)
        {
            ControllerHelper.Throw404IfFeatureDisabled(FeatureFlag.NewReportingJourney);

            long organisationId = ControllerHelper.DecryptOrganisationIdOrThrow404(encryptedOrganisationId);

            ControllerHelper.ThrowIfUserAccountRetiredOrEmailNotVerified(User, dataRepository);
            ControllerHelper.ThrowIfUserDoesNotHavePermissionsForGivenOrganisation(User, dataRepository, organisationId);
            ControllerHelper.ThrowIfReportingYearIsOutsideOfRange(reportingYear);

            ValidateUserInput(viewModel);

            if (viewModel.HasAnyErrors())
            {
                PopulateViewModel(viewModel, organisationId, reportingYear);
                return(View("ReportSizeOfOrganisation", viewModel));
            }

            SaveChangesToDraftReturn(viewModel, organisationId, reportingYear);

            string nextPageUrl = viewModel.Action == ReportPagesAction.Save
                ? Url.Action("ReportSizeOfOrganisationGet", "ReportSizeOfOrganisation", new { encryptedOrganisationId = encryptedOrganisationId, reportingYear = reportingYear })
                : Url.Action("ReportOverview", "ReportOverview", new { encryptedOrganisationId = encryptedOrganisationId, reportingYear = reportingYear });

            StatusMessageHelper.SetStatusMessage(Response, "Saved changes to size of organisation", nextPageUrl);
            return(LocalRedirect(nextPageUrl));
        }
Example #3
0
        public IActionResult ReportDiscardDraftGet(string encryptedOrganisationId, int reportingYear)
        {
            ControllerHelper.Throw404IfFeatureDisabled(FeatureFlag.NewReportingJourney);

            long organisationId = ControllerHelper.DecryptOrganisationIdOrThrow404(encryptedOrganisationId);

            ControllerHelper.ThrowIfUserAccountRetiredOrEmailNotVerified(User, dataRepository);
            ControllerHelper.ThrowIfUserDoesNotHavePermissionsForGivenOrganisation(User, dataRepository, organisationId);
            ControllerHelper.ThrowIfReportingYearIsOutsideOfRange(reportingYear);

            DraftReturn draftReturn       = draftReturnService.GetDraftReturn(organisationId, reportingYear);
            bool        draftReturnExists = draftReturn != null;

            if (!draftReturnExists)
            {
                string nextPageUrl = Url.Action("ReportOverview", "ReportOverview", new { encryptedOrganisationId = encryptedOrganisationId, reportingYear = reportingYear });
                StatusMessageHelper.SetStatusMessage(Response, "No draft to discard", nextPageUrl);
                return(LocalRedirect(nextPageUrl));
            }

            var viewModel = new ReportDiscardDraftViewModel();

            PopulateViewModel(viewModel, organisationId, reportingYear);

            return(View("ReportDiscardDraft", viewModel));
        }
Example #4
0
        public IActionResult ReportResponsiblePersonGet(string encryptedOrganisationId, int reportingYear)
        {
            ControllerHelper.Throw404IfFeatureDisabled(FeatureFlag.NewReportingJourney);

            long organisationId = ControllerHelper.DecryptOrganisationIdOrThrow404(encryptedOrganisationId);

            ControllerHelper.ThrowIfUserAccountRetiredOrEmailNotVerified(User, dataRepository);
            ControllerHelper.ThrowIfUserDoesNotHavePermissionsForGivenOrganisation(User, dataRepository, organisationId);
            ControllerHelper.ThrowIfReportingYearIsOutsideOfRange(reportingYear);

            Organisation organisation = dataRepository.Get <Organisation>(organisationId);

            if (organisation.SectorType == SectorTypes.Public)
            {
                string nextPageUrl = Url.Action("ReportOverview", "ReportOverview", new { encryptedOrganisationId = encryptedOrganisationId, reportingYear = reportingYear });
                StatusMessageHelper.SetStatusMessage(Response, "Public authority employers are not required to provide a person responsible", nextPageUrl);
                return(LocalRedirect(nextPageUrl));
            }

            var viewModel = new ReportResponsiblePersonViewModel();

            PopulateViewModel(viewModel, organisationId, reportingYear);
            SetValuesFromDraftReturnOrSubmittedReturn(viewModel, organisationId, reportingYear);

            return(View("ReportResponsiblePerson", viewModel));
        }
Example #5
0
        public IActionResult ChangePersonalDetailsPost(ChangePersonalDetailsViewModel viewModel)
        {
            ControllerHelper.ThrowIfAdminIsImpersonatingUser(User);

            viewModel.ParseAndValidateParameters(Request, m => m.FirstName);
            viewModel.ParseAndValidateParameters(Request, m => m.LastName);
            viewModel.ParseAndValidateParameters(Request, m => m.JobTitle);
            viewModel.ParseAndValidateParameters(Request, m => m.ContactPhoneNumber);

            if (viewModel.HasAnyErrors())
            {
                return(View("ChangePersonalDetails", viewModel));
            }

            // Get the user db entry
            User currentUser = ControllerHelper.GetGpgUserFromAspNetUser(User, dataRepository);

            AuditLogChanges(currentUser, viewModel);
            SaveUserDetails(currentUser, viewModel);

            string nextPageUrl = Url.Action("ManageAccountGet", "ManageAccount");

            StatusMessageHelper.SetStatusMessage(Response, "Saved changes to personal details", nextPageUrl);

            // Return user to the Manage Account page
            return(LocalRedirect(nextPageUrl));
        }
Example #6
0
        public IActionResult ChangePasswordPost(ChangePasswordViewModel viewModel)
        {
            ControllerHelper.ThrowIfAdminIsImpersonatingUser(User);
            ControllerHelper.ThrowIfUserAccountRetiredOrEmailNotVerified(User, dataRepository);

            // Check all values are provided and NewPassword is at least 8 characters long
            viewModel.ParseAndValidateParameters(Request, m => m.CurrentPassword);
            viewModel.ParseAndValidateParameters(Request, m => m.NewPassword);
            viewModel.ParseAndValidateParameters(Request, m => m.ConfirmNewPassword);

            // Get the current user
            User currentUser = ControllerHelper.GetGpgUserFromAspNetUser(User, dataRepository);

            // Check that passwords are valid
            ValidatePasswords(viewModel, currentUser);

            if (viewModel.HasAnyErrors())
            {
                return(View("ChangePassword", viewModel));
            }

            userRepository.UpdatePassword(currentUser, viewModel.NewPassword);

            // send password change notification
            emailSendingService.SendChangePasswordCompletedEmail(currentUser.EmailAddress);

            // Set up success notification on Manage Account page
            string nextPageUrl = Url.Action("ManageAccountGet", "ManageAccount");

            StatusMessageHelper.SetStatusMessage(Response, "Your password has been changed successfully", nextPageUrl);

            // Return user to the Manage Account page
            return(LocalRedirect(nextPageUrl));
        }
Example #7
0
        private IActionResult RedirectToReportOverviewPage(string encryptedOrganisationId, int reportingYear, string message)
        {
            string nextPageUrl = Url.Action("ReportOverview", "ReportOverview", new { encryptedOrganisationId, reportingYear });

            StatusMessageHelper.SetStatusMessage(Response, message, nextPageUrl);
            return(LocalRedirect(nextPageUrl));
        }
Example #8
0
        public IActionResult ReportResponsiblePersonPost(string encryptedOrganisationId, int reportingYear, ReportResponsiblePersonViewModel viewModel)
        {
            long organisationId = ControllerHelper.DecryptOrganisationIdOrThrow404(encryptedOrganisationId);

            ControllerHelper.ThrowIfUserAccountRetiredOrEmailNotVerified(User, dataRepository);
            ControllerHelper.ThrowIfUserDoesNotHavePermissionsForGivenOrganisation(User, dataRepository, organisationId);
            ControllerHelper.ThrowIfReportingYearIsOutsideOfRange(reportingYear);

            Organisation organisation = dataRepository.Get <Organisation>(organisationId);

            if (organisation.SectorType == SectorTypes.Public)
            {
                string nextPagePublicSectorUrl = Url.Action("ReportOverview", "ReportOverview", new { encryptedOrganisationId, reportingYear });
                StatusMessageHelper.SetStatusMessage(Response, "Public authority employers are not required to provide a person responsible", nextPagePublicSectorUrl);
                return(LocalRedirect(nextPagePublicSectorUrl));
            }

            ValidateUserInput(viewModel);

            if (viewModel.HasAnyErrors())
            {
                PopulateViewModel(viewModel, organisationId, reportingYear);
                return(View("ReportResponsiblePerson", viewModel));
            }

            SaveChangesToDraftReturn(viewModel, organisationId, reportingYear);

            string nextPageUrl = Url.Action("ReportOverview", "ReportOverview", new { encryptedOrganisationId, reportingYear });

            StatusMessageHelper.SetStatusMessage(Response, "Saved changes to draft", nextPageUrl);
            return(LocalRedirect(nextPageUrl));
        }
        private IActionResult RedirectToReportOverviewPageWithNotReadyStatusMessage(string encryptedOrganisationId, int reportingYear)
        {
            string nextPageUrl = Url.Action("ReportOverview", "ReportOverview",
                                            new { encryptedOrganisationId = encryptedOrganisationId, reportingYear = reportingYear });

            StatusMessageHelper.SetStatusMessage(Response, "This report is not ready to submit. Complete the remaining sections", nextPageUrl);
            return(LocalRedirect(nextPageUrl));
        }
Example #10
0
        public IActionResult Edit(string id)
        {
            var entity = _GuestbookService.GetDataById(id);

            if (entity.CreatorId != this.UserId)
            {
                StatusMessageHelper.AddMessage(message: "您無法修改此留言!", contentType: StatusMessageHelper.ContentType.Danger);
                return(RedirectToAction(nameof(Index)));
            }

            return(View(entity));
        }
        public async Task <IActionResult> ChangePasswordAsync(ViewModels.Members.ChangePassword changeData)
        {
            if (ModelState.IsValid)
            {
                var applicationUser = await _userManager.FindByNameAsync(User.Identity.Name);

                var result = _memberService.ChangePassword(applicationUser, changeData.Password, changeData.NewPassword, out string message);

                StatusMessageHelper.AddMessage(message: message, contentType: result ? StatusMessageHelper.ContentType.Success : StatusMessageHelper.ContentType.Warning);
            }

            return(View());
        }
        public IActionResult EmailValidate(string account, string authCode)
        {
            if (account == null || authCode == null)
            {
                return(RedirectToAction("Index", "Home"));
            }

            var blPass = _memberService.EmailValidate(account, authCode, out string message);

            StatusMessageHelper.AddMessage(message: message, contentType: blPass ? StatusMessageHelper.ContentType.Success : StatusMessageHelper.ContentType.Danger, dismissible: false, keep: true);

            return(View());
        }
        public async Task <IActionResult> Register(ViewModels.Members.Register registerMember)
        {
            if (ModelState.IsValid)
            {
                var newMember = _mapper.Map <ApplicationUser>(registerMember);

                var result = await _memberService.RegisterAsync(newMember, registerMember.Password);

                if (result.Succeeded)
                {
                    var authCode = await _userManager.GenerateEmailConfirmationTokenAsync(newMember);

                    authCode = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(authCode));
                    string     tempMail    = System.IO.File.ReadAllText("Views/Shared/RegisterEmailTemplate.html");
                    UriBuilder validateUrl = new UriBuilder("http", "localhost", Request.Host.Port ?? 5000)
                    {
                        Path = Url.Action("EmailValidate", "Members",
                                          new
                        {
                            Account  = newMember.UserName,
                            AuthCode = authCode
                        })
                    };
                    string mailBody = _mailService.GetRegiesterMailBody(tempMail,
                                                                        newMember.Name,
                                                                        validateUrl.ToString().Replace("%3F", "?"));
                    await _mailService.SendRegisterMailAsync(mailBody, newMember.Email);

                    StatusMessageHelper.AddMessage(message: "註冊成功,請去收信進行Email驗證", dismissible: false, keep: true);

                    return(RedirectToAction("RegisterResult"));
                }
                else
                {
                    foreach (var error in result.Errors)
                    {
                        ModelState.AddModelError("", error.Description);
                    }
                }
            }

            registerMember.Password      = null;
            registerMember.PasswordCheck = null;

            return(View(registerMember));
        }
        public IActionResult ChangeContactPreferencesPost(ChangeContactPreferencesViewModel viewModel)
        {
            ControllerHelper.ThrowIfAdminIsImpersonatingUser(User);

            // Get the user db entry
            User currentUser = ControllerHelper.GetGpgUserFromAspNetUser(User, dataRepository);

            // Update the user's information
            currentUser.SendUpdates  = viewModel.SendUpdates;
            currentUser.AllowContact = viewModel.AllowContact;

            // Save updates
            dataRepository.SaveChanges();

            string nextPageUrl = Url.Action("ManageAccountGet", "ManageAccount");

            StatusMessageHelper.SetStatusMessage(Response, "Saved changes to contact preferences", nextPageUrl);

            // Return user to the Manage Account page
            return(LocalRedirect(nextPageUrl));
        }
        public IActionResult ChangePasswordPost(ChangePasswordViewModel viewModel)
        {
            ControllerHelper.ThrowIfAdminIsImpersonatingUser(User);
            ControllerHelper.ThrowIfUserAccountRetiredOrEmailNotVerified(User, dataRepository);

            // Check all values are provided and NewPassword is at least 8 characters long
            viewModel.ParseAndValidateParameters(Request, m => m.CurrentPassword);
            viewModel.ParseAndValidateParameters(Request, m => m.NewPassword);
            viewModel.ParseAndValidateParameters(Request, m => m.ConfirmNewPassword);

            // Get the current user
            User currentUser = ControllerHelper.GetGpgUserFromAspNetUser(User, dataRepository);

            // Check that passwords are valid
            ValidatePasswords(viewModel, currentUser);
            if (currentUser.ResetAttempts == Global.MaxAuthAttempts)
            {
                currentUser.ResetAttempts = 0;
                dataRepository.SaveChanges();
                StatusMessageHelper.SetStatusMessage(Response, "You have been logged out for security reasons", Url.Action("LoggedOut", "Login"));
                return(LoginHelper.Logout(HttpContext, RedirectToAction("LoggedOut", "Login")));
            }

            if (viewModel.HasAnyErrors())
            {
                return(View("ChangePassword", viewModel));
            }

            userRepository.UpdatePassword(currentUser, viewModel.NewPassword);

            // send password change notification
            emailSendingService.SendChangePasswordCompletedEmail(currentUser.EmailAddress);

            // Set up success notification on Manage Account page
            string nextPageUrl = Url.Action("LoggedOut", "Login");

            StatusMessageHelper.SetStatusMessage(Response, "Your password has been changed successfully", nextPageUrl);

            return(LoginHelper.Logout(HttpContext, RedirectToAction("LoggedOut", "Login")));
        }
        public IActionResult ReportLinkToWebsitePost(string encryptedOrganisationId, int reportingYear, ReportLinkToWebsiteViewModel viewModel)
        {
            long organisationId = ControllerHelper.DecryptOrganisationIdOrThrow404(encryptedOrganisationId);

            ControllerHelper.ThrowIfUserAccountRetiredOrEmailNotVerified(User, dataRepository);
            ControllerHelper.ThrowIfUserDoesNotHavePermissionsForGivenOrganisation(User, dataRepository, organisationId);
            ControllerHelper.ThrowIfReportingYearIsOutsideOfRange(reportingYear);

            ValidateUserInput(viewModel);

            if (viewModel.HasAnyErrors())
            {
                PopulateViewModel(viewModel, organisationId, reportingYear);
                return(View("ReportLinkToWebsite", viewModel));
            }

            SaveChangesToDraftReturn(viewModel, organisationId, reportingYear);

            string nextPageUrl = Url.Action("ReportOverview", "ReportOverview", new { encryptedOrganisationId, reportingYear });

            StatusMessageHelper.SetStatusMessage(Response, "Saved changes to draft", nextPageUrl);
            return(LocalRedirect(nextPageUrl));
        }