private PartialViewResult ViewActivateInactivatePerson(Person person, ConfirmDialogFormViewModel viewModel) { string confirmMessage; if (person.IsActive) { // Now allowed, but we warn the user : PF-2308 - https://sitkatech.atlassian.net/secure/RapidBoard.jspa?rapidView=39&projectKey=PF&modal=detail&selectedIssue=PF-2308 const bool confirmDialogCanProceed = true; string optionalOrganizationPrimaryContactWarnings = string.Empty; bool isPrimaryContactForAnyOrganization = person.OrganizationsWhereYouAreThePrimaryContactPerson.Any(); if (isPrimaryContactForAnyOrganization) { optionalOrganizationPrimaryContactWarnings = $@"{person.GetFullNameFirstLast()} is the {FieldDefinitionEnum.OrganizationPrimaryContact.ToType().GetFieldDefinitionLabel()} for the following organizations: <ul> {string.Join("\r\n", person.GetPrimaryContactOrganizations().Select(x => $"<li>{x.OrganizationName}</li>"))}</ul>"; } confirmMessage = $"{optionalOrganizationPrimaryContactWarnings}Are you sure you want to inactivate user '{person.GetFullNameFirstLast()}'?"; var viewData = new ConfirmDialogFormViewData(confirmMessage, confirmDialogCanProceed); return(RazorPartialView <ConfirmDialogForm, ConfirmDialogFormViewData, ConfirmDialogFormViewModel>( viewData, viewModel)); } else { confirmMessage = $"Are you sure you want to activate user '{person.GetFullNameFirstLast()}'?"; var viewData = new ConfirmDialogFormViewData(confirmMessage, true); return(RazorPartialView <ConfirmDialogForm, ConfirmDialogFormViewData, ConfirmDialogFormViewModel>( viewData, viewModel)); } }
/// <summary> /// Impersonate the given User ID. /// Designed to be callable by other methods in other controllers /// </summary> /// <param name="activeController"></param> /// <param name="personIDToImpersonate"></param> /// <param name="optionalPreviousPageUri">Optional URI to the referring page. May be null or blank if not known.</param> public static void ImpersonatePersonID(FirmaBaseController activeController, PersonPrimaryKey personIDToImpersonate, Uri optionalPreviousPageUri) { Person personToImpersonate = personIDToImpersonate.EntityObject; if (activeController.CurrentFirmaSession.Person.PersonID == personToImpersonate.PersonID) { string currentPersonFullName = activeController.CurrentFirmaSession.Person.GetFullNameFirstLast(); string impersonationWarning = $"Attempted to impersonate person {currentPersonFullName}, but you are already acting as {currentPersonFullName}. Nothing done."; activeController.SetErrorForDisplay(impersonationWarning); return; } AssertImpersonationAllowedByEnvironment(); AssertFirmaSessionCanImpersonate(activeController.CurrentFirmaSession); AssertNotAttemptingToImpersonateSelf(activeController.CurrentFirmaSession, personToImpersonate.PersonID); AssertPersonCanBeImpersonated(activeController.CurrentFirmaSession, personToImpersonate); activeController.CurrentFirmaSession.ImpersonateUser(personToImpersonate, optionalPreviousPageUri, out var statusMessage, out var statusWarning); activeController.SetInfoForDisplay(statusMessage); // Warning is optional if (statusWarning != null) { // In Firma, is this the best way to express a "warning" message? Unsure. activeController.SetMessageForDisplay(statusWarning); } HttpRequestStorage.DatabaseEntities.SaveChangesWithNoAuditing(activeController.CurrentPerson.TenantID); }
private static Person CreateNewFirmaPersonWithoutKeystone(Organization userOrganization, CreateAccountViewModel viewModel) { var firmaPerson = new Person(Guid.NewGuid(), viewModel.FirstName, viewModel.LastName, viewModel.Email, Role.Unassigned, DateTime.Now, true, userOrganization, false, viewModel.Email); HttpRequestStorage.DatabaseEntities.AllPeople.Add(firmaPerson); return(firmaPerson); }
private void ShowWarningAboutInactivatedUserForOrganizationPrimaryContact(Person person) { bool inactivePersonWhoIsOrgPrimaryContact = !person.IsActive && person.OrganizationsWhereYouAreThePrimaryContactPerson.Any(); if (inactivePersonWhoIsOrgPrimaryContact) { SetWarningForDisplay($"{person.GetFullNameFirstLast()} is the {FieldDefinitionEnum.OrganizationPrimaryContact.ToType().GetFieldDefinitionLabel()} for one or more {FieldDefinitionEnum.Organization.ToType().GetFieldDefinitionLabelPluralized()}. {person.GetFullNameFirstLast()} has been inactivated, but the {FieldDefinitionEnum.Organization.ToType().GetFieldDefinitionLabelPluralized()} {FieldDefinitionEnum.OrganizationPrimaryContact.ToType().GetFieldDefinitionLabel()}(s) need to be changed."); } }
public void UpdateModel(Person personBeingEdited, FirmaSession currentFirmaSession) { personBeingEdited.FirstName = FirstName; personBeingEdited.LastName = LastName; personBeingEdited.Email = Email; personBeingEdited.Phone = PhoneNumber; personBeingEdited.OrganizationID = OrganizationID; personBeingEdited.LoginName = Username; }
public EditUserViewModel(Person person) { PersonID = person.PersonID; FirstName = person.FirstName; LastName = person.LastName; Email = person.Email; PhoneNumber = person.Phone; OrganizationID = person.OrganizationID; Username = person.LoginName; }
private static void SendExistingKeystoneUserCreatedMessage(Person person, Person currentPerson) { var toolDisplayName = MultiTenantHelpers.GetToolDisplayName(); var subject = $"Invitation to {toolDisplayName}"; var message = $@" <div style='font-size: 12px; font-family: Arial'> Welcome {person.FirstName}, <p> You have been invited by a colleague, {currentPerson.GetFullNameFirstLast()}, to check out <a href=""{SitkaRoute<HomeController>.BuildAbsoluteUrlHttpsFromExpression(x => x.Index())}\"">{toolDisplayName}</a>. </p> <p> Because you have logged into other systems that use the same log in service (Keystone) that {toolDisplayName} uses, you already have an account, but it needs to be activated for {toolDisplayName}. </p> <p> When you have a moment, please activate your account by logging in: </p> <strong>Log in here:</strong> <a href=""{FirmaHelpers.GenerateAbsoluteLogInUrl()}"">{toolDisplayName}</a><br /> <strong>Your user name is:</strong> {person.LoginName}<br /> <p> If you don't remember your password, you will be able to reset it from the link above. </p> <p> Sincerely,<br /> The {toolDisplayName} team<br/><br/><img src=""cid:tool-logo"" width=""160"" /> </p>"; var mailMessage = new MailMessage { From = new MailAddress(FirmaWebConfiguration.DoNotReplyEmail), Subject = subject, Body = message, IsBodyHtml = true }; var tenantAttribute = MultiTenantHelpers.GetTenantAttributeFromCache(); var toolLogo = tenantAttribute.TenantSquareLogoFileResourceInfo ?? tenantAttribute.TenantBannerLogoFileResourceInfo; var htmlView = AlternateView.CreateAlternateViewFromString(message, null, "text/html"); htmlView.LinkedResources.Add( new LinkedResource(new MemoryStream(toolLogo.FileResourceData.Data), "img/jpeg") { ContentId = "tool-logo" }); mailMessage.AlternateViews.Add(htmlView); mailMessage.ReplyToList.Add(currentPerson.Email); mailMessage.To.Add(person.Email); SitkaSmtpClient.Send(mailMessage); }
private PartialViewResult ViewDelete(Person personToDelete, ConfirmDialogFormViewModel viewModel) { // This CanDeletePerson extension method is important when deleting users. We want to prevent accidental data loss // due to unforeseen cascade deletion. var canDelete = personToDelete.CanDeletePerson(CurrentPerson); var confirmMessage = canDelete ? $"Are you sure you want to delete {personToDelete.GetFullNameFirstLastAndOrg()}?" : ConfirmDialogFormViewData.GetStandardCannotDeletePersonMessage("Person", SitkaRoute <UserController> .BuildLinkFromExpression(x => x.Detail(personToDelete), "User profile page")); var viewData = new ConfirmDialogFormViewData(confirmMessage, canDelete); return(RazorPartialView <ConfirmDialogForm, ConfirmDialogFormViewData, ConfirmDialogFormViewModel>(viewData, viewModel)); }
private static Person CreateNewFirmaPerson(KeystoneService.KeystoneUserClaims keystoneUser, Guid?organizationGuid) { Organization organization; if (organizationGuid.HasValue) { organization = HttpRequestStorage.DatabaseEntities.Organizations.GetOrganizationByKeystoneOrganizationGuid(organizationGuid .Value); if (organization == null) { var keystoneClient = new KeystoneDataClient(); var keystoneOrganization = keystoneClient.GetOrganization(organizationGuid.Value); var defaultOrganizationType = HttpRequestStorage.DatabaseEntities.OrganizationTypes.GetDefaultOrganizationType(); var firmaOrganization = new Organization(keystoneOrganization.FullName, true, defaultOrganizationType, Organization.UseOrganizationBoundaryForMatchmakerDefault, false) { KeystoneOrganizationGuid = keystoneOrganization.OrganizationGuid, OrganizationShortName = keystoneOrganization.ShortName, OrganizationUrl = keystoneOrganization.URL }; HttpRequestStorage.DatabaseEntities.AllOrganizations.Add(firmaOrganization); HttpRequestStorage.DatabaseEntities.SaveChanges(); organization = firmaOrganization; } } else { organization = HttpRequestStorage.DatabaseEntities.Organizations.GetUnknownOrganization(); } var firmaPerson = new Person(keystoneUser.UserGuid, keystoneUser.FirstName, keystoneUser.LastName, keystoneUser.Email, Role.Unassigned, DateTime.Now, true, organization, false, keystoneUser.LoginName); HttpRequestStorage.DatabaseEntities.AllPeople.Add(firmaPerson); return(firmaPerson); }
private static void SendExistingKeystoneUserCreatedMessage(Person person, Person currentPerson) { var toolDisplayName = MultiTenantHelpers.GetToolDisplayName(); var subject = $"Invitation to {toolDisplayName}"; var message = $@" <div style='font-size: 12px; font-family: Arial'> Welcome {person.FirstName}, <p> You have been invited by a colleague, {currentPerson.GetFullNameFirstLast()}, to check out <a href=""{SitkaRoute<HomeController>.BuildAbsoluteUrlHttpsFromExpression(x => x.Index())}\"">{toolDisplayName}</a>. </p> <p> Because you have logged into other systems that use the same log in service (Keystone) that {toolDisplayName} uses, you already have an account, but it needs to be activated for {toolDisplayName}. </p> <p> When you have a moment, please activate your account by logging in: </p> <strong>Log in here:</strong> <a href=""{FirmaHelpers.GenerateAbsoluteLogInUrl()}"">{toolDisplayName}</a><br /> <strong>Your user name is:</strong> {person.LoginName}<br /> <p> If you don't remember your password, you will be able to reset it from the link above. </p> <p> Sincerely,<br /> The {toolDisplayName} team </p>"; var mailMessage = new MailMessage { From = new MailAddress(FirmaWebConfiguration.DoNotReplyEmail), Subject = subject, Body = message, IsBodyHtml = true }; mailMessage.ReplyToList.Add(currentPerson.Email); mailMessage.To.Add(person.Email); SitkaSmtpClient.Send(mailMessage); }
public static void AssertPersonCanBeImpersonated(FirmaSession firmaSession, Person personToImpersonate) { Check.RequireNotNull(personToImpersonate, "Can't impersonate a null/anonymous user"); AssertNotAttemptingToImpersonateSelf(firmaSession, personToImpersonate.PersonID); }
/// <summary> /// Creates a "blank" object of this type and populates primitives with defaults /// </summary> public static ProjectContactUpdate CreateNewBlank(ProjectUpdateBatch projectUpdateBatch, Person contact, ContactRelationshipType contactRelationshipType) { return new ProjectContactUpdate(projectUpdateBatch, contact, contactRelationshipType); }