Beispiel #1
0
        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));
            }
        }
Beispiel #2
0
        /// <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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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.");
            }
        }
Beispiel #5
0
 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;
 }
Beispiel #6
0
 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;
 }
Beispiel #7
0
        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);
        }
Beispiel #8
0
        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));
        }
Beispiel #9
0
        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);
        }
Beispiel #10
0
        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);
        }
Beispiel #11
0
 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);
 }