public int ShoveRawJsonStringIntoTable(SocrataDataMartRawJsonImportTableType socrataDataMartRawJsonImportTableType,
                                               DateTime lastFinanceApiLoadDate,
                                               int?optionalBienniumFiscalYear,
                                               string rawJsonString)
        {
            Logger.Info($"Starting '{JobName}' ShoveRawJsonStringIntoTable");
            SocrataDataMartRawJsonImport newRawJsonImport = new SocrataDataMartRawJsonImport(DateTime.Now, socrataDataMartRawJsonImportTableType, rawJsonString, JsonImportStatusType.NotYetProcessed);

            newRawJsonImport.FinanceApiLastLoadDate = lastFinanceApiLoadDate;
            newRawJsonImport.BienniumFiscalYear     = optionalBienniumFiscalYear;

            HttpRequestStorage.DatabaseEntities.SocrataDataMartRawJsonImports.Add(newRawJsonImport);

            // We use the System Person if none is available, because that indicates we are running from an automated context (Hangfire)
            if (HttpRequestStorage.PersonIsSet())
            {
                HttpRequestStorage.DatabaseEntities.SaveChanges();
            }
            else
            {
                var systemUser = HttpRequestStorage.DatabaseEntities.People.GetSystemUser();
                HttpRequestStorage.DatabaseEntities.SaveChanges(systemUser);
            }

            // Normally we might return the object here, but this thing is potentially so huge we want to dump it just as soon as we no longer need it.
            Logger.Info($"Ending '{JobName}' ShoveRawJsonStringIntoTable");
            return(newRawJsonImport.SocrataDataMartRawJsonImportID);
        }
Ejemplo n.º 2
0
        public void TheSetUp()
        {
            HttpRequestStorage.StartContextForTest();
            var randomPerson = HttpRequestStorage.DatabaseEntities.People.First();

            //HttpRequestStorage.Person = randomPerson;
            HttpRequestStorage.FirmaSession = new FirmaSession(HttpRequestStorage.DatabaseEntities, randomPerson);
        }
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            var principal = HttpRequestStorage.GetHttpContextUserThroughOwin();

            var attributeType     = typeof(AnonymousUnclassifiedFeature);
            var skipAuthorization = filterContext.ActionDescriptor.IsDefined(attributeType, true) || filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(attributeType, true);

            if (!principal.Identity.IsAuthenticated && !skipAuthorization)
            {
                base.OnAuthorization(filterContext);
            }
        }
Ejemplo n.º 4
0
        // Is this called only on initial authorization? or every call? I think only first time, but let's be sure.
        public override void OnAuthorization(System.Web.Mvc.AuthorizationContext filterContext)
        {
            Roles = CalculateRoleNameStringFromFeature();

            var userIdentity = HttpRequestStorage.GetHttpContextUserThroughOwin().Identity;
            //if ()
            var firmaSessionFromClaimsIdentity = ClaimsIdentityHelper.FirmaSessionFromClaimsIdentity(HttpRequestStorage.GetHttpContextAuthenticationThroughOwin(), HttpRequestStorage.Tenant);

            HttpRequestStorage.FirmaSession = firmaSessionFromClaimsIdentity;

            AddLocalUserAccountRolesToClaims(HttpRequestStorage.FirmaSession, userIdentity);

            // This ends up making the calls into the RoleProvider
            base.OnAuthorization(filterContext);
        }
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            var principal = HttpRequestStorage.GetHttpContextUserThroughOwin();

            var attributeType     = typeof(AnonymousUnclassifiedFeature);
            var skipAuthorization = filterContext.ActionDescriptor.IsDefined(attributeType, true) || filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(attributeType, true);

            if (!principal.Identity.IsAuthenticated && !skipAuthorization)
            {
                var baseFeatureType      = typeof(FirmaBaseFeature);
                var baseFeatureAttribute = filterContext.ActionDescriptor.GetCustomAttributes(baseFeatureType, true).SingleOrDefault();

                if (baseFeatureAttribute != null && ((FirmaBaseFeature)baseFeatureAttribute).GrantedRoles.Any())
                {
                    base.OnAuthorization(filterContext);
                }
            }
        }
 public void TheTearDown()
 {
     HttpRequestStorage.EndContextForTest();
 }
 public void TheSetUp()
 {
     HttpRequestStorage.StartContextForTest();
     HttpRequestStorage.Person = HttpRequestStorage.DatabaseEntities.People.First();
 }
