%@LANGUAGE="VBSCRIPT"%> <% '===================================================== '| | '| REPORT | '| SBOM Issues | '===================================================== %> <% Option explicit ' Good idea to set when using redirect Response.Expires = 0 ' always load the page, dont store 'To enable the script timeout to 5 mins Server.ScriptTimeout=300 %> <% '------------ ACCESS CONTROL ------------------ %> <% '------------ Variable Definition ------------- Dim rsQry Dim parPv_id Dim objSbomDetailsA, objSbomDetailsB Dim objRelCollectorA, objRelCollectorB Dim parSbomA, parSbomB Dim retValCQIssues Dim retValJIRAIssues Dim topLevelId Dim DEVIiss Dim pvIdList Dim objIssueDetails Dim cqIssues Dim jiraIssues Dim rsBomPackages Dim rsPkgDeps Dim multiPackagesEnabled '------------ Constants Declaration ----------- '------------ Variable Init ------------------- parSbomA = Request("sbomA") parSbomB = Request("sbomB") Set objRelCollectorA = CreateObject("Scripting.Dictionary") Set objRelCollectorB = CreateObject("Scripting.Dictionary") Set objSbomDetailsA = CreateObject("Scripting.Dictionary") Set objSbomDetailsB = CreateObject("Scripting.Dictionary") Set objIssueDetails = CreateObject("Scripting.Dictionary") Set cqIssues = Server.CreateObject("ADODB.Recordset") Set jiraIssues = Server.CreateObject("ADODB.Recordset") Set rsBomPackages = Server.CreateObject("ADODB.Recordset") Set rsPkgDeps = Server.CreateObject("ADODB.Recordset") '---------------------------------------------- %> <% '---------------------------------------------------------------------------------------------------------------------------------------- Sub GetFormDetails ( nSourceSBOM, ByRef tempObjRelCollector ) Dim rsQry, query ' Exit if nSourceRtagId is empty If nSourceSBOM = "" Then Exit Sub OraDatabase.Parameters.Add "SBOM", nSourceSBOM, ORAPARM_INPUT, ORATYPE_NUMBER query = _ " SELECT pr.PROJ_NAME ||' > '|| br.BRANCH_NAME ||' > '|| b.BOM_VERSION ||'.'||b.BOM_LIFECYCLE AS LOCATION, "&_ " pr.PROJ_ID, b.BOM_ID, br.BRANCH_ID, b.IS_READONLY, b.RTAG_ID_FK"&_ " FROM BRANCHES br,"&_ " BOMS b,"&_ " DM_PROJECTS pr"&_ " WHERE br.PROJ_ID = pr.PROJ_ID"&_ " AND b.BRANCH_ID = br.BRANCH_ID"&_ " AND b.BOM_ID = :SBOM" Set rsQry = OraDatabase.DbCreateDynaset( query, ORADYN_DEFAULT ) OraDatabase.Parameters.Remove "SBOM" If rsQry.RecordCount > 0 Then tempObjRelCollector ("location") = rsQry("location") tempObjRelCollector ("official") = rsQry("IS_READONLY") tempObjRelCollector ("proj_id") = rsQry("proj_id") tempObjRelCollector ("branch_id") = rsQry("branch_id") tempObjRelCollector ("bom_id") = rsQry("bom_id") tempObjRelCollector ("rtag_id_fk") = rsQry("rtag_id_fk") Else Err.Raise 8, "Sub GetFormDetails in "& SCRIPT_NAME, "Empty record set returned. nSourceSBOM="& nSourceSBOM End If If tempObjRelCollector ("location") = "" Then tempObjRelCollector.Item ("location") = "N" End If rsQry.Close Set rsQry = Nothing End Sub '---------------------------------------------------------------------------------------------------------------------------------------- Sub GetPackageDetailsForIssue ( nIss_id, sPvIdList, tempIssDetails ) Dim query query = " SELECT DISTINCT pkg.pkg_name, pv.pkg_version, pv.v_ext, pkg.pkg_id, pv.pv_id "&_ " FROM package_versions pv, packages pkg, cq_issues iss "&_ " WHERE pv.pkg_id = pkg.pkg_id AND pv.pv_id = iss.pv_id AND iss.iss_id = :ISS_ID AND pv.pv_id IN ("& sPvIdList &")" OraDatabase.Parameters.Add "ISS_ID", nIss_id, ORAPARM_INPUT, ORATYPE_NUMBER Set tempIssDetails = OraDatabase.DbCreateDynaset( query, ORADYN_DEFAULT ) OraDatabase.Parameters.Remove "ISS_ID" If tempIssDetails.RecordCount = 0 Then Err.Raise 8, "Sub GetPackageDetailsForIssue in "& SCRIPT_NAME, "Empty record set returned. nIss_id="& nIss_id End If End Sub '---------------------------------------------------------------------------------------------------------------------------------------- Sub GetPackageDetailsForJIRAIssue ( nIss_Key, sPvIdList, tempIssDetails ) Dim query query = " SELECT DISTINCT pkg.pkg_name, pv.pkg_version, pv.v_ext, pkg.pkg_id, pv.pv_id "&_ " FROM package_versions pv, packages pkg, jira_issues iss "&_ " WHERE pv.pkg_id = pkg.pkg_id AND pv.pv_id = iss.pv_id AND iss.iss_key = :ISS_ID AND pv.pv_id IN ("& sPvIdList &")" OraDatabase.Parameters.Add "ISS_ID", nIss_Key, ORAPARM_INPUT, ORATYPE_NUMBER Set tempIssDetails = OraDatabase.DbCreateDynaset( query, ORADYN_DEFAULT ) OraDatabase.Parameters.Remove "ISS_ID" If tempIssDetails.RecordCount = 0 Then Err.Raise 8, "Sub GetPackageDetailsForJIRAIssue in "& SCRIPT_NAME, "Empty record set returned. nIss_Key="& nIss_Key End If End Sub '---------------------------------------------------------------------------------------------------------------------------------------- Function GetIssues( sPvIdList, oRsCqIssTemp ) Dim sqlStrTemp, oRsTemp Set oRsTemp = OraDatabase.DbCreateDynaset("SELECT iss_db, iss_id FROM CQ_ISSUES WHERE pv_id IN ("& sPvIdList &")", cint(0)) If oRsTemp.RecordCount <> 0 Then DEVIiss = "-1" While ((NOT oRsTemp.BOF) AND (NOT oRsTemp.EOF)) If CInt(oRsTemp("iss_db")) = CInt(enumCLEARQUEST_DEVI_ID) Then DEVIiss = DEVIiss &","& oRsTemp("iss_id") End If oRsTemp.MoveNext WEnd sqlStrTemp = GetQuery ("cq_issues.sql") sqlStrTemp = Replace( sqlStrTemp, "/*enumCLEARQUEST_DEVI_ID*/", enumCLEARQUEST_DEVI_ID) sqlStrTemp = Replace( sqlStrTemp, "/*DEVIiss*/", DEVIiss) If oRsCqIssTemp.State = 1 Then oRsCqIssTemp.Close End If On Error Resume Next oRsCqIssTemp.ActiveConnection = CQ_conn oRsCqIssTemp.Source = sqlStrTemp oRsCqIssTemp.CursorType = 0 oRsCqIssTemp.CursorLocation = 2 oRsCqIssTemp.LockType = 3 oRsCqIssTemp.Open() GetIssues = Err.Number Else GetIssues = -1 End If End Function '---------------------------------------------------------------------------------------------------------------------------------------- Function Get_JIRA_Issues ( sPvIdList, oRsJiraIssTemp ) Dim rsTemp, JIRAIss Dim jira_query_string JIRAIss = "'-1'" Set rsTemp = OraDatabase.DbCreateDynaset( "SELECT DISTINCT iss_key FROM JIRA_ISSUES WHERE pv_id IN ("& sPvIdList & ")", cint(0)) If rsTemp.RecordCount <> 0 Then ' Get iss_key's into a CSV list for use in the query to be submitted to the JIRA database While ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF)) JIRAIss = JIRAIss &",'"& rsTemp("iss_key")&"'" rsTemp.MoveNext WEnd rsTemp.Close() Set rsTemp = nothing ' Form the JIRA database query string jira_query_string = "SELECT I.pkey AS iss_num, I.summary, ISS.pname AS state, IT.pname as IssueType, PR.pname as Priority, I.RESOLUTION "&_ " FROM jiraissue I, issuestatus ISS, issuetype IT, priority PR "&_ " WHERE I.pkey IN ("& JIRAIss &") "&_ " AND I.issuestatus = ISS.ID "&_ " AND IT.ID = I.issuetype "&_ " AND PR.ID = I.PRIORITY " If oRsJiraIssTemp.State = 1 Then oRsJiraIssTemp.Close() End If On Error Resume Next oRsJiraIssTemp.ActiveConnection = JIRA_conn oRsJiraIssTemp.Source = jira_query_string oRsJiraIssTemp.CursorType = 0 oRsJiraIssTemp.CursorLocation = 3 oRsJiraIssTemp.LockType = 3 oRsJiraIssTemp.Open() Get_JIRA_Issues = Err.Number Else Get_JIRA_Issues = -1 End If End Function '---------------------------------------------------------------------------------------------------------------------------------------- Sub GetPackageDependencies ( nPv_id_a, nPv_id_b, oRsTemp ) OraDatabase.Parameters.Add "PV_ID_A", nPv_id_a, ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "PV_ID_B", nPv_id_b, ORAPARM_INPUT, ORATYPE_NUMBER Set oRsTemp = OraDatabase.DbCreateDynaset( GetQuery ("UniquePackageDependencies.sql"), ORADYN_DEFAULT ) OraDatabase.Parameters.Remove "PV_ID_A" OraDatabase.Parameters.Remove "PV_ID_B" End Sub '---------------------------------------------------------------------------------------------------------------------------------------- Sub GetAllBomContents ( nSbom_id, oRsTemp ) OraDatabase.Parameters.Add "SBOM_ID", nSbom_id, ORAPARM_INPUT, ORATYPE_NUMBER Set oRsTemp = OraDatabase.DbCreateDynaset( GetQuery ("BomPackagesAndDeps.sql"), ORADYN_DEFAULT ) OraDatabase.Parameters.Remove "SBOM_ID" End Sub '---------------------------------------------------------------------------------------------------------------------------------------- Sub GetBomPackages ( nSbomA, nSbomB, oRsTemp ) OraDatabase.Parameters.Add "SBOM_A", nSbomA, ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "SBOM_B", nSbomB, ORAPARM_INPUT, ORATYPE_NUMBER Set oRsTemp = OraDatabase.DbCreateDynaset( GetQuery ("BomPackageDiff.sql"), ORADYN_DEFAULT ) OraDatabase.Parameters.Remove "SBOM_A" OraDatabase.Parameters.Remove "SBOM_B" End Sub '---------------------------------------------------------------------------------------------------------------------------------------- %> <% '---------------------- Run Before Page --------------------------- ' Get release details Call GetFormDetails ( parSbomA, objRelCollectorA ) Call GetFormDetails ( parSbomB, objRelCollectorB ) multiPackagesEnabled = FALSE If parSbomA <> "" AND parSbomB <> "" Then If Request("form_btn_comp") = "Get Issues" Then Call OpenInWindow ( SCRIPT_NAME &"?sbomA="& parSbomA &"&sbomB="& parSbomB ) End If Call GetBomDetails (parSbomA, objSbomDetailsA) Call GetBomDetails (parSbomB, objSbomDetailsB) objSbomDetailsA("bom_full_version") = objSbomDetailsA("bom_name")&" "& objSbomDetailsA("bom_version") &"."& objSbomDetailsA("bom_lifecycle") objSbomDetailsB("bom_full_version") = objSbomDetailsB("bom_name")&" "& objSbomDetailsB("bom_version") &"."& objSbomDetailsB("bom_lifecycle") ' Check for the submission of the "multiplepackageS" checkbox that enables multiple packages to be identified and rendered on the page ' for each issue, if applicable. If Request("multipackages") = "TRUE" Then multiPackagesEnabled = TRUE Else multiPackagesEnabled = FALSE End If Else objSbomDetailsA("bom_full_version") = "Software Bill of Materials (SBOM)" End If '------------------------------------------------------------------ %>