102 lines
2.2 KiB
PHP
102 lines
2.2 KiB
PHP
|
<?php
|
||
|
|
||
|
/**
|
||
|
* File: parse_cci.php
|
||
|
* Author: Ryan Prather
|
||
|
* Purpose: Script to parse CCI library
|
||
|
* Created: Jul 28, 2014
|
||
|
*
|
||
|
* Portions Copyright (c) 2012-2015, Salient Federal Solutions
|
||
|
* Portions Copyright (c) 2008-2011, Science Applications International Corporation (SAIC)
|
||
|
* Released under Modified BSD License
|
||
|
*
|
||
|
* See license.txt for details
|
||
|
*
|
||
|
* Change Log:
|
||
|
* - Jul 28, 2014 - File created
|
||
|
*/
|
||
|
$cmd = getopt("f:", array('debug::', "help::"));
|
||
|
|
||
|
if (!isset($cmd['f']) || isset($cmd['help'])) {
|
||
|
usage();
|
||
|
exit;
|
||
|
}
|
||
|
|
||
|
include_once 'config.inc';
|
||
|
include_once 'database.inc';
|
||
|
include_once 'helper.inc';
|
||
|
|
||
|
chdir(DOC_ROOT);
|
||
|
|
||
|
set_time_limit(0);
|
||
|
|
||
|
$base_name = basename($cmd['f']);
|
||
|
$db = new db();
|
||
|
$err = new Sagacity_Error($cmd['f']);
|
||
|
$match = array();
|
||
|
|
||
|
if (!file_exists($cmd['f'])) {
|
||
|
$err->script_log("File not found", E_ERROR);
|
||
|
}
|
||
|
|
||
|
$xml = new DOMDocument();
|
||
|
if (!$xml->load($cmd['f'])) {
|
||
|
$err->script_log("There was an issue loading XML document", E_ERROR);
|
||
|
}
|
||
|
|
||
|
$cci_list = getValue($xml, "/root/cci", null, true);
|
||
|
|
||
|
print "Reading $cci_list->length CCIs" . PHP_EOL;
|
||
|
|
||
|
$all_ccis = array();
|
||
|
|
||
|
foreach ($cci_list as $cci_node) {
|
||
|
$cci = new cci();
|
||
|
$cci->cci_id = preg_replace("/CCI\-[0]+/", "", $cci_node->getAttribute("id"));
|
||
|
|
||
|
if ($cci->cci_id > 3391) {
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
$control = getValue($xml, "control", $cci_node);
|
||
|
$cci->control_id = preg_replace("/ \(\d+\)/", "", $control);
|
||
|
$cci->definition = getValue($xml, "definition", $cci_node);
|
||
|
$cci->guidance = getValue($xml, "guidance", $cci_node);
|
||
|
$cci->procedure = getValue($xml, "procedure", $cci_node);
|
||
|
|
||
|
if (preg_match("/ \(([\d]+)\)/", getValue($xml, "control", $cci_node), $match)) {
|
||
|
$cci->enh_id = $match[1];
|
||
|
}
|
||
|
else {
|
||
|
$cci->enh_id = null;
|
||
|
}
|
||
|
|
||
|
$all_ccis[] = $cci;
|
||
|
|
||
|
print "$cci->cci_id" . PHP_EOL;
|
||
|
|
||
|
if (count($all_ccis) == 100) {
|
||
|
print "Saving 100 CCI's" . PHP_EOL;
|
||
|
$db->save_CCI($all_ccis);
|
||
|
$all_ccis = array();
|
||
|
}
|
||
|
}
|
||
|
//die;
|
||
|
print "Saving..." . PHP_EOL;
|
||
|
$db->save_CCI($all_ccis);
|
||
|
print "Done saving " . count($all_ccis) . " CCIs" . PHP_EOL;
|
||
|
|
||
|
function usage() {
|
||
|
print <<<EOO
|
||
|
Purpose: To parse the NIST CCI list
|
||
|
|
||
|
Usage: php parse_cci.php -f={CCI list file} [--debug] [--help]
|
||
|
|
||
|
-f={CCI file} The CCI file to parse
|
||
|
|
||
|
--debug Debugging output
|
||
|
--help This screen
|
||
|
|
||
|
EOO;
|
||
|
}
|