Ejemplo n.º 8
0
        public ActionResult Invite(InviteViewModel viewModel)
        {
            var toolDisplayName = MultiTenantHelpers.GetToolDisplayName();
            var homeUrl         = SitkaRoute <HomeController> .BuildAbsoluteUrlHttpsFromExpression(x => x.Index());

            var supportUrl = SitkaRoute <HelpController> .BuildAbsoluteUrlHttpsFromExpression(x => x.RequestSupport());

            var tenantAttribute        = MultiTenantHelpers.GetTenantAttributeFromCache();
            var primaryContactFullName = tenantAttribute.PrimaryContactPerson
                                         .GetFullNameFirstLast();
            var primaryContactOrganizationName = tenantAttribute.PrimaryContactPerson
                                                 .Organization.OrganizationName;
            var primaryContactEmail = tenantAttribute.PrimaryContactPerson.Email;

            KeystoneService.KeystoneApiResponse <KeystoneService.KeystoneNewUserModel> keystoneNewUserResponse = null;

            var theSelectedOrganization = HttpRequestStorage.DatabaseEntities.Organizations.GetOrganization(viewModel.OrganizationID);

            Check.EnsureNotNull(theSelectedOrganization);
            bool organizationSelectedIsNotUnknownOrg = !theSelectedOrganization.IsUnknown();

            if (organizationSelectedIsNotUnknownOrg && theSelectedOrganization.KeystoneOrganizationGuid == null)
            {
                // If we pick an Org, it must already be in Keystone, and so the local dbo.Organization must have a valid OrganizationGuid
                ModelState.AddModelError("OrganizationID", $"Organization is not in Keystone");
            }
            else
            {
                var inviteModel = new KeystoneService.KeystoneInviteModel
                {
                    FirstName   = viewModel.FirstName,
                    LastName    = viewModel.LastName,
                    Email       = viewModel.Email,
                    SiteName    = toolDisplayName,
                    Subject     = $"Invitation to {toolDisplayName}",
                    WelcomeText =
                        $"You have been invited by {CurrentPerson.GetFullNameFirstLast()} at {CurrentPerson.Organization.OrganizationName} ({CurrentPerson.Email}), to create an account in <a href=\"{homeUrl}\">{toolDisplayName}</a>.",
                    RedirectURL      = homeUrl,
                    SupportBlock     = $"If you have any questions, please visit our <a href=\"{supportUrl}\">support page</a> or contact {primaryContactFullName} at {primaryContactOrganizationName} ({primaryContactEmail})",
                    OrganizationGuid = theSelectedOrganization.KeystoneOrganizationGuid,
                    SignatureBlock   = $"The {toolDisplayName} team"
                };

                var keystoneService = new KeystoneService(HttpRequestStorage.GetHttpContextUserThroughOwin());
                keystoneNewUserResponse = keystoneService.Invite(inviteModel);
                if (keystoneNewUserResponse.StatusCode != HttpStatusCode.OK || keystoneNewUserResponse.Error != null)
                {
                    ModelState.AddModelError("Email", $"There was a problem inviting the user to Keystone: {keystoneNewUserResponse.Error.Message}.");
                    if (keystoneNewUserResponse.Error.ModelState != null)
                    {
                        foreach (var modelStateKey in keystoneNewUserResponse.Error.ModelState.Keys)
                        {
                            foreach (var err in keystoneNewUserResponse.Error.ModelState[modelStateKey])
                            {
                                ModelState.AddModelError(modelStateKey, err);
                            }
                        }
                    }
                }
                else
                {
                    // Sanity check - did we get back the same Organization GUID we asked for?
                    // (The GUID could also be null here, for the unknown org, but in that case we'll also get back null so this check is still valid.)
                    var keystoneUserTmp = keystoneNewUserResponse.Payload.Claims;
                    if (keystoneUserTmp.OrganizationGuid != inviteModel.OrganizationGuid)
                    {
                        string errorMessage = $"There was a problem with the Keystone Organization GUID Invited:{inviteModel.OrganizationGuid} Received back: {keystoneUserTmp.OrganizationGuid}. Please contact Sitka for assistance.";
                        _logger.Error(errorMessage);
                        ModelState.AddModelError("OrganizationID", errorMessage);
                    }
                }
            }

            if (!ModelState.IsValid)
            {
                return(ViewInvite(viewModel));
            }

            var keystoneUser = keystoneNewUserResponse.Payload.Claims;
            var existingUser = HttpRequestStorage.DatabaseEntities.People.GetPersonByPersonGuid(keystoneUser.UserGuid);

            if (existingUser != null)
            {
                SetMessageForDisplay($"{existingUser.GetFullNameFirstLastAndOrgAsUrl(CurrentFirmaSession)} already has an account.</a>.");
                return(RedirectToAction(new SitkaRoute <UserController>(x => x.Detail(existingUser))));
            }

            var newUser = CreateNewFirmaPerson(keystoneUser, keystoneUser.OrganizationGuid);

            HttpRequestStorage.DatabaseEntities.SaveChanges();

            newUser.RoleID = Role.Normal.RoleID;

            HttpRequestStorage.DatabaseEntities.SaveChanges();

            if (!viewModel.DoNotSendInviteEmailIfExisting && !keystoneNewUserResponse.Payload.Created)
            {
                SendExistingKeystoneUserCreatedMessage(newUser, CurrentPerson);
            }

            SetMessageForDisplay(
                $"{newUser.GetFullNameFirstLastAndOrgAsUrl(CurrentFirmaSession)} successfully added. You may want to assign them a role</a>.");
            return(RedirectToAction(new SitkaRoute <UserController>(x => x.Detail(newUser))));
        }
