Commit 7b229728 authored by PidgeyL's avatar PidgeyL
Browse files

more database layer abstraction

parent f7cebac1
Loading
Loading
Loading
Loading
+2 −12
Original line number Diff line number Diff line
@@ -17,19 +17,9 @@ import json
from bson import json_util

import lib.CVEs as cves
import lib.DatabaseLayer as db
from lib.Config import Configuration

# connect to db
db = Configuration.getMongoConnection()
collection = db.cves


def dumpallcveid(limit=False):
    cveid = []
    for x in collection.find({}).sort('_id', 1).limit(limit):
        cveid.append(x['id'])
    return cveid

argParser = argparse.ArgumentParser(description='Dump database in JSON format')
argParser.add_argument('-r', default=False, action='store_true', help='Include ranking value')
argParser.add_argument('-v', default=False, action='store_true', help='Include vfeed map')
@@ -43,6 +33,6 @@ capeclookup = args.c

l = cves.last(rankinglookup=rankinglookup, vfeedlookup=vfeedlookup, capeclookup=capeclookup)

for cveid in dumpallcveid(limit=args.l):
for cveid in db.getCVEIDs(limit=args.l):
    item = l.getcve(cveid=cveid)
    print (json.dumps(item, sort_keys=True, default=json_util.default))
+8 −20
Original line number Diff line number Diff line
@@ -16,17 +16,14 @@ import re
import argparse

from lib.Config import Configuration

import lib.DatabaseLayer as db

runPath = os.path.dirname(os.path.realpath(__file__))

# connect to DB
db = Configuration.getMongoConnection()

vOutput = ""

argParser = argparse.ArgumentParser(description='Search for CPE with a pattern')
argParser.add_argument('-s', type=str, help='search in cpe list')
argParser.add_argument('-s', type=str, required=True, help='search in cpe list')
argParser.add_argument('-o', type=str, help='O = output format [compact]')
argParser.add_argument('-f', action='store_true', help='Enlarge the CPE search to all CPE indexed. Need the cpeother activated.', default=False)

@@ -35,9 +32,8 @@ cpeSearch = args.s
vOutput = args.o


def search(collection, cpe):
    res = collection.find({'id': {'$regex': re.compile(cpe, re.IGNORECASE)}})
    res.count()
def search(cpe):
    res = db.getCPEMatching(re.compile(cpe, re.IGNORECASE), args.f)

    if vOutput == "compact":
        for item in res:
@@ -46,16 +42,8 @@ def search(collection, cpe):
        for item in res:
            print(item['id'] + "  " + item['title'])


if not cpeSearch:
    print ("no option provided")
    argParser.print_help()
else:
# replace special characters in cpeSearch with encoded version.
cpeSearch = re.sub(r'\(', '%28', cpeSearch)
cpeSearch = re.sub(r'\)', '%29', cpeSearch)

    search(db.cpe, cpeSearch)

    if args.f:
        search(db.cpeother, cpeSearch)
search(cpeSearch)
+8 −0
Original line number Diff line number Diff line
@@ -96,12 +96,20 @@ def getCVEs(limit=-1, query=[], skip=0):
    cves=colCVE.find({"$and": query}).sort("Modified", -1).limit(limit).skip(skip)
  return sanitize(cves)

def getCVEIDs(limit=-1):
  return [x["id"] for x in colCVE.find().limit(limit).sort("Modified", -1)]

def getCVE(id):
  return sanitize(colCVE.find_one({"id": id}))

def getCPE(id):
  return sanitize(colCPE.find_one({"id": id}))

def getCPEMatching(regex, fullSearch=False):
  lst=list(colCPE.find({"id": {"$regex": regex}}))
  if fullSearch: lst.extend(colCPEOTHER.find({"id": {"$regex": regex}}))
  return lst

def getAlternativeCPE(id):
  return sanitize(colCPEOTHER.find_one({"id": id}))