Example #1
0
class Query():
    def __init__(self, api=None):
        self.apiurl = api
        if not api:
            self.api = API()

    def _query(self, url):
        r = requests.get(urllib.parse.urljoin(self.apiurl, url),
                         headers={
                             'Version': '2.0',
                             'Accept': '*/json'
                         })
        data = json.loads(r.text)
        if r.status_code is 200 and data['status'] == 'success':
            return data['data']
        elif (r.status_code is 404 and data['status'] == 'success'
              and data['reason'] == 'cve not found'):
            return None
        else:
            return False

    def cve(self, cveid):
        if self.apiurl:
            cve = self._query("api/cve/%s" % str(cveid))
            return cve and CVE.fromDict(cve) or None
        try:
            return self.api.api_cve(cveid)
        except:
            return None

    def cveforcpe(self, cpe):
        if self.apiurl:
            cpes = self._query("api/cvefor/%s" % str(cpe))
            return cpes and [CVE.fromDict(x) for x in cpes] or cpes
        return self.api.api_cvesFor(cpe)

    def last(self, entries=None):
        if self.apiurl:
            url = "api/last"
            if entries:
                url = "%s/%s" % (url, str(entries))
            cves = self._query(url)
            return cves and [CVE.fromDict(x) for x in cves] or cves
        return self.api.api_last(entries)[0]

    def browse(self, vendor=None):
        if self.apiurl:
            url = "api/browse"
            if vendor:
                url = "%s/%s" % (url, vendor)
            return self._query(url)
        return self.api.api_browse(vendor)

    def search(self, query):
        if self.apiurl:
            cves = self._query("api/search/%s" % str(query))
            return cves and [CVE.fromDict(x) for x in cves['data']] or []
        return self.api.api_text_search(query) or []