Ejemplo n.º 9
0
        public ActionResult Invite(InviteViewModel viewModel)
        {
            var toolDisplayName = "Orange County Stormwater Tools";
            var homeUrl         = SitkaRoute <HomeController> .BuildAbsoluteUrlHttpsFromExpression(x => x.Index(), NeptuneWebConfiguration.CanonicalHostNameRoot);

            var loginUrl =
                SitkaRoute <AccountController> .BuildAbsoluteUrlHttpsFromExpression(x => x.LogOn(),
                                                                                    NeptuneWebConfiguration.CanonicalHostName);

            var supportUrl = SitkaRoute <HelpController> .BuildAbsoluteUrlHttpsFromExpression(x => x.Support(), NeptuneWebConfiguration.CanonicalHostNameRoot);

            var inviteModel = new KeystoneService.KeystoneInviteModel
            {
                FirstName        = viewModel.FirstName,
                LastName         = viewModel.LastName,
                Email            = viewModel.Email,
                SiteName         = toolDisplayName,
                Subject          = $"Invitation to the {toolDisplayName}",
                WelcomeText      = $"You have been invited by a colleague to create an account in the <a href=\"{homeUrl}\">{toolDisplayName}</a>. The {toolDisplayName} application is a collaborative effort of Orange County Public Works, MS4 Permittees, and other organizations.",
                RedirectURL      = loginUrl,
                SupportBlock     = $"If you have any questions, please visit our <a href=\"{supportUrl}\">support page</a>",
                OrganizationGuid = viewModel.OrganizationGuid,
                SignatureBlock   = $"The {toolDisplayName} team"
            };

            var keystoneService = new KeystoneService(HttpRequestStorage.GetHttpContextUserThroughOwin());
            var response        = keystoneService.Invite(inviteModel);

            if (response.StatusCode != HttpStatusCode.OK || response.Error != null)
            {
                ModelState.AddModelError("Email", $"There was a problem inviting the user to Keystone: {response.Error.Message}.");
                if (response.Error.ModelState != null)
                {
                    foreach (var modelStateKey in response.Error.ModelState.Keys)
                    {
                        foreach (var err in response.Error.ModelState[modelStateKey])
                        {
                            ModelState.AddModelError(modelStateKey, err);
                        }
                    }
                }
            }

            if (!ModelState.IsValid)
            {
                return(ViewInvite(viewModel));
            }

            var keystoneUser = response.Payload.Claims;
            var existingUser = HttpRequestStorage.DatabaseEntities.People.GetPersonByPersonGuid(keystoneUser.UserGuid);

            if (existingUser != null)
            {
                SetMessageForDisplay($"{existingUser.GetFullNameFirstLastAndOrgAsUrl()} already has an account.</a>.");
                return(RedirectToAction(new SitkaRoute <UserController>(x => x.Detail(existingUser))));
            }

            var setJurisdictions = !CurrentPerson.IsAdministrator();
            var newUser          = CreateNewFirmaPerson(keystoneUser, keystoneUser.OrganizationGuid);

            HttpRequestStorage.DatabaseEntities.SaveChanges();

            if (setJurisdictions)
            {
                foreach (var stormwaterJurisdictionPerson in CurrentPerson.StormwaterJurisdictionPeople)
                {
                    newUser.StormwaterJurisdictionPeople.Add(new StormwaterJurisdictionPerson(stormwaterJurisdictionPerson.StormwaterJurisdictionID, newUser.PersonID));
                }
            }

            newUser.RoleID = Role.JurisdictionEditor.RoleID;

            HttpRequestStorage.DatabaseEntities.SaveChanges();

            SetMessageForDisplay(
                $"{newUser.GetFullNameFirstLastAndOrgAsUrl()} successfully added. You may want to assign them a role</a>.");
            return(RedirectToAction(new SitkaRoute <UserController>(x => x.Detail(newUser))));
        }
Ejemplo n.º 10
0
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            Roles = CalculateRoleNameStringFromFeature();

            // MR #321 - force reload of user roles onto IClaimsIdentity
            KeystoneOpenIDUtilities.AddLocalUserAccountRolesToClaims(HttpRequestStorage.Person, HttpRequestStorage.GetHttpContextUserThroughOwin().Identity);

            // This ends up making the calls into the RoleProvider
            base.OnAuthorization(filterContext);
        }