def scan(cpv, url): 'http://wiki.python.org/moin/PyPiXmlRpc' package = guess_package(cpv, url) output.einfo("Using PyPi XMLRPC: " + package) client = xmlrpclib.ServerProxy('http://pypi.python.org/pypi') versions = client.package_releases(package) if not versions: return versions versions.reverse() cp, ver, rev = portage.pkgsplit(cpv) ret = [] for up_pv in versions: pv = helpers.gentoo_mangle_version(up_pv) if helpers.version_filtered(cp, ver, pv): continue urls = client.release_urls(package, up_pv) urls = " ".join([infos['url'] for infos in urls]) ret.append((urls, pv, HANDLER_NAME, CONFIDENCE)) return ret
def scan(cpv, url): 'http://developer.github.com/v3/repos/downloads/' user, project, filename = guess_package(cpv, url) # find out where version is expected to be found cp, ver, rev = portage.pkgsplit(cpv) if ver not in filename: return # now create a filename-matching regexp # XXX: supposedly replace first with (?P<foo>...) # and remaining ones with (?P=foo) fnre = re.compile('^%s$' % re.escape(filename).replace(re.escape(ver), '(.*?)')) output.einfo("Using github API for: " + '/'.join(package)) dlreq = urllib2.urlopen('https://api.github.com/repos/%s/%s/downloads' % (user, project)) dls = json.load(dlreq) for dl in dls: m = fnre.match(dl['name']) if m: pv = helpers.gentoo_mangle_version(m.group(1)) if helpers.version_filtered(cp, ver, pv): continue yield (dl['html_url'], pv, HANDLER_NAME, CONFIDENCE)
def scan_directory_recursive(cp, ver, rev, url, steps, orig_url): if not steps: return [] url += steps[0][0] pattern = steps[0][1] steps = steps[1:] euscan.output.einfo("Scanning: %s" % url) try: fp = helpers.urlopen(url) except urllib2.URLError: return [] except IOError: return [] if not fp: return [] data = fp.read() results = [] if re.search("<\s*a\s+[^>]*href", data): results.extend(scan_html(data, url, pattern)) elif url.startswith('ftp://'): results.extend(scan_ftp(data, url, pattern)) versions = [] for up_pv, path in results: pv = helpers.gentoo_mangle_version(up_pv) if helpers.version_filtered(cp, ver, pv): continue if not url.endswith('/') and not path.startswith('/'): path = url + '/' + path else: path = url + path if not steps and path not in orig_url: versions.append((path, pv)) if steps: ret = scan_directory_recursive(cp, ver, rev, path, steps, orig_url) versions.extend(ret) return versions
def gentoo_mangle_version(up_pv): pv = "" if up_pv.count('.') == 1: digits = 0 for i in range(len(up_pv)): if digits == 3: pv += "." digits = 0 c = up_pv[i] pv += c digits += int(c.isdigit()) if c == '.': digits = 0 else: pv = up_pv return helpers.gentoo_mangle_version(pv)
def scan(cpv, url): 'http://guides.rubygems.org/rubygems-org-api/#gemversion' gem = guess_gem(cpv, url) if not gem: euscan.output.eerror("Can't guess gem name using %s and %s" % \ (cpv, url)) return [] url = 'http://rubygems.org/api/v1/versions/%s.json' % gem euscan.output.einfo("Using: " + url) try: fp = helpers.urlopen(url) except urllib2.URLError: return [] except IOError: return [] if not fp: return [] data = fp.read() versions = json.loads(data) if not versions: return [] cp, ver, rev = portage.pkgsplit(cpv) ret = [] for version in versions: up_pv = version['number'] pv = helpers.gentoo_mangle_version(up_pv) if helpers.version_filtered(cp, ver, pv): continue url = 'http://rubygems.org/gems/%s-%s.gem' % (gem, up_pv) ret.append((url, pv)) return ret
def scan(cpv, url): cp, ver, rev = portage.pkgsplit(cpv) pkg, channel = guess_package_and_channel(cp, url) orig_url = url url = 'http://%s/rest/r/%s/allreleases.xml' % (channel, pkg.lower()) output.einfo("Using: " + url) try: fp = helpers.urlopen(url) except urllib2.URLError: return [] except IOError: return [] if not fp: return [] data = fp.read() dom = xml.dom.minidom.parseString(data) nodes = dom.getElementsByTagName("v") ret = [] for node in nodes: up_pv = node.childNodes[0].data pv = helpers.gentoo_mangle_version(up_pv) if helpers.version_filtered(cp, ver, pv): continue url = 'http://%s/get/%s-%s.tgz' % (channel, pkg, up_pv) if url == orig_url: continue ret.append((url, pv, HANDLER_NAME, CONFIDENCE)) return ret