Skip to content
This repository was archived by the owner on Jul 10, 2025. It is now read-only.

Commit f31024f

Browse files
committed
rulecat: wip: multi url support
1 parent 91ba991 commit f31024f

File tree

1 file changed

+17
-12
lines changed

1 file changed

+17
-12
lines changed

idstools/scripts/rulecat.py

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import hashlib
3838
import fnmatch
3939
import subprocess
40+
import types
4041

4142
try:
4243
from io import BytesIO
@@ -279,31 +280,33 @@ def progress_hook(self, content_length, bytes_read):
279280
sys.stdout.write("\n")
280281
sys.stdout.flush()
281282

282-
def run(self):
283-
url = self.get_rule_url()
283+
def fetch(self, url):
284+
logger.info("Fetching %s." % (url))
284285
tmp_filename = os.path.join(self.args.temp, os.path.basename(url))
285286
if not self.args.force and os.path.exists(tmp_filename):
286287
if time.time() - os.stat(tmp_filename).st_mtime < (60 * 15):
287288
logger.info(
288289
"Last download less than 15 minutes ago. Not fetching.")
289-
return self.files_as_dict()
290+
return self.files_as_dict(tmp_filename)
290291
if self.check_checksum(tmp_filename, url):
291292
logger.info("Remote checksum has not changed. Not fetching.")
292-
return self.files_as_dict()
293+
return self.files_as_dict(tmp_filename)
293294
if not os.path.exists(self.args.temp):
294295
os.makedirs(self.args.temp)
295-
logger.info("Fetching %s." % (url))
296296
idstools.net.get(
297297
url, open(tmp_filename, "wb"), progress_hook=self.progress_hook)
298298
logger.info("Done.")
299-
return self.files_as_dict()
299+
return self.files_as_dict(tmp_filename)
300300

301-
def basename(self):
302-
return os.path.basename(self.get_rule_url())
301+
def run(self):
302+
urls = self.get_rule_url()
303+
files = {}
304+
for url in urls:
305+
files.update(self.fetch(url))
306+
return files
303307

304-
def files_as_dict(self):
305-
files = idstools.util.archive_to_dict(
306-
os.path.join(self.args.temp, self.basename()))
308+
def files_as_dict(self, filename):
309+
files = idstools.util.archive_to_dict(filename)
307310

308311
# Erase path information.
309312
for key in files.keys():
@@ -626,7 +629,7 @@ def main():
626629
help="Output merged rules file")
627630
parser.add_argument("--yaml-fragment", metavar="<filename>",
628631
help="Output YAML fragment for rule inclusion")
629-
parser.add_argument("--url", metavar="<url>",
632+
parser.add_argument("--url", metavar="<url>", action="append",
630633
help="URL to use instead of auto-generating one")
631634
parser.add_argument("--local", metavar="<filename>",
632635
help="Local rule files or directories")
@@ -655,6 +658,8 @@ def main():
655658
help="Command to run after update if modified")
656659
args = parser.parse_args()
657660

661+
print(args)
662+
658663
if args.verbose:
659664
logger.setLevel(logging.DEBUG)
660665
if args.quiet:

0 commit comments

Comments
 (0)