Commit c0a828a8 authored by PidgeyL's avatar PidgeyL
Browse files

more database abstraction

parent ec339e0b
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -383,7 +383,6 @@ def cpe22(cpe):

@app.route('/api/cvefor/<path:cpe>', methods=['GET'])
def apiCVEFor(cpe):
    col = db['cves']
    cpe=urllib.parse.unquote_plus(cpe)
    cpe=toStringFormattedCPE(cpe)
    r = []
+4 −39
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ from logging.handlers import RotatingFileHandler
from lib.Config import Configuration
from lib.Toolkit import toStringFormattedCPE, toOldCPE, currentTime, isURL, vFeedName, convertDateToDBFormat
import lib.CVEs as cves
import lib.DatabaseLayer as dbLayer

# parse command line arguments
argparser = argparse.ArgumentParser(description='Start CVE-Search web component')
@@ -77,29 +78,8 @@ def getVersionsOfProduct(product):
    return sorted(list(p))


    cveU = db.info.find_one({'db': 'cve'})
    cpeU = db.info.find_one({'db': 'cpe'})
    cpeOtherU = db.info.find_one({'db': 'cpeother'})
    capecU = db.info.find_one({'db': 'capec'})
    d2secU = db.info.find_one({'db': 'd2sec'})
    vendorU = db.info.find_one({'db': 'vendor'})
    vfeedU = db.info.find_one({'db': 'vfeed'})
    stats = {'cveA': db.cves.count(), 'cveU': cveU['last-modified'] if cveU is not None else None,
             'cpeA': db.cpe.count(), 'cpeU': cpeU['last-modified'] if cpeU is not None else None,
             'cpeOtherA': db.cpeother.count(), 'cpeOtherU': cpeOtherU['last-modified'] if cpeOtherU is not None else None,
             'capecA': db.capec.count(), 'capecU': capecU['last-modified'] if capecU is not None else None,
             'd2secA': db.d2sec.count(), 'd2secU': d2secU['last-modified'] if d2secU is not None else None,
             'vendorA': db.vendor.count(), 'vendorU': vendorU['last-modified'] if vendorU is not None else None,
             'vfeedA': db.vfeed.count(), 'vfeedU': vfeedU['last-modified'] if vfeedU is not None else None,
             'blA': db.mgmt_blacklist.count(), 'wlA': db.mgmt_whitelist.count(),
             'dbName': Configuration.getMongoDB(), 'dbSize': db.command("dbstats")['dataSize'],
             'dbOnDisk': db.command("dbstats")['storageSize']}
    return stats


def filter_logic(unlisted, timeSelect, startDate, endDate,
                 timeTypeSelect, cvssSelect, cvss, rejectedSelect, limit, skip):
    collection = db.cves
    query = []
    # retrieving lists
    if rejectedSelect == "hide":
@@ -125,15 +105,7 @@ def filter_logic(unlisted, timeSelect, startDate, endDate,
            query.append({timeTypeSelect: {'$gt': startDate, '$lt': endDate}})
        if timeSelect == "outside":
            query.append({'$or': [{timeTypeSelect: {'$lt': startDate}}, {timeTypeSelect: {'$gt': endDate}}]})
    if len(query) == 0:
        cve = collection.find().sort("Modified", -1).limit(limit).skip(skip)
    elif len(query) == 1:
        cve = collection.find(query[0]).sort("Modified", -1).limit(limit).skip(skip)
    else:
        cve = collection.find({'$and': query}).sort("Modified", -1).limit(limit).skip(skip)
    # marking relevant records
    cve = list(cve)
    return cve
    return dbLayer.getCVEs(limit=limit, skip=skip, query=query)

# routes
@app.route('/')
@@ -213,10 +185,9 @@ def apiCVEFor(cpe):
    cpe=urllib.parse.unquote_plus(cpe)
    cpe=toStringFormattedCPE(cpe)
    if not cpe: cpe='None'
    vulns = col.find({"vulnerable_configuration": {'$regex': cpe}}).sort("Modified", -1)
    r = []
    cvesp = cves.last(rankinglookup=False, namelookup=False, vfeedlookup=True, capeclookup=False)
    for x in vulns:
    for x in dbLayer.cvesForCPE(cpe):
        r.append(cvesp.getcve(x['id']))
    return json.dumps(r)

@@ -245,14 +216,8 @@ def apibrowse(vendor=None):
def apisearch(vendor=None, product=None):
    if vendor is None or product is None:
        return (jsonify({}))
    collection = db.cves
    search = vendor + ":" + product
    cves = collection.find({"vulnerable_configuration": {'$regex': search}}).sort("Modified", -1)
    r = []
    for cve in cves:
        cve.pop('_id')
        r.append(cve)
    return (json.dumps(r))
    return (json.dumps(dbLayer.cvesForCPE(search)))

@app.route('/cve/<cveid>')
def cve(cveid):