diff --git a/CSETWebApi/CSETWeb_Api/CSETWebCore.UpgradeLibrary/VersionUpgrader/ConvertDatabase12120.cs b/CSETWebApi/CSETWeb_Api/CSETWebCore.UpgradeLibrary/VersionUpgrader/ConvertDatabase12120.cs index 64e0f988cc..e081efe08c 100644 --- a/CSETWebApi/CSETWeb_Api/CSETWebCore.UpgradeLibrary/VersionUpgrader/ConvertDatabase12120.cs +++ b/CSETWebApi/CSETWeb_Api/CSETWebCore.UpgradeLibrary/VersionUpgrader/ConvertDatabase12120.cs @@ -24,6 +24,8 @@ public override void Execute(SqlConnection conn) { try { + RunFile(Path.Combine(this.applicationPath, "VersionUpgrader", "SQL", "12110_to_12120.sql"), conn); + RunFile(Path.Combine(this.applicationPath, "VersionUpgrader", "SQL", "12110_to_12120_data.sql"), conn); this.UpgradeToVersionLocalDB(conn, myVersion); } catch (Exception e) diff --git a/CSETWebApi/CSETWeb_Api/CSETWebCore.UpgradeLibrary/VersionUpgrader/SQL/12110_to_12120.sql b/CSETWebApi/CSETWeb_Api/CSETWebCore.UpgradeLibrary/VersionUpgrader/SQL/12110_to_12120.sql new file mode 100644 index 0000000000..5bd6384bff --- /dev/null +++ b/CSETWebApi/CSETWeb_Api/CSETWebCore.UpgradeLibrary/VersionUpgrader/SQL/12110_to_12120.sql @@ -0,0 +1,180 @@ +/* +Run this script on: + + (localdb)\INLLocalDB2022.CSETWeb12110 - This database will be modified + +to synchronize it with: + + (localdb)\INLLocalDB2022.CSETWeb12120 + +You are recommended to back up your database before running this script + +Script created by SQL Compare version 14.10.9.22680 from Red Gate Software Ltd at 12/12/2023 1:39:53 PM + +*/ +SET NUMERIC_ROUNDABORT OFF +GO +SET ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL, ARITHABORT, QUOTED_IDENTIFIER, ANSI_NULLS ON +GO +SET XACT_ABORT ON +GO +SET TRANSACTION ISOLATION LEVEL Serializable +GO +BEGIN TRANSACTION +GO +IF @@ERROR <> 0 SET NOEXEC ON +GO +PRINT N'Altering [dbo].[usp_getStandardsResultsByCategory]' +GO + +-- ============================================= +-- Author: hansbk +-- Create date: 8/1/2018 +-- Description: Stub needs completed +-- ============================================= +ALTER PROCEDURE [dbo].[usp_getStandardsResultsByCategory] + @assessment_id int +AS +BEGIN + -- SET NOCOUNT ON added to prevent extra result sets from + -- interfering with SELECT statements. + SET NOCOUNT ON; + + SET TRANSACTION ISOLATION LEVEL read uncommitted + + /* +TODO this needs to take into account requirements vs questions +get the question set then for all the questions take the total risk (in this set only) +then calculate the total risk in each question_group_heading(category) +then calculate the actual percentage of the total risk in each category +order by the total +*/ +declare @applicationMode nvarchar(50) + +exec dbo.GetApplicationModeDefault @assessment_id, @ApplicationMode output + + +declare @maxRank int +if(@ApplicationMode = 'Questions Based') +begin + + + + IF OBJECT_ID('tempdb..#Temp') IS NOT NULL DROP TABLE #Temp + IF OBJECT_ID('tempdb..#TempAnswered') IS NOT NULL DROP TABLE #TempAnswered + + SELECT s.Set_Name,Question_Group_Heading,isnull(count(c.question_id),0) qc into #temp + FROM Answer_Questions a + join NEW_QUESTION c on a.Question_Or_Requirement_Id=c.Question_Id + join vQuestion_Headings h on c.Heading_Pair_Id=h.heading_pair_Id + join NEW_QUESTION_SETS s on c.Question_Id = s.Question_Id + join AVAILABLE_STANDARDS v on s.Set_Name = v.Set_Name + join NEW_QUESTION_LEVELS l on s.New_Question_Set_Id = l.New_Question_Set_Id + join STANDARD_SELECTION ss on v.Assessment_Id = ss.Assessment_Id + join UNIVERSAL_SAL_LEVEL ul on ss.Selected_Sal_Level = ul.Full_Name_Sal + where a.Assessment_Id = @assessment_id and a.Answer_Text != 'NA' and v.Selected = 1 and v.Assessment_Id = @assessment_id and l.Universal_Sal_Level = ul.Universal_Sal_Level + group by s.Set_Name, Question_Group_Heading + + insert into #temp (Set_Name,Question_Group_Heading, QC) + select a.Set_name,a.Question_Group_Heading, qc=0 from + (select * from (select distinct question_group_heading from #temp) a, (select distinct set_name from #temp) b) a + left join #temp on a.question_group_heading=#temp.question_group_heading and a.set_name = #temp.set_name + where #temp.set_name is null + + SELECT s.Set_Name,Question_Group_Heading,isnull(count(c.question_id),0) qc into #tempAnswered + FROM Answer_Questions a + join NEW_QUESTION c on a.Question_Or_Requirement_Id=c.Question_Id + join vQuestion_Headings h on c.Heading_Pair_Id=h.heading_pair_Id + join NEW_QUESTION_SETS s on c.Question_Id = s.Question_Id + join AVAILABLE_STANDARDS v on s.Set_Name = v.Set_Name + join NEW_QUESTION_LEVELS l on s.New_Question_Set_Id = l.New_Question_Set_Id + join STANDARD_SELECTION ss on v.Assessment_Id = ss.Assessment_Id + join UNIVERSAL_SAL_LEVEL ul on ss.Selected_Sal_Level = ul.Full_Name_Sal + where a.Assessment_Id = @assessment_id and a.Answer_Text in ('Y','A') and v.Selected = 1 and v.Assessment_Id = @assessment_id and l.Universal_Sal_Level = ul.Universal_Sal_Level + group by s.Set_Name, Question_Group_Heading + + select t.Set_Name, + s.Short_Name, + t.Question_Group_Heading, + isnull(a.qc,0) yaCount, + isnull(t.qc,0) Actualcr, + round(isnull(cast(a.qc as decimal(18,3))/t.qc,0),5) * 100 [prc] + from #temp t left join #tempAnswered a on t.Set_Name = a.Set_Name and t.Question_Group_Heading = a.Question_Group_Heading + join [SETS] s on t.Set_Name = s.Set_Name + order by Question_Group_Heading desc +end +else +begin + + IF OBJECT_ID('tempdb..#TempR') IS NOT NULL DROP TABLE #TempR + IF OBJECT_ID('tempdb..#TempRAnswer') IS NOT NULL DROP TABLE #TempRAnswer + + SELECT s.set_name, h.Question_Group_Heading, isnull(count(c.Requirement_Id),0) qc into #tempR + FROM Answer_Requirements a + join NEW_REQUIREMENT c on a.Question_Or_Requirement_Id=c.Requirement_Id + join QUESTION_GROUP_HEADING h on c.Question_Group_Heading_Id = h.Question_Group_Heading_Id + join REQUIREMENT_SETS s on c.Requirement_Id = s.Requirement_Id + join AVAILABLE_STANDARDS v on s.Set_Name = v.Set_Name + where a.Assessment_Id = @assessment_id and v.Assessment_Id = a.Assessment_Id and v.Selected = 1 and a.Answer_Text <> 'NA' + group by s.set_name, Question_Group_Heading + + /**for multiple sets get the unique list of sets and question_group headers + take the cross product + left join and fill with zero + Essentially fill in the gaps on the categories + */ + + + insert into #tempR (Set_Name,Question_Group_Heading, QC) + select a.Set_name,a.Question_Group_Heading, qc=0 from + (select * from (select distinct question_group_heading from #tempR) a, (select distinct set_name from #tempR) b) a + left join #tempR on a.question_group_heading=#tempR.question_group_heading and a.set_name = #tempR.set_name + where #tempR.set_name is null + + SELECT s.set_name, h.Question_Group_Heading,count(c.Requirement_Id) qc into #tempRAnswer + FROM Answer_Requirements a + join NEW_REQUIREMENT c on a.Question_Or_Requirement_Id=c.Requirement_Id + join QUESTION_GROUP_HEADING h on c.Question_Group_Heading_Id = h.Question_Group_Heading_Id + join REQUIREMENT_SETS s on c.Requirement_Id = s.Requirement_Id + join AVAILABLE_STANDARDS v on s.Set_Name = v.Set_Name + where a.Assessment_Id = @assessment_id and v.Assessment_Id = a.Assessment_Id and v.Selected = 1 and a.Answer_Text in ('Y','A') + group by s.set_name, Question_Group_Heading + + select t.Set_Name, + s.Short_Name, + t.Question_Group_Heading, + isnull(a.qc,0) yaCount, + isnull(t.qc,0) Actualcr, + --isnull(a.qc,0)/cast(t.qc as decimal(18,3)) * 100 [prc] + round(isnull(cast(a.qc as decimal(18,3))/t.qc,0),5) * 100 [prc] + from #tempR t + left join #tempRAnswer a on t.Set_Name = a.Set_Name and t.Question_Group_Heading = a.Question_Group_Heading + join [SETS] s on t.Set_Name = s.Set_Name + order by Question_Group_Heading desc +end +END +GO +IF @@ERROR <> 0 SET NOEXEC ON +GO +COMMIT TRANSACTION +GO +IF @@ERROR <> 0 SET NOEXEC ON +GO +-- This statement writes to the SQL Server Log so SQL Monitor can show this deployment. +IF HAS_PERMS_BY_NAME(N'sys.xp_logevent', N'OBJECT', N'EXECUTE') = 1 +BEGIN + DECLARE @databaseName AS nvarchar(2048), @eventMessage AS nvarchar(2048) + SET @databaseName = REPLACE(REPLACE(DB_NAME(), N'\', N'\\'), N'"', N'\"') + SET @eventMessage = N'Redgate SQL Compare: { "deployment": { "description": "Redgate SQL Compare deployed to ' + @databaseName + N'", "database": "' + @databaseName + N'" }}' + EXECUTE sys.xp_logevent 55000, @eventMessage +END +GO +DECLARE @Success AS BIT +SET @Success = 1 +SET NOEXEC OFF +IF (@Success = 1) PRINT 'The database update succeeded' +ELSE BEGIN + IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION + PRINT 'The database update failed' +END +GO diff --git a/CSETWebApi/CSETWeb_Api/CSETWebCore.UpgradeLibrary/VersionUpgrader/SQL/12110_to_12120_data.sql b/CSETWebApi/CSETWeb_Api/CSETWebCore.UpgradeLibrary/VersionUpgrader/SQL/12110_to_12120_data.sql new file mode 100644 index 0000000000..72e57d0d86 --- /dev/null +++ b/CSETWebApi/CSETWeb_Api/CSETWebCore.UpgradeLibrary/VersionUpgrader/SQL/12110_to_12120_data.sql @@ -0,0 +1,897 @@ +/* +Run this script on: + +(localdb)\INLLocalDB2022.CSETWeb12110 - This database will be modified + +to synchronize it with: + +(localdb)\INLLocalDB2022.CSETWeb12120 + +You are recommended to back up your database before running this script + +Script created by SQL Data Compare version 14.10.9.22680 from Red Gate Software Ltd at 12/12/2023 1:42:20 PM + +*/ + +SET NUMERIC_ROUNDABORT OFF +GO +SET ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL, ARITHABORT, QUOTED_IDENTIFIER, ANSI_NULLS, NOCOUNT ON +GO +SET DATEFORMAT YMD +GO +SET XACT_ABORT ON +GO +SET TRANSACTION ISOLATION LEVEL Serializable +GO +BEGIN TRANSACTION + +PRINT(N'Drop constraints from [dbo].[MATURITY_QUESTIONS]') +ALTER TABLE [dbo].[MATURITY_QUESTIONS] NOCHECK CONSTRAINT [FK__MATURITY___Matur__5B638405] +ALTER TABLE [dbo].[MATURITY_QUESTIONS] NOCHECK CONSTRAINT [FK_MATURITY_QUESTIONS_MATURITY_GROUPINGS] +ALTER TABLE [dbo].[MATURITY_QUESTIONS] NOCHECK CONSTRAINT [FK_MATURITY_QUESTIONS_MATURITY_LEVELS] +ALTER TABLE [dbo].[MATURITY_QUESTIONS] NOCHECK CONSTRAINT [FK_MATURITY_QUESTIONS_MATURITY_MODELS] +ALTER TABLE [dbo].[MATURITY_QUESTIONS] NOCHECK CONSTRAINT [FK_MATURITY_QUESTIONS_MATURITY_OPTIONS] +ALTER TABLE [dbo].[MATURITY_QUESTIONS] NOCHECK CONSTRAINT [FK_MATURITY_QUESTIONS_MATURITY_QUESTION_TYPES] +ALTER TABLE [dbo].[MATURITY_QUESTIONS] NOCHECK CONSTRAINT [FK_MATURITY_QUESTIONS_MATURITY_QUESTIONS] + +PRINT(N'Drop constraint FK__HYDRO_DAT__Mat_Q__38652BE2 from [dbo].[HYDRO_DATA]') +ALTER TABLE [dbo].[HYDRO_DATA] NOCHECK CONSTRAINT [FK__HYDRO_DAT__Mat_Q__38652BE2] + +PRINT(N'Drop constraint FK_MATURITY_QUESTIONS_MAT_QUESTION_ID from [dbo].[ISE_ACTIONS]') +ALTER TABLE [dbo].[ISE_ACTIONS] NOCHECK CONSTRAINT [FK_MATURITY_QUESTIONS_MAT_QUESTION_ID] + +PRINT(N'Drop constraint FK_MATURITY_ANSWER_OPTIONS_MATURITY_QUESTIONS1 from [dbo].[MATURITY_ANSWER_OPTIONS]') +ALTER TABLE [dbo].[MATURITY_ANSWER_OPTIONS] NOCHECK CONSTRAINT [FK_MATURITY_ANSWER_OPTIONS_MATURITY_QUESTIONS1] + +PRINT(N'Drop constraint FK_MATURITY_QUESTION_PROPS_MATURITY_QUESTIONS from [dbo].[MATURITY_QUESTION_PROPS]') +ALTER TABLE [dbo].[MATURITY_QUESTION_PROPS] NOCHECK CONSTRAINT [FK_MATURITY_QUESTION_PROPS_MATURITY_QUESTIONS] + +PRINT(N'Drop constraint FK_MATURITY_REFERENCE_TEXT_MATURITY_QUESTIONS from [dbo].[MATURITY_REFERENCE_TEXT]') +ALTER TABLE [dbo].[MATURITY_REFERENCE_TEXT] NOCHECK CONSTRAINT [FK_MATURITY_REFERENCE_TEXT_MATURITY_QUESTIONS] + +PRINT(N'Drop constraint FK_MATURITY_REFERENCES_MATURITY_QUESTIONS from [dbo].[MATURITY_REFERENCES]') +ALTER TABLE [dbo].[MATURITY_REFERENCES] NOCHECK CONSTRAINT [FK_MATURITY_REFERENCES_MATURITY_QUESTIONS] + +PRINT(N'Drop constraint FK_MATURITY_SOURCE_FILES_MATURITY_QUESTIONS from [dbo].[MATURITY_SOURCE_FILES]') +ALTER TABLE [dbo].[MATURITY_SOURCE_FILES] NOCHECK CONSTRAINT [FK_MATURITY_SOURCE_FILES_MATURITY_QUESTIONS] + +PRINT(N'Drop constraint FK_MATURITY_SUB_MODEL_QUESTIONS_MATURITY_QUESTIONS from [dbo].[MATURITY_SUB_MODEL_QUESTIONS]') +ALTER TABLE [dbo].[MATURITY_SUB_MODEL_QUESTIONS] NOCHECK CONSTRAINT [FK_MATURITY_SUB_MODEL_QUESTIONS_MATURITY_QUESTIONS] + +PRINT(N'Drop constraint FK_TTP_MAT_QUESTION_MATURITY_QUESTIONS from [dbo].[TTP_MAT_QUESTION]') +ALTER TABLE [dbo].[TTP_MAT_QUESTION] NOCHECK CONSTRAINT [FK_TTP_MAT_QUESTION_MATURITY_QUESTIONS] + +PRINT(N'Drop constraints from [dbo].[MATURITY_GROUPINGS]') +ALTER TABLE [dbo].[MATURITY_GROUPINGS] NOCHECK CONSTRAINT [FK_MATURITY_GROUPINGS_MATURITY_GROUPING_TYPES] +ALTER TABLE [dbo].[MATURITY_GROUPINGS] NOCHECK CONSTRAINT [FK_MATURITY_GROUPINGS_MATURITY_MODELS] + +PRINT(N'Drop constraint FK_MATURITY_DOMAIN_REMARKS_MATURITY_GROUPINGS from [dbo].[MATURITY_DOMAIN_REMARKS]') +ALTER TABLE [dbo].[MATURITY_DOMAIN_REMARKS] NOCHECK CONSTRAINT [FK_MATURITY_DOMAIN_REMARKS_MATURITY_GROUPINGS] + +PRINT(N'Drop constraints from [dbo].[NEW_REQUIREMENT]') +ALTER TABLE [dbo].[NEW_REQUIREMENT] NOCHECK CONSTRAINT [FK_NEW_REQUIREMENT_NCSF_Category] +ALTER TABLE [dbo].[NEW_REQUIREMENT] NOCHECK CONSTRAINT [FK_NEW_REQUIREMENT_QUESTION_GROUP_HEADING] +ALTER TABLE [dbo].[NEW_REQUIREMENT] NOCHECK CONSTRAINT [FK_NEW_REQUIREMENT_SETS] +ALTER TABLE [dbo].[NEW_REQUIREMENT] NOCHECK CONSTRAINT [FK_NEW_REQUIREMENT_STANDARD_CATEGORY] + +PRINT(N'Drop constraint FK_FINANCIAL_REQUIREMENTS_NEW_REQUIREMENT from [dbo].[FINANCIAL_REQUIREMENTS]') +ALTER TABLE [dbo].[FINANCIAL_REQUIREMENTS] NOCHECK CONSTRAINT [FK_FINANCIAL_REQUIREMENTS_NEW_REQUIREMENT] + +PRINT(N'Drop constraint FK_NERC_RISK_RANKING_NEW_REQUIREMENT from [dbo].[NERC_RISK_RANKING]') +ALTER TABLE [dbo].[NERC_RISK_RANKING] NOCHECK CONSTRAINT [FK_NERC_RISK_RANKING_NEW_REQUIREMENT] + +PRINT(N'Drop constraint FK_Parameter_Requirements_NEW_REQUIREMENT from [dbo].[PARAMETER_REQUIREMENTS]') +ALTER TABLE [dbo].[PARAMETER_REQUIREMENTS] NOCHECK CONSTRAINT [FK_Parameter_Requirements_NEW_REQUIREMENT] + +PRINT(N'Drop constraint FK_REQUIREMENT_LEVELS_NEW_REQUIREMENT from [dbo].[REQUIREMENT_LEVELS]') +ALTER TABLE [dbo].[REQUIREMENT_LEVELS] NOCHECK CONSTRAINT [FK_REQUIREMENT_LEVELS_NEW_REQUIREMENT] + +PRINT(N'Drop constraint FK_REQUIREMENT_QUESTIONS_NEW_REQUIREMENT from [dbo].[REQUIREMENT_QUESTIONS]') +ALTER TABLE [dbo].[REQUIREMENT_QUESTIONS] NOCHECK CONSTRAINT [FK_REQUIREMENT_QUESTIONS_NEW_REQUIREMENT] + +PRINT(N'Drop constraint FK_REQUIREMENT_QUESTIONS_SETS_NEW_REQUIREMENT from [dbo].[REQUIREMENT_QUESTIONS_SETS]') +ALTER TABLE [dbo].[REQUIREMENT_QUESTIONS_SETS] NOCHECK CONSTRAINT [FK_REQUIREMENT_QUESTIONS_SETS_NEW_REQUIREMENT] + +PRINT(N'Drop constraint FK_REQUIREMENT_REFERENCES_NEW_REQUIREMENT from [dbo].[REQUIREMENT_REFERENCES]') +ALTER TABLE [dbo].[REQUIREMENT_REFERENCES] NOCHECK CONSTRAINT [FK_REQUIREMENT_REFERENCES_NEW_REQUIREMENT] + +PRINT(N'Drop constraint FK_REQUIREMENT_SETS_NEW_REQUIREMENT from [dbo].[REQUIREMENT_SETS]') +ALTER TABLE [dbo].[REQUIREMENT_SETS] NOCHECK CONSTRAINT [FK_REQUIREMENT_SETS_NEW_REQUIREMENT] + +PRINT(N'Drop constraint FK_REQUIREMENT_SOURCE_FILES_NEW_REQUIREMENT from [dbo].[REQUIREMENT_SOURCE_FILES]') +ALTER TABLE [dbo].[REQUIREMENT_SOURCE_FILES] NOCHECK CONSTRAINT [FK_REQUIREMENT_SOURCE_FILES_NEW_REQUIREMENT] + +PRINT(N'Drop constraints from [dbo].[MATURITY_MODELS]') +ALTER TABLE [dbo].[MATURITY_MODELS] NOCHECK CONSTRAINT [FK_MATURITY_MODELS_MATURITY_LEVEL_USAGE_TYPES] + +PRINT(N'Drop constraint FK_ANALYTICS_MATURITY_GROUPINGS_MATURITY_MODELS from [dbo].[ANALYTICS_MATURITY_GROUPINGS]') +ALTER TABLE [dbo].[ANALYTICS_MATURITY_GROUPINGS] NOCHECK CONSTRAINT [FK_ANALYTICS_MATURITY_GROUPINGS_MATURITY_MODELS] + +PRINT(N'Drop constraint FK__AVAILABLE__model__6F6A7CB2 from [dbo].[AVAILABLE_MATURITY_MODELS]') +ALTER TABLE [dbo].[AVAILABLE_MATURITY_MODELS] NOCHECK CONSTRAINT [FK__AVAILABLE__model__6F6A7CB2] + +PRINT(N'Drop constraint FK_MATURITY_LEVELS_MATURITY_MODELS from [dbo].[MATURITY_LEVELS]') +ALTER TABLE [dbo].[MATURITY_LEVELS] NOCHECK CONSTRAINT [FK_MATURITY_LEVELS_MATURITY_MODELS] + +PRINT(N'Drop constraint FK_MODES_SETS_MATURITY_MODELS_MATURITY_MODELS from [dbo].[MODES_SETS_MATURITY_MODELS]') +ALTER TABLE [dbo].[MODES_SETS_MATURITY_MODELS] NOCHECK CONSTRAINT [FK_MODES_SETS_MATURITY_MODELS_MATURITY_MODELS] + +PRINT(N'Drop constraints from [dbo].[GEN_FILE]') +ALTER TABLE [dbo].[GEN_FILE] NOCHECK CONSTRAINT [FK_GEN_FILE_FILE_REF_KEYS] +ALTER TABLE [dbo].[GEN_FILE] NOCHECK CONSTRAINT [FK_GEN_FILE_FILE_TYPE] + +PRINT(N'Drop constraint FILE_KEYWORDS_GEN_FILE_FK from [dbo].[FILE_KEYWORDS]') +ALTER TABLE [dbo].[FILE_KEYWORDS] NOCHECK CONSTRAINT [FILE_KEYWORDS_GEN_FILE_FK] + +PRINT(N'Drop constraint FK_GEN_FILE_LIB_PATH_CORL_GEN_FILE from [dbo].[GEN_FILE_LIB_PATH_CORL]') +ALTER TABLE [dbo].[GEN_FILE_LIB_PATH_CORL] NOCHECK CONSTRAINT [FK_GEN_FILE_LIB_PATH_CORL_GEN_FILE] + +PRINT(N'Drop constraint FK_MATURITY_REFERENCES_GEN_FILE from [dbo].[MATURITY_REFERENCES]') +ALTER TABLE [dbo].[MATURITY_REFERENCES] NOCHECK CONSTRAINT [FK_MATURITY_REFERENCES_GEN_FILE] + +PRINT(N'Drop constraint FK_MATURITY_SOURCE_FILES_GEN_FILE from [dbo].[MATURITY_SOURCE_FILES]') +ALTER TABLE [dbo].[MATURITY_SOURCE_FILES] NOCHECK CONSTRAINT [FK_MATURITY_SOURCE_FILES_GEN_FILE] + +PRINT(N'Drop constraint FK_REQUIREMENT_REFERENCES_GEN_FILE from [dbo].[REQUIREMENT_REFERENCES]') +ALTER TABLE [dbo].[REQUIREMENT_REFERENCES] NOCHECK CONSTRAINT [FK_REQUIREMENT_REFERENCES_GEN_FILE] + +PRINT(N'Drop constraint FK_REQUIREMENT_SOURCE_FILES_GEN_FILE from [dbo].[REQUIREMENT_SOURCE_FILES]') +ALTER TABLE [dbo].[REQUIREMENT_SOURCE_FILES] NOCHECK CONSTRAINT [FK_REQUIREMENT_SOURCE_FILES_GEN_FILE] + +PRINT(N'Drop constraint FK_SET_FILES_GEN_FILE from [dbo].[SET_FILES]') +ALTER TABLE [dbo].[SET_FILES] NOCHECK CONSTRAINT [FK_SET_FILES_GEN_FILE] + +PRINT(N'Drop constraint FK_ASSESSMENTS_GALLERY_ITEM from [dbo].[ASSESSMENTS]') +ALTER TABLE [dbo].[ASSESSMENTS] NOCHECK CONSTRAINT [FK_ASSESSMENTS_GALLERY_ITEM] + +PRINT(N'Drop constraint FK_GALLERY_GROUP_DETAILS_GALLERY_ITEM from [dbo].[GALLERY_GROUP_DETAILS]') +ALTER TABLE [dbo].[GALLERY_GROUP_DETAILS] NOCHECK CONSTRAINT [FK_GALLERY_GROUP_DETAILS_GALLERY_ITEM] + +PRINT(N'Update rows in [dbo].[MATURITY_QUESTIONS]') +UPDATE [dbo].[MATURITY_QUESTIONS] SET [Supplemental_Info]=N'
Question Intent:
To determine if services are identified.
Criteria for “Yes” Response:
Criteria for “Incomplete” Response:
Question Intent:
To determine if services are prioritized based on analysis of the potential impact if the services are disrupted.
Typical work products:
Criteria for “Yes” Response:
Criteria for “Incomplete” Response:
+ Question Intent: To determine if the organization has a documented plan for responding to
+ incidents.
+
+ Determine how much of your organization’s operations are dependent on IT. Consider how much
+ your organization relies on information technology to conduct business and make it a part of your culture to
+ plan for contingencies in the event of a cyber incident. Identify and prioritize your organization’s
+ critical assets and the associated impacts to operations if an incident were to occur. Ask the questions that
+ are necessary to understanding your security planning, operations, and security-related goals. Develop an
+ understanding of how long it would take to restore normal operations. Resist the “it can’t happen
+ here” pattern of thinking. Instead, focus cyber risk discussions on “what-if” scenarios and
+ develop an incident response plan to prepare for various cyber events and scenarios.
+
+ Lead development of an incident response plan outlining roles and responsibilities. Test it often.
+ Incident response plans and disaster recovery plans are crucial to information security, but they are separate
+ plans. Incident response mainly focuses on information asset protection, while disaster recovery plans focus on
+ business continuity.
+
+ Having a defined process for identifying, analyzing, responding to, and learning from incidents that + interrupt an organization’s operations provides consistent response to cybersecurity incidents and ensures + that objectives are met when handling an incident. Without a defined process, an organization’s incident + response might omit actions that the organization considers important. An incident management plan describes how + the organization will respond to cybersecurity incidents. The objective of the plan should be translated into + specific actions assigned to individuals or groups to perform when an incident occurs. +
++ The incident response plan should address, at a minimum: +
+ ++ The following sections lay out the discrete steps for developing a plan that implements the incident + management process as described above. +
++ Possible Actions: Create an Incident Response Plan +
+ ++ Criteria for “Yes” Response: +
++ Limit information system access to authorized users, processes acting on behalf of authorized users, or + devices (including other information systems). +
+ ++ ASSESSMENT OBJECTIVES [NIST SP 800-171A] +
++ Determine if:
++ POTENTIAL ASSESSMENT METHODS AND OBJECTS [NIST SP 800-171A] + +
++ + Examine + +
+ + ++ [SELECT FROM: Risk assessment policy; security planning policy and procedures; + procedures addressing organizational risk assessments; system security plan; risk assessment; risk assessment + results; risk assessment reviews; risk assessment updates; other relevant documents or records].
+ + ++ + Interview + +
+ + ++ [SELECT FROM: Personnel with risk assessment responsibilities; personnel with + information security responsibilities].
+ ++ + Test + +
+ + ++ [SELECT FROM: Organizational processes for risk assessment; mechanisms supporting or for + conducting, documenting, reviewing, disseminating, and updating the risk assessment]. +
++ + DISCUSSION [NIST SP 800-171 R2] + +
+ + ++ Clearly defined system boundaries are a prerequisite for effective risk assessments. + Such risk assessments consider threats, vulnerabilities, likelihood, and impact to organizational + operations, organizational assets, and individuals based on the operation and use of organizational systems. + Risk assessments also consider risk from external parties (e.g., service providers, contractor operating + systems on behalf of the organization, individuals accessing organizational system/n/n/n/ns, outsourcing + entities). + Risk assessments, either formal or informal, can be conducted at the organization level, the mission or + business process level, or the system level, and at any phase in the system development life cycle. +
+ + ++ NIST SP 800-30 provides guidance on conducting risk assessments. +
++ + FURTHER DISCUSSION + +
+ +NOTE: This section is derived from CMMC 1.02 guidance for informational purposes only. It will be + updated when the CMMC 2.0 publications become available.
+ ++ Risk arises from anything that can reduce an organization''s assurance of + mission/business success; cause harm to image or reputation; or harm individuals, other organizations, + or the Nation.
+ + + +Organizations assess the risk to their operations and assets at regular + intervals [a]. Areas where weakness or vulnerabilities could lead to risk may include:
+ ++ When conducting risk assessments use established criteria and procedures. The + results of formal risk assessments are documented. It is important to note that risk assessments differ + from vulnerability assessments (see RM.2.142). A vulnerability assessment provides input to a risk + assessment along with other information such as results from likelihood analysis and analysis of + potential treat sources.
+ ++ Risk assessments should be performed at defined regular intervals [a]. Mission + risks include anything that will keep an organization from meeting its mission. Function risk is + anything that will prevent the performance of a function. Image and reputation risks refer to intangible + risks that have value and could cause damage to potential or future trust relationships.63
+ ++ This practice, RM.2.141, which requires periodically assessing the risk to + organization systems, assets, and individuals, is a baseline Risk Management practice. RM.2.141 enables + several other Risk Management practices (e.g., RM.2.143 and RM.3.146), as well as CA.2.159. +
+ ++ + Example + +
+ ++ You are a system administrator. You and your team members are working on a big + government contract requiring you to store CUI. As part of your periodic (e.g., annual) risk assessment + exercise, you evaluate the new risk involved with storing CUI [a,b]. When conducting the assessment you + consider increased legal exposure, financial requirements of safeguarding CUI, potentially elevated + attention from external attackers, and other factors. After determining how storing CUI affects your + overall risk profile, you use that as a basis for a conversation on how that risk should be + mitigated.
+ ++ + Potential Assessment Considerations + +
+ + + + ++ + KEY REFERENCES + +
+Scan for vulnerabilities in organizational systems and applications periodically and when new + vulnerabilities affecting those systems and applications are identified.
+Determine if:
+Control Objective
+Centrally manage [Assignment: organization-defined controls and related processes].
+Supplemental Guidance
+ +Central management refers to + organization-wide management and implementation of selected controls and processes. This includes planning, + implementing, assessing, authorizing, and monitoring the organization-defined, centrally managed controls and + processes. As the central management of controls is generally associated with the concept of common (inherited) + controls, such management promotes and facilitates standardization of control implementations and management and the + judicious use of organizational resources.
+ +Centrally managed controls and processes may also meet independence requirements for assessments in support of + initial and ongoing authorizations to operate and as part of organizational continuous monitoring.
+ ++ Automated tools (e.g., security information and event management tools or enterprise security monitoring and + management tools) can improve the accuracy, consistency, and availability of information associated with centrally + managed controls and processes. Automation can also provide data aggregation and data correlation capabilities; + alerting mechanisms; and dashboards to support risk-based decision-making within the organization. +
+ +As part of the control selection processes, organizations determine the controls that may be suitable for + central management based on resources and capabilities. It is not always possible to centrally manage every + aspect of a control.
+ +In such cases, the control can be treated as a hybrid control with the control managed and implemented + centrally or at the system level. The controls and control enhancements that are candidates for full or partial + central management include but are not limited to: AC-2(1), AC-2(2), AC-2(3), AC-2(4), AC-4(all), AC-17(1), + AC-17(2), AC-17(3), AC-17(9), AC-18(1), AC-18(3), AC-18(4), AC-18(5), AC-19(4), AC-22, AC-23, AT-2(1), AT-2(2), + AT-3(1), AT-3(2), AT-3(3), AT-4, AU-3, AU-6(1), AU-6(3), AU-6(5), AU-6(6), AU-6(9), AU-7(1), AU-7(2), AU-11, + AU-13, AU-16, CA-2(1), CA-2(2), CA-2(3), CA-3(1), CA-3(2), CA-3(3), CA-7(1), CA-9, CM-2(2), CM-3(1), CM-3(4), + CM-4, CM-6, CM-6(1), CM-7(2), CM-7(4), CM-7(5), CM-8(all), CM-9(1), CM-10, CM-11, CP-7(all), CP-8(all), SC-43, + SI-2, SI-3, SI-4(all), SI-7, SI-8. +
+ ++ Related Controls: PL-8, PM-9. +
' WHERE [Mat_Question_Id] = 5226 +UPDATE [dbo].[MATURITY_QUESTIONS] SET [Question_Text]=N'How do you keep track of your user? ' WHERE [Mat_Question_Id] = 5246 +UPDATE [dbo].[MATURITY_QUESTIONS] SET [Question_Text]=N'How is accesses to critical equipment controlled? ' WHERE [Mat_Question_Id] = 5247 +UPDATE [dbo].[MATURITY_QUESTIONS] SET [Question_Text]=N'How do you keep access up to date? ' WHERE [Mat_Question_Id] = 5249 +UPDATE [dbo].[MATURITY_QUESTIONS] SET [Question_Text]=N'How are critical assets protected? ' WHERE [Mat_Question_Id] = 5250 +UPDATE [dbo].[MATURITY_QUESTIONS] SET [Question_Text]=N'What is required for me to gain access to your facility? ' WHERE [Mat_Question_Id] = 5252 +UPDATE [dbo].[MATURITY_QUESTIONS] SET [Question_Text]=N'Does your facility/plant have any public access? ' WHERE [Mat_Question_Id] = 5253 +UPDATE [dbo].[MATURITY_QUESTIONS] SET [Question_Text]=N'How do you keep access devices up-to-date? ' WHERE [Mat_Question_Id] = 5254 +UPDATE [dbo].[MATURITY_QUESTIONS] SET [Question_Text]=N'How are distribution and communication lines protected? ' WHERE [Mat_Question_Id] = 5255 +UPDATE [dbo].[MATURITY_QUESTIONS] SET [Question_Text]=N'What does your organization do to restrict the use of certain types of media on systems (removable and stationary)? (TAB9)' WHERE [Mat_Question_Id] = 5257 +UPDATE [dbo].[MATURITY_QUESTIONS] SET [Question_Text]=N'Do you have a cyber policy? ' WHERE [Mat_Question_Id] = 5261 +UPDATE [dbo].[MATURITY_QUESTIONS] SET [Question_Text]=N'Were efforts to create a cyber policy helpful? ' WHERE [Mat_Question_Id] = 5262 +UPDATE [dbo].[MATURITY_QUESTIONS] SET [Question_Text]=N'Do you have plans to update cybersecurity plan? ' WHERE [Mat_Question_Id] = 5263 +UPDATE [dbo].[MATURITY_QUESTIONS] SET [Question_Text]=N'What positions in your organization have system security roles? ' WHERE [Mat_Question_Id] = 5264 +UPDATE [dbo].[MATURITY_QUESTIONS] SET [Question_Text]=N'Does the organization have the capability to manage capacity, bandwidth, or other +redundancy to limit negative impacts?' WHERE [Mat_Question_Id] = 6230 +UPDATE [dbo].[MATURITY_QUESTIONS] SET [Question_Text]=N'Does the organization have the capability to deploy storage or compute resources dynamically?' WHERE [Mat_Question_Id] = 6233 +UPDATE [dbo].[MATURITY_QUESTIONS] SET [Question_Text]=N'Has the organization defined its role in the supply chain and reviewed it for updates at least annually?' WHERE [Mat_Question_Id] = 6237 +UPDATE [dbo].[MATURITY_QUESTIONS] SET [Question_Text]=N'Are the associations between assets and the critical service they support documented and updated as needed at least annually?' WHERE [Mat_Question_Id] = 6246 +UPDATE [dbo].[MATURITY_QUESTIONS] SET [Question_Text]=N'Has the organization identified the data connections (data flows) between the critical service and other systems, including other critical services, to understand critical dependencies?' WHERE [Mat_Question_Id] = 6247 +UPDATE [dbo].[MATURITY_QUESTIONS] SET [Question_Text]=N'Is the prioritization of assets reviewed and validated?' WHERE [Mat_Question_Id] = 6248 +UPDATE [dbo].[MATURITY_QUESTIONS] SET [Question_Text]=N'Does the organization conduct an impact-level prioritization of organizational systems to obtain additional granularity on system impact levels?' WHERE [Mat_Question_Id] = 6260 +UPDATE [dbo].[MATURITY_QUESTIONS] SET [Question_Text]=N'Does the organization require individuals accessing the system to employ organization-defined supplemental authentication techniques or mechanisms under specific organization-defined circumstances or situations?' WHERE [Mat_Question_Id] = 6261 +UPDATE [dbo].[MATURITY_QUESTIONS] SET [Question_Text]=N'Are multiple, distinct authentication challenges over the course of a session employed to confirm identity?' WHERE [Mat_Question_Id] = 6262 +UPDATE [dbo].[MATURITY_QUESTIONS] SET [Question_Text]=N'Are both network and host-based intrusion detection employed for the protection of the HVA/critical service?' WHERE [Mat_Question_Id] = 6263 +UPDATE [dbo].[MATURITY_QUESTIONS] SET [Question_Text]=N'Does the organization implement controls that monitor physical access to the system in addition to the physical access monitoring of facilities (where there is a concentration of system components, including server rooms, media storage areas, and communications centers)?' WHERE [Mat_Question_Id] = 6264 +UPDATE [dbo].[MATURITY_QUESTIONS] SET [Question_Text]=N'Does the organization implement security functions as a layered structure minimizing interactions between layers of the design and avoiding any dependence by lower layers on the functionality or correctness of higher layers? ' WHERE [Mat_Question_Id] = 6276 +UPDATE [dbo].[MATURITY_QUESTIONS] SET [Question_Text]=N'Does the organization synchronize duplicate systems or system components?' WHERE [Mat_Question_Id] = 6277 +UPDATE [dbo].[MATURITY_QUESTIONS] SET [Question_Text]=N'Does the organization employ a penetration testing process that includes attempts to bypass or circumvent controls associated with physical access points to the facility?' WHERE [Mat_Question_Id] = 6282 +UPDATE [dbo].[MATURITY_QUESTIONS] SET [Question_Text]=N'Does the organization require the developer of the system, system component, or system service to perform penetration testing:
a. at a given level of rigor (breadth and depth) and
b. under organization-defined constraints?
' WHERE [Mat_Question_Id] = 6283 +UPDATE [dbo].[MATURITY_QUESTIONS] SET [Question_Text]=N'Does the organization conduct red-team exercises to simulate attempts by adversaries in real-world conditions to compromise organizational systems in accordance with applicable rules of engagement?' WHERE [Mat_Question_Id] = 6284 +UPDATE [dbo].[MATURITY_QUESTIONS] SET [Question_Text]=N'Does the organization disrupt and adversely affect the system or system component to validate the effectiveness of protections?
' WHERE [Mat_Question_Id] = 6285 +UPDATE [dbo].[MATURITY_QUESTIONS] SET [Question_Text]=N'Does the organization test backup information with certain frequency to verify media reliability and information integrity?' WHERE [Mat_Question_Id] = 6286 +UPDATE [dbo].[MATURITY_QUESTIONS] SET [Question_Text]=N'Does the organization:In a manner compliant with the most current versions of the National Institute of Standards and Technology + (NIST) Digital Identity Guidelines, does the Owner/Operator:
+ +Implement and complete a mandatory password reset(s) of all equipment within Operational + Technology systems, including Programmable Logic Controllers?
+ +PLEASE NOTE: The Owner/Operator must continue to comply with any TSA-approved + alternative measures previously approved for systems where implementing a mandatory password reset is not + technically feasible. +
+ +GUIDANCE: These actions must be consistent with industry standards, such as those in NIST Special Publication + 800-63: Digital Identity Guidelines, and CISA''s Emergency Directive 21-01 (December 13, 2020) (available at + https://cyber.dhs.gov/ed/21-01/). +
' WHERE [Mat_Question_Id] = 9977 +PRINT(N'Operation applied to 155 rows out of 155') + +PRINT(N'Update rows in [dbo].[MATURITY_GROUPINGS]') +UPDATE [dbo].[MATURITY_GROUPINGS] SET [Description]=N'Protecting your systems requires knowing which devices are connected to your network, which applications are in + use, who has access to them, and the security measures in place. A cyber-ready business keeps its systems up-to-date + and secure. These actions can support a proactive risk management culture and limit the risk of compromise.
+Remove unsupported or unauthorized hardware and software. Supported hardware and software generally allow you to + receive updates and patches for vulnerabilities that otherwise are not available for unauthorized and unsupported + assets. Inventory authorized hardware and software throughout your organization. Know the physical location and user + of the hardware to keep patching updates current. This also allows for any unauthorized hardware or software to be + identified and removed.
' WHERE [Grouping_Id] = 177 +UPDATE [dbo].[MATURITY_GROUPINGS] SET [Description]=N'Lead development of an incident response and disaster recovery plan outlining roles and responsibilities. Test it + often. Incident response plans and disaster recovery plans are crucial to information security, but they are + separate plans. Incident response mainly focuses on information asset protection, while disaster recovery plans + focus on business continuity. Once you develop a plan, test the plan using realistic simulations (known as + "war-gaming"), where roles and responsibilities are assigned to the people who manage cyber incident + responses. This ensures that your plan is effective and that you have the appropriate people involved in the plan. + Disaster recovery plans minimize recovery time by efficiently recovering critical systems.
+Plan, prepare, and conduct drills for cyber-attacks and incidents as you would a fire or robbery. Make your reaction + to cyber incidents or system outages an extension of your other business contingency plans. This involves having + incident response plans and procedures, trained staff, assigned roles and responsibilities, and incident + communications plans.
' WHERE [Grouping_Id] = 181 +UPDATE [dbo].[MATURITY_GROUPINGS] SET [Description]=N'For a "YES" response, first determine if all of the question objectives are met. If only some, but not all +objectives are met, it is advised to mark a "NO" response and utilize the comments, observations, and mark +for review functions for tracking purposes.' WHERE [Grouping_Id] = 1187 +UPDATE [dbo].[MATURITY_GROUPINGS] SET [Description]=N'Until the Owner/Operator''s Cybersecurity Implementation Plan (as required by Section II.B. of the SD02C Security + Directive) is approved by TSA, the Owner/Operator must apply the following cybersecurity measures, as modified by + any TSA-approved alternative measures, and/or action plans, previously issued to the requirements in the Security + Directive Pipeline2021-02 series.
+The following requirements must be applied to any Information and/or Operational Technology system connected to a + critical pipeline system or facility identified by TSA.
' WHERE [Grouping_Id] = 2616 +PRINT(N'Operation applied to 4 rows out of 4') + +PRINT(N'Update rows in [dbo].[NEW_REQUIREMENT]') +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=18 WHERE [Requirement_Id] = 31205 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=18 WHERE [Requirement_Id] = 31206 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=18 WHERE [Requirement_Id] = 31207 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=18 WHERE [Requirement_Id] = 31208 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=18 WHERE [Requirement_Id] = 31209 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=18 WHERE [Requirement_Id] = 31210 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=18 WHERE [Requirement_Id] = 31211 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=18 WHERE [Requirement_Id] = 31212 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=18 WHERE [Requirement_Id] = 31213 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=18 WHERE [Requirement_Id] = 31214 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=18 WHERE [Requirement_Id] = 31215 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=18 WHERE [Requirement_Id] = 31216 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=18 WHERE [Requirement_Id] = 31217 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=18 WHERE [Requirement_Id] = 31218 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=10 WHERE [Requirement_Id] = 31219 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=10 WHERE [Requirement_Id] = 31220 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=10 WHERE [Requirement_Id] = 31221 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=10 WHERE [Requirement_Id] = 31222 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=10 WHERE [Requirement_Id] = 31223 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=10 WHERE [Requirement_Id] = 31224 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=10 WHERE [Requirement_Id] = 31225 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=10 WHERE [Requirement_Id] = 31226 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=10 WHERE [Requirement_Id] = 31227 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=10 WHERE [Requirement_Id] = 31228 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=10 WHERE [Requirement_Id] = 31229 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=10 WHERE [Requirement_Id] = 31230 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=5 WHERE [Requirement_Id] = 31231 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=5 WHERE [Requirement_Id] = 31232 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=5 WHERE [Requirement_Id] = 31233 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=5 WHERE [Requirement_Id] = 31234 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=5 WHERE [Requirement_Id] = 31235 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=5 WHERE [Requirement_Id] = 31236 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=4 WHERE [Requirement_Id] = 31237 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=4 WHERE [Requirement_Id] = 31238 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=4 WHERE [Requirement_Id] = 31239 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=4 WHERE [Requirement_Id] = 31240 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=4 WHERE [Requirement_Id] = 31241 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=4 WHERE [Requirement_Id] = 31242 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=4 WHERE [Requirement_Id] = 31243 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=4 WHERE [Requirement_Id] = 31244 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=6 WHERE [Requirement_Id] = 31252 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=6 WHERE [Requirement_Id] = 31253 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=6 WHERE [Requirement_Id] = 31254 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=6 WHERE [Requirement_Id] = 31255 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=6 WHERE [Requirement_Id] = 31256 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=6 WHERE [Requirement_Id] = 31257 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=6 WHERE [Requirement_Id] = 31258 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=6 WHERE [Requirement_Id] = 31259 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=6 WHERE [Requirement_Id] = 31260 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=6 WHERE [Requirement_Id] = 31261 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=6 WHERE [Requirement_Id] = 31262 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=6 WHERE [Requirement_Id] = 31263 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=72 WHERE [Requirement_Id] = 31264 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=72 WHERE [Requirement_Id] = 31265 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=72 WHERE [Requirement_Id] = 31266 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=72 WHERE [Requirement_Id] = 31267 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=72 WHERE [Requirement_Id] = 31268 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=72 WHERE [Requirement_Id] = 31269 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=72 WHERE [Requirement_Id] = 31270 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=25 WHERE [Requirement_Id] = 31271 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=25 WHERE [Requirement_Id] = 31272 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=25 WHERE [Requirement_Id] = 31273 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=25 WHERE [Requirement_Id] = 31274 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=25 WHERE [Requirement_Id] = 31275 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=25 WHERE [Requirement_Id] = 31276 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=25 WHERE [Requirement_Id] = 31277 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=81 WHERE [Requirement_Id] = 31278 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=81 WHERE [Requirement_Id] = 31279 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=81 WHERE [Requirement_Id] = 31280 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=81 WHERE [Requirement_Id] = 31281 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=81 WHERE [Requirement_Id] = 31282 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=51 WHERE [Requirement_Id] = 31302 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=51 WHERE [Requirement_Id] = 31303 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=51 WHERE [Requirement_Id] = 31304 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=51 WHERE [Requirement_Id] = 31305 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=51 WHERE [Requirement_Id] = 31306 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=51 WHERE [Requirement_Id] = 31307 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=51 WHERE [Requirement_Id] = 31308 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=51 WHERE [Requirement_Id] = 31309 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=51 WHERE [Requirement_Id] = 31310 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=47 WHERE [Requirement_Id] = 31318 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=47 WHERE [Requirement_Id] = 31319 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=47 WHERE [Requirement_Id] = 31320 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=47 WHERE [Requirement_Id] = 31321 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=47 WHERE [Requirement_Id] = 31322 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=47 WHERE [Requirement_Id] = 31323 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=47 WHERE [Requirement_Id] = 31324 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=47 WHERE [Requirement_Id] = 31325 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=47 WHERE [Requirement_Id] = 31326 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=47 WHERE [Requirement_Id] = 31327 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=47 WHERE [Requirement_Id] = 31328 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=47 WHERE [Requirement_Id] = 31329 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=47 WHERE [Requirement_Id] = 31330 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=47 WHERE [Requirement_Id] = 31331 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=17 WHERE [Requirement_Id] = 31332 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=17 WHERE [Requirement_Id] = 31333 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=17 WHERE [Requirement_Id] = 31334 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=17 WHERE [Requirement_Id] = 31335 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=17 WHERE [Requirement_Id] = 31336 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=17 WHERE [Requirement_Id] = 31337 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=17 WHERE [Requirement_Id] = 31338 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=17 WHERE [Requirement_Id] = 31339 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=17 WHERE [Requirement_Id] = 31340 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=49 WHERE [Requirement_Id] = 31341 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=49 WHERE [Requirement_Id] = 31342 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=49 WHERE [Requirement_Id] = 31343 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=49 WHERE [Requirement_Id] = 31344 +UPDATE [dbo].[NEW_REQUIREMENT] SET [Question_Group_Heading_Id]=49 WHERE [Requirement_Id] = 31345 +PRINT(N'Operation applied to 108 rows out of 108') + +PRINT(N'Update rows in [dbo].[MATURITY_MODELS]') +UPDATE [dbo].[MATURITY_MODELS] SET [Model_Name]=N'SD02 Series' WHERE [Maturity_Model_Id] = 14 +UPDATE [dbo].[MATURITY_MODELS] SET [Model_Name]=N'SD02 Owner' WHERE [Maturity_Model_Id] = 16 +PRINT(N'Operation applied to 2 rows out of 2') + +PRINT(N'Update rows in [dbo].[GEN_FILE]') +UPDATE [dbo].[GEN_FILE] SET [Title]=N'LTCU 01-CU-11: Electronic Data Security Overview' WHERE [Gen_File_Id] = 6088 +UPDATE [dbo].[GEN_FILE] SET [Title]=N'LTCU - 06-CU-07: IT Security Compliance Guide for Credit Unions' WHERE [Gen_File_Id] = 6092 +UPDATE [dbo].[GEN_FILE] SET [Title]=N'LTCU - 01-CU-21: Diaster Recovery and Business Resumption' WHERE [Gen_File_Id] = 6095 +UPDATE [dbo].[GEN_FILE] SET [Title]=N'LTCU 08-CU-01: Pandemic Planning' WHERE [Gen_File_Id] = 6097 +UPDATE [dbo].[GEN_FILE] SET [Title]=N'LTCU 03-CU-14: Computer Software Patch Management' WHERE [Gen_File_Id] = 6099 +UPDATE [dbo].[GEN_FILE] SET [Title]=N'LTCU 01-CU-20: Due Diligence Over Third Parties' WHERE [Gen_File_Id] = 6118 +UPDATE [dbo].[GEN_FILE] SET [File_Type_Id]=31, [File_Name]=N'ACET Workbook Guide.pdf', [File_Size]=831488 WHERE [Gen_File_Id] = 7071 +UPDATE [dbo].[GEN_FILE] SET [Title]=N'LTCU 23-CU-07: Cyber Incident Notification Requirements' WHERE [Gen_File_Id] = 7073 +PRINT(N'Operation applied to 8 rows out of 8') + +PRINT(N'Update row in [dbo].[GALLERY_ITEM]') +UPDATE [dbo].[GALLERY_ITEM] SET [Is_Visible]=0 WHERE [Gallery_Item_Guid] = '4737748d-c762-4459-bc76-393e816c6a2d' + +PRINT(N'Add constraints to [dbo].[MATURITY_QUESTIONS]') +ALTER TABLE [dbo].[MATURITY_QUESTIONS] CHECK CONSTRAINT [FK__MATURITY___Matur__5B638405] +ALTER TABLE [dbo].[MATURITY_QUESTIONS] WITH CHECK CHECK CONSTRAINT [FK_MATURITY_QUESTIONS_MATURITY_GROUPINGS] +ALTER TABLE [dbo].[MATURITY_QUESTIONS] WITH CHECK CHECK CONSTRAINT [FK_MATURITY_QUESTIONS_MATURITY_LEVELS] +ALTER TABLE [dbo].[MATURITY_QUESTIONS] CHECK CONSTRAINT [FK_MATURITY_QUESTIONS_MATURITY_MODELS] +ALTER TABLE [dbo].[MATURITY_QUESTIONS] WITH CHECK CHECK CONSTRAINT [FK_MATURITY_QUESTIONS_MATURITY_OPTIONS] +ALTER TABLE [dbo].[MATURITY_QUESTIONS] WITH CHECK CHECK CONSTRAINT [FK_MATURITY_QUESTIONS_MATURITY_QUESTION_TYPES] +ALTER TABLE [dbo].[HYDRO_DATA] WITH CHECK CHECK CONSTRAINT [FK__HYDRO_DAT__Mat_Q__38652BE2] +ALTER TABLE [dbo].[ISE_ACTIONS] WITH CHECK CHECK CONSTRAINT [FK_MATURITY_QUESTIONS_MAT_QUESTION_ID] +ALTER TABLE [dbo].[MATURITY_ANSWER_OPTIONS] WITH CHECK CHECK CONSTRAINT [FK_MATURITY_ANSWER_OPTIONS_MATURITY_QUESTIONS1] +ALTER TABLE [dbo].[MATURITY_QUESTION_PROPS] WITH CHECK CHECK CONSTRAINT [FK_MATURITY_QUESTION_PROPS_MATURITY_QUESTIONS] +ALTER TABLE [dbo].[MATURITY_REFERENCE_TEXT] WITH CHECK CHECK CONSTRAINT [FK_MATURITY_REFERENCE_TEXT_MATURITY_QUESTIONS] +ALTER TABLE [dbo].[MATURITY_REFERENCES] CHECK CONSTRAINT [FK_MATURITY_REFERENCES_MATURITY_QUESTIONS] +ALTER TABLE [dbo].[MATURITY_SOURCE_FILES] CHECK CONSTRAINT [FK_MATURITY_SOURCE_FILES_MATURITY_QUESTIONS] +ALTER TABLE [dbo].[MATURITY_SUB_MODEL_QUESTIONS] WITH CHECK CHECK CONSTRAINT [FK_MATURITY_SUB_MODEL_QUESTIONS_MATURITY_QUESTIONS] +ALTER TABLE [dbo].[TTP_MAT_QUESTION] WITH CHECK CHECK CONSTRAINT [FK_TTP_MAT_QUESTION_MATURITY_QUESTIONS] + +PRINT(N'Add constraints to [dbo].[MATURITY_GROUPINGS]') +ALTER TABLE [dbo].[MATURITY_GROUPINGS] WITH CHECK CHECK CONSTRAINT [FK_MATURITY_GROUPINGS_MATURITY_GROUPING_TYPES] +ALTER TABLE [dbo].[MATURITY_DOMAIN_REMARKS] WITH CHECK CHECK CONSTRAINT [FK_MATURITY_DOMAIN_REMARKS_MATURITY_GROUPINGS] + +PRINT(N'Add constraints to [dbo].[NEW_REQUIREMENT]') +ALTER TABLE [dbo].[NEW_REQUIREMENT] CHECK CONSTRAINT [FK_NEW_REQUIREMENT_NCSF_Category] +ALTER TABLE [dbo].[NEW_REQUIREMENT] WITH CHECK CHECK CONSTRAINT [FK_NEW_REQUIREMENT_QUESTION_GROUP_HEADING] +ALTER TABLE [dbo].[NEW_REQUIREMENT] CHECK CONSTRAINT [FK_NEW_REQUIREMENT_STANDARD_CATEGORY] +ALTER TABLE [dbo].[FINANCIAL_REQUIREMENTS] WITH CHECK CHECK CONSTRAINT [FK_FINANCIAL_REQUIREMENTS_NEW_REQUIREMENT] +ALTER TABLE [dbo].[NERC_RISK_RANKING] CHECK CONSTRAINT [FK_NERC_RISK_RANKING_NEW_REQUIREMENT] +ALTER TABLE [dbo].[PARAMETER_REQUIREMENTS] CHECK CONSTRAINT [FK_Parameter_Requirements_NEW_REQUIREMENT] +ALTER TABLE [dbo].[REQUIREMENT_LEVELS] CHECK CONSTRAINT [FK_REQUIREMENT_LEVELS_NEW_REQUIREMENT] +ALTER TABLE [dbo].[REQUIREMENT_QUESTIONS] CHECK CONSTRAINT [FK_REQUIREMENT_QUESTIONS_NEW_REQUIREMENT] +ALTER TABLE [dbo].[REQUIREMENT_QUESTIONS_SETS] WITH CHECK CHECK CONSTRAINT [FK_REQUIREMENT_QUESTIONS_SETS_NEW_REQUIREMENT] +ALTER TABLE [dbo].[REQUIREMENT_REFERENCES] CHECK CONSTRAINT [FK_REQUIREMENT_REFERENCES_NEW_REQUIREMENT] +ALTER TABLE [dbo].[REQUIREMENT_SETS] CHECK CONSTRAINT [FK_REQUIREMENT_SETS_NEW_REQUIREMENT] +ALTER TABLE [dbo].[REQUIREMENT_SOURCE_FILES] CHECK CONSTRAINT [FK_REQUIREMENT_SOURCE_FILES_NEW_REQUIREMENT] + +PRINT(N'Add constraints to [dbo].[MATURITY_MODELS]') +ALTER TABLE [dbo].[MATURITY_MODELS] WITH CHECK CHECK CONSTRAINT [FK_MATURITY_MODELS_MATURITY_LEVEL_USAGE_TYPES] +ALTER TABLE [dbo].[ANALYTICS_MATURITY_GROUPINGS] WITH CHECK CHECK CONSTRAINT [FK_ANALYTICS_MATURITY_GROUPINGS_MATURITY_MODELS] +ALTER TABLE [dbo].[AVAILABLE_MATURITY_MODELS] WITH CHECK CHECK CONSTRAINT [FK__AVAILABLE__model__6F6A7CB2] +ALTER TABLE [dbo].[MATURITY_LEVELS] WITH CHECK CHECK CONSTRAINT [FK_MATURITY_LEVELS_MATURITY_MODELS] +ALTER TABLE [dbo].[MODES_SETS_MATURITY_MODELS] WITH CHECK CHECK CONSTRAINT [FK_MODES_SETS_MATURITY_MODELS_MATURITY_MODELS] + +PRINT(N'Add constraints to [dbo].[GEN_FILE]') +ALTER TABLE [dbo].[GEN_FILE] WITH CHECK CHECK CONSTRAINT [FK_GEN_FILE_FILE_REF_KEYS] +ALTER TABLE [dbo].[GEN_FILE] WITH CHECK CHECK CONSTRAINT [FK_GEN_FILE_FILE_TYPE] +ALTER TABLE [dbo].[FILE_KEYWORDS] CHECK CONSTRAINT [FILE_KEYWORDS_GEN_FILE_FK] +ALTER TABLE [dbo].[GEN_FILE_LIB_PATH_CORL] CHECK CONSTRAINT [FK_GEN_FILE_LIB_PATH_CORL_GEN_FILE] +ALTER TABLE [dbo].[MATURITY_REFERENCES] CHECK CONSTRAINT [FK_MATURITY_REFERENCES_GEN_FILE] +ALTER TABLE [dbo].[MATURITY_SOURCE_FILES] CHECK CONSTRAINT [FK_MATURITY_SOURCE_FILES_GEN_FILE] +ALTER TABLE [dbo].[REQUIREMENT_REFERENCES] CHECK CONSTRAINT [FK_REQUIREMENT_REFERENCES_GEN_FILE] +ALTER TABLE [dbo].[REQUIREMENT_SOURCE_FILES] CHECK CONSTRAINT [FK_REQUIREMENT_SOURCE_FILES_GEN_FILE] +ALTER TABLE [dbo].[SET_FILES] WITH CHECK CHECK CONSTRAINT [FK_SET_FILES_GEN_FILE] +ALTER TABLE [dbo].[ASSESSMENTS] WITH CHECK CHECK CONSTRAINT [FK_ASSESSMENTS_GALLERY_ITEM] +ALTER TABLE [dbo].[GALLERY_GROUP_DETAILS] WITH CHECK CHECK CONSTRAINT [FK_GALLERY_GROUP_DETAILS_GALLERY_ITEM] +COMMIT TRANSACTION +GO diff --git a/CSETWebApi/CSETWeb_Api/CSETWeb_ApiCore/LuceneIndex/_0.si b/CSETWebApi/CSETWeb_Api/CSETWeb_ApiCore/LuceneIndex/_0.si index fd7ebef2fd..40e4a34bad 100644 Binary files a/CSETWebApi/CSETWeb_Api/CSETWeb_ApiCore/LuceneIndex/_0.si and b/CSETWebApi/CSETWeb_Api/CSETWeb_ApiCore/LuceneIndex/_0.si differ diff --git a/CSETWebApi/CSETWeb_Api/CSETWeb_ApiCore/LuceneIndex/_1.si b/CSETWebApi/CSETWeb_Api/CSETWeb_ApiCore/LuceneIndex/_1.si index ec971b538c..22dbff28a6 100644 Binary files a/CSETWebApi/CSETWeb_Api/CSETWeb_ApiCore/LuceneIndex/_1.si and b/CSETWebApi/CSETWeb_Api/CSETWeb_ApiCore/LuceneIndex/_1.si differ diff --git a/CSETWebApi/CSETWeb_Api/CSETWeb_ApiCore/LuceneIndex/_2.cfe b/CSETWebApi/CSETWeb_Api/CSETWeb_ApiCore/LuceneIndex/_2.cfe index 48f6bfab3a..f47b1c8425 100644 Binary files a/CSETWebApi/CSETWeb_Api/CSETWeb_ApiCore/LuceneIndex/_2.cfe and b/CSETWebApi/CSETWeb_Api/CSETWeb_ApiCore/LuceneIndex/_2.cfe differ diff --git a/CSETWebApi/CSETWeb_Api/CSETWeb_ApiCore/LuceneIndex/_2.cfs b/CSETWebApi/CSETWeb_Api/CSETWeb_ApiCore/LuceneIndex/_2.cfs index 42e1afab26..d5559374ff 100644 Binary files a/CSETWebApi/CSETWeb_Api/CSETWeb_ApiCore/LuceneIndex/_2.cfs and b/CSETWebApi/CSETWeb_Api/CSETWeb_ApiCore/LuceneIndex/_2.cfs differ diff --git a/CSETWebApi/CSETWeb_Api/CSETWeb_ApiCore/LuceneIndex/_2.si b/CSETWebApi/CSETWeb_Api/CSETWeb_ApiCore/LuceneIndex/_2.si index d7aa85113a..1f002dadc4 100644 Binary files a/CSETWebApi/CSETWeb_Api/CSETWeb_ApiCore/LuceneIndex/_2.si and b/CSETWebApi/CSETWeb_Api/CSETWeb_ApiCore/LuceneIndex/_2.si differ diff --git a/CSETWebNg/main-electron.js b/CSETWebNg/main-electron.js index 503b5c0f38..5cf49bd001 100644 --- a/CSETWebNg/main-electron.js +++ b/CSETWebNg/main-electron.js @@ -286,7 +286,7 @@ function createWindow() { // Setup external links in child windows childWindow.webContents.setWindowOpenHandler(details => { - if (!details.url.startsWith('file:///')) { + if (!details.url.startsWith('file:///') && !details.url.startsWith('http://localhost')) { shell.openExternal(details.url); return {action: 'deny'}; } @@ -306,7 +306,7 @@ function createWindow() { // Setup external links in child windows childWindow.webContents.setWindowOpenHandler(details => { - if (!details.url.startsWith('file:///')) { + if (!details.url.startsWith('file:///') && !details.url.startsWith('http://localhost')) { shell.openExternal(details.url); return {action: 'deny'}; } else { @@ -317,8 +317,8 @@ function createWindow() { return { action: 'deny' }; - // Navigating to external url if not using file protocol; open in web browser - } else if (!details.url.startsWith('file:///')) { + // Navigating to external url if not using file protocol or localhost; open in web browser + } else if (!details.url.startsWith('file:///') && !details.url.startsWith('http://localhost')) { shell.openExternal(details.url); return {action: 'deny'}; } diff --git a/CSETWebNg/src/app/services/config.service.ts b/CSETWebNg/src/app/services/config.service.ts index ca1f8dfc24..a07b3eeddd 100644 --- a/CSETWebNg/src/app/services/config.service.ts +++ b/CSETWebNg/src/app/services/config.service.ts @@ -73,7 +73,7 @@ export class ConfigService { * Constructor. * @param http */ - constructor(private http: HttpClient, @Inject(DOCUMENT) private document: Document) { } + constructor(private http: HttpClient, @Inject(DOCUMENT) private document: Document) {} /** * @@ -108,7 +108,7 @@ export class ConfigService { .toPromise() .then((cisaAssessorWorkflowEnabled) => { if (cisaAssessorWorkflowEnabled) { - return this.enableCisaAssessorWorkflow() + return this.enableCisaAssessorWorkflow(); } localStorage.setItem('installationMode', this.config.installationMode.toUpperCase()); @@ -133,12 +133,12 @@ export class ConfigService { } checkLocalDocStatus() { - return this.http.get(this.apiUrl + 'HasLocalDocuments') + return this.http.get(this.apiUrl + 'HasLocalDocuments'); } checkOnlineDocStatus() { // TODO: temporary return until we get this working in production - return this.http.get(this.apiUrl + 'HasLocalDocuments') + return this.http.get(this.apiUrl + 'HasLocalDocuments'); } /** @@ -155,12 +155,13 @@ export class ConfigService { const appProtocol = this.config.app.protocol + '://'; if (localStorage.getItem('apiUrl') != null) { this.apiUrl = localStorage.getItem('apiUrl') + '/' + this.config.api.apiIdentifier + '/'; + this.docUrl = localStorage.getItem('apiUrl') + '/' + this.config.api.documentsIdentifier + '/'; } else { this.apiUrl = apiProtocol + this.config.api.url + apiPort + '/' + this.config.api.apiIdentifier + '/'; + this.docUrl = apiProtocol + this.config.api.url + apiPort + '/' + this.config.api.documentsIdentifier + '/'; } this.appUrl = appProtocol + this.config.app.appUrl + appPort; - this.docUrl = apiProtocol + this.config.api.url + apiPort + '/' + this.config.api.documentsIdentifier + '/'; this.onlineUrl = this.config.api.onlineUrl; this.helpContactEmail = this.config.helpContactEmail; this.helpContactPhone = this.config.helpContactPhone; @@ -173,7 +174,6 @@ export class ConfigService { this.initialized = true; } - checkOnlineStatusFromConfig() { this.checkLocalDocStatus().subscribe( (resp: boolean) => { @@ -182,7 +182,7 @@ export class ConfigService { () => { this.isDocUrl = false; } - ) + ); this.checkOnlineDocStatus().subscribe( (resp: boolean) => { @@ -270,74 +270,74 @@ export class ConfigService { switchConfigsForMode(installationMode) { switch (installationMode) { - case 'ACET': - { - var x = this.document.getElementsByClassName('root'); - if (x.length > 0) { - x[0].classList.add('acet-background'); - } - - var x = document.getElementsByClassName('ncua-seal'); - if (x.length > 0) { - x[0].classList.remove('d-none'); - } - - // change favicon and title - const link: HTMLLinkElement = this.document.querySelector("link[rel~='icon']"); - link.href = 'assets/icons/favicon_acet.ico?app=acet1'; - - var title = this.document.querySelector('title'); - title.innerText = 'ACET'; - } - break; - case 'TSA': - { - // change favicon and title - const link: HTMLLinkElement = this.document.querySelector("link[rel~='icon']"); - link.href = 'assets/icons/favicon_tsa.ico?app=tsa1'; - - var title = this.document.querySelector('title'); - title.innerText = 'CSET-TSA'; - } - break; - case 'CF': - { - // change favicon and title - const link: HTMLLinkElement = this.document.querySelector("link[rel~='icon']"); - link.href = 'assets/icons/favicon_cf.ico?app=cf1'; - - var title = this.document.querySelector('title'); - title.innerText = 'CSET-CF'; + case 'ACET': + { + var x = this.document.getElementsByClassName('root'); + if (x.length > 0) { + x[0].classList.add('acet-background'); } - break; - case 'RRA': - { - // change favicon and title - const link: HTMLLinkElement = this.document.querySelector("link[rel~='icon']"); - link.href = 'assets/icons/favicon_rra.ico?app=rra1'; - - var title = this.document.querySelector('title'); - title.innerText = 'CISA - Ransomware Readiness'; - } - break; - case 'RENEW': - { - // change favicon and title - const link: HTMLLinkElement = this.document.querySelector("link[rel~='icon']"); - link.href = 'assets/icons/favicon_renew.ico?app=renew1'; - - var title = this.document.querySelector('title'); - title.innerText = 'CSET Renewables'; + + var x = document.getElementsByClassName('ncua-seal'); + if (x.length > 0) { + x[0].classList.remove('d-none'); } - break; - default: { + + // change favicon and title + const link: HTMLLinkElement = this.document.querySelector("link[rel~='icon']"); + link.href = 'assets/icons/favicon_acet.ico?app=acet1'; + + var title = this.document.querySelector('title'); + title.innerText = 'ACET'; + } + break; + case 'TSA': + { + // change favicon and title + const link: HTMLLinkElement = this.document.querySelector("link[rel~='icon']"); + link.href = 'assets/icons/favicon_tsa.ico?app=tsa1'; + + var title = this.document.querySelector('title'); + title.innerText = 'CSET-TSA'; + } + break; + case 'CF': + { + // change favicon and title + const link: HTMLLinkElement = this.document.querySelector("link[rel~='icon']"); + link.href = 'assets/icons/favicon_cf.ico?app=cf1'; + + var title = this.document.querySelector('title'); + title.innerText = 'CSET-CF'; + } + break; + case 'RRA': + { // change favicon and title const link: HTMLLinkElement = this.document.querySelector("link[rel~='icon']"); - link.href = 'assets/icons/favicon_cset.ico?app=cset'; + link.href = 'assets/icons/favicon_rra.ico?app=rra1'; var title = this.document.querySelector('title'); - title.innerText = 'CSET'; + title.innerText = 'CISA - Ransomware Readiness'; } + break; + case 'RENEW': + { + // change favicon and title + const link: HTMLLinkElement = this.document.querySelector("link[rel~='icon']"); + link.href = 'assets/icons/favicon_renew.ico?app=renew1'; + + var title = this.document.querySelector('title'); + title.innerText = 'CSET Renewables'; + } + break; + default: { + // change favicon and title + const link: HTMLLinkElement = this.document.querySelector("link[rel~='icon']"); + link.href = 'assets/icons/favicon_cset.ico?app=cset'; + + var title = this.document.querySelector('title'); + title.innerText = 'CSET'; + } } } }