def l(self, uuid): mindex = index.manage(sharedir=forbanshareroot, forbanglobal=forbanpath) dloot = loot.loot(dynpath=os.path.join(forbanpath,"var")) html = htmlheader html += """<br/> <br/> <br /> <div class="left inner"> <h2>Files available in loot %s </h2>""" % dloot.getname(uuid) html += htmlnav html += "<table>" html += "<tr><td>Filename</td><td>Fetch</td></tr>" for fileinindex in mindex.search("^((?!forban).)*$", uuid): filei = fileinindex.rsplit(",",1)[0] if re.search('/\.',filei): continue if re.search('^\+\.',filei): continue html += "<tr>" sourcev4 = dloot.getipv4(uuid) sourcev6 = dloot.getipv6(uuid) size = tools.convertbytes(mindex.getfilesize(filename=filei,uuid=uuid)) html += """<td>%s (%s)</td><td><a href="/s/?g=%s&f=b64e">get</a></td> """ % (filei,size,base64e.encode(filei)) html += "</tr>" html += "</table>" html += htmlfooter return html
def q(self, v=None, r=None): querystring = v mindex = index.manage(sharedir=forbanshareroot, forbanglobal=forbanpath) discoveredloot = loot.loot(dynpath=os.path.join(forbanpath,"var")) searchresult = [] for name in discoveredloot.listall(): if (discoveredloot.exist(name) and discoveredloot.lastannounced(name)): fileavailable = mindex.search( uuid=name, query=querystring) for filefound in fileavailable: searchresult.append((filefound,name)) searchresult.sort() html = htmlheader html += "<title>search results of %s</title>" % (querystring) if r is not None: html += """<meta http-equiv="refresh" content="%s">""" % (r) html += "</head>" html += htmlnav html += """<br/> <br/> <div class="left inner">""" previousfile = None html += "<table><tr><th>Filename</th><th>Available on</th></tr>" for foundfiles in searchresult: if foundfiles[0] == previousfile: html += """<a href="%s">%s</a> """ % (forban_geturl(uuid=foundfiles[1],filename=filename),discoveredloot.getname(foundfiles[1])) elif previousfile == None: filename = foundfiles[0].rsplit(",",1)[0] html += """<td>%s</td> <td><a href="%s">%s</a> """ % (foundfiles[0].rsplit(",",1)[0],forban_geturl(uuid=foundfiles[1],filename=filename),discoveredloot.getname(foundfiles[1])) else: filename = foundfiles[0].rsplit(",",1)[0] html += """</td></tr><td>%s</td> <td><a href="%s">%s</a> """ % (foundfiles[0].rsplit(",",1)[0],forban_geturl(uuid=foundfiles[1],filename=filename),discoveredloot.getname(foundfiles[1])) previousfile=foundfiles[0] html += "</td></tr></table></div>" return html
def v(self, uuid): mindex = index.manage(sharedir=forbanshareroot, forbanglobal=forbanpath) dloot = loot.loot(dynpath=os.path.join(forbanpath,"var")) missingfiles = mindex.howfar(uuid) html = htmlheader html += """<br/> <br/> <br/> <div class="left inner"> <h2>Missing files on your loot from %s </h2>""" % dloot.getname(uuid) html += htmlnav html += "<table>" if missingfiles is None: html += "You are not missing any files with %s " % dloot.getname(uuid) else: for filemissed in missingfiles: html += "<tr>" sourcev4 = dloot.getipv4(uuid) sourcev6 = dloot.getipv6(uuid) html += """<td>%s</td><td><a href="http://%s:12555/s/?g=%s&f=b64e">v4</a></td> """ % (filemissed,sourcev4,base64e.encode(filemissed)) if sourcev6 is not None: html += """<td><a href="http://[%s]:12555/s/?g=%s&f=b64e">v6</a></td>""" % (sourcev6, base64e.encode(filemissed)) html += "</tr>" html += "</table>" html += htmlfooter return html
def l(self, uuid): mindex = index.manage(sharedir=forbanshareroot, forbanglobal=forbanpath) dloot = loot.loot(dynpath=os.path.join(forbanpath, "var")) html = htmlheader html += """<br/> <br/> <br /> <div class="left inner"> <h2>Files available in loot %s </h2>""" % dloot.getname( uuid) html += htmlnav html += "<table>" html += "<tr><td>Filename</td><td>Fetch</td></tr>" tempindex = mindex.search("^((?!forban).)*$", uuid) tempindex.sort(key=string.lower) for fileinindex in tempindex: filei = fileinindex.rsplit(",", 1)[0] if re.search('/\.', filei): continue if re.search('^\+\.', filei): continue html += "<tr>" sourcev4 = dloot.getipv4(uuid) sourcev6 = dloot.getipv6(uuid) size = tools.convertbytes( mindex.getfilesize(filename=filei, uuid=uuid)) html += """<td>%s (%s)</td><td><a href="/s/?g=%s&f=b64e">get</a></td> """ % ( filei, size, base64e.encode(filei)) html += "</tr>" html += "</table>" html += htmlfooter return html
def v(self, uuid): mindex = index.manage(sharedir=forbanshareroot, forbanglobal=forbanpath) dloot = loot.loot(dynpath=os.path.join(forbanpath, "var")) missingfiles = mindex.howfar(uuid) html = htmlheader html += """<br/> <br/> <br/> <div class="left inner"> <h2>Missing files on your loot from %s </h2>""" % dloot.getname( uuid) html += htmlnav html += "<table>" if missingfiles is None: html += "You are not missing any files with %s " % dloot.getname( uuid) else: for filemissed in missingfiles: html += "<tr>" sourcev4 = dloot.getipv4(uuid) sourcev6 = dloot.getipv6(uuid) html += """<td>%s</td><td><a href="http://%s:12555/s/?g=%s&f=b64e">v4</a></td> """ % ( filemissed, sourcev4, base64e.encode(filemissed)) if sourcev6 is not None: html += """<td><a href="http://[%s]:12555/s/?g=%s&f=b64e">v6</a></td>""" % ( sourcev6, base64e.encode(filemissed)) html += "</tr>" html += "</table>" html += htmlfooter return html
def q(self, v=None, r=None): querystring = v mindex = index.manage(sharedir=forbanshareroot, forbanglobal=forbanpath) discoveredloot = loot.loot(dynpath=os.path.join(forbanpath, "var")) searchresult = [] for name in discoveredloot.listall(): if (discoveredloot.exist(name) and discoveredloot.lastannounced(name)): fileavailable = mindex.search(uuid=name, query=querystring) for filefound in fileavailable: searchresult.append((filefound, name)) searchresult.sort() html = htmlheader html += "<title>search results of %s</title>" % (querystring) if r is not None: html += """<meta http-equiv="refresh" content="%s">""" % (r) html += "</head>" html += htmlnav html += """<br/> <br/> <div class="left inner">""" previousfile = None html += "<table><tr><th>Filename</th><th>Available on</th></tr>" for foundfiles in searchresult: if foundfiles[0] == previousfile: html += """<a href="%s">%s</a> """ % (forban_geturl( uuid=foundfiles[1], filename=filename), discoveredloot.getname(foundfiles[1])) elif previousfile == None: filename = foundfiles[0].rsplit(",", 1)[0] html += """<td>%s</td> <td><a href="%s">%s</a> """ % ( foundfiles[0].rsplit(",", 1)[0], forban_geturl(uuid=foundfiles[1], filename=filename), discoveredloot.getname(foundfiles[1])) else: filename = foundfiles[0].rsplit(",", 1)[0] html += """</td></tr><td>%s</td> <td><a href="%s">%s</a> """ % ( foundfiles[0].rsplit(",", 1)[0], forban_geturl(uuid=foundfiles[1], filename=filename), discoveredloot.getname(foundfiles[1])) previousfile = foundfiles[0] html += "</td></tr></table></div>" return html
except ConfigParser.Error: efilter = None refilter = re.compile(ofilter, re.I) if efilter is not None: exfilter = re.compile(efilter, re.I) else: exfilter = re.compile("", re.I) try: maxsize = config.get('opportunistic','maxsize') except ConfigParser.Error: maxsize = 0 discoveredloot = loot.loot(dynpath=os.path.join(forbanpath,"var")) allindex = index.manage(sharedir=forbanshareroot, forbanglobal=forbanpath) allindex.build() flogger.info("forban_opportunistic starting...") flogger.info("applied including regexp filter: %s" % ofilter) flogger.info("applied excluding regexp filter: %s" % efilter) while(1): for uuid in discoveredloot.listall(): # check if my loot is not exceeding the maxsize mysize = allindex.totalfilesize(discoveredloot.whoami()) if float(maxsize) != 0: if mysize is False: continue if float(mysize[:-2])>float(maxsize):
def index(self, directory=forbanshareroot): html = htmlheader html += htmlnav html += """<br/> <br/> <br/> <div class="right inner">""" html += """ <h2>Search the loot...</h2> """ html += """ <form method=get action="q/"><input type="text" name="v" value=""> <input type="submit" value="search"></form> """ html += """</div> <div class="left inner">""" html += """ <h2>Discovered link-local Forban available with their loot in the last 3 minutes</h2> """ html += "<table>" html += "<th><td>Access</td><td>Name</td><td>Last seen</td><td>Size</td><td>How many files are missing from yourself?</td><td></td></th>" discoveredloot = loot.loot(dynpath=os.path.join(forbanpath,"var")) mysourcev4 = discoveredloot.getipv4(discoveredloot.whoami()) allindex = index.manage(sharedir=forbanshareroot, forbanglobal=forbanpath) for name in discoveredloot.listall(): if (discoveredloot.exist(name) and discoveredloot.lastannounced(name)): allindex.cache(name) if discoveredloot.lastannounced(name): html += "<tr>" rname = discoveredloot.getname(name) sourcev4 = discoveredloot.getipv4(name) if sourcev4 is not None: html += """<td><a href="http://%s:12555/">v4</a></td> """ % sourcev4 else: html += """<td></td>""" sourcev6 = discoveredloot.getipv6(name) if sourcev6 is not None: html += """<td><a href="http://[%s]:12555/">v6</a></td> """ % sourcev6 else: html += """<td></td>""" html += "<td>"+rname+"</td>" lastseen = discoveredloot.lastannounced(name) if lastseen is not None: html += """<td>%s secs ago</td>""" % lastseen else: html += "<td>never seen</td>" missingfiles = allindex.howfar(name) totalsize = allindex.totalfilesize(name) html +="<td>%s</td>" % str(totalsize) if type(missingfiles) is bool: html += "<td><b>Missing index</b> from this loot" elif missingfiles is not None: html += "<td>Missing %s files from this loot" % len(missingfiles) else: html += "<td>Missing no files from this loot" if name != discoveredloot.whoami(): html += """ <a href="http://%s:12555/v/%s">[missing?]</a> """ % (mysourcev4,name) html += """ <a href="http://%s:12555/l/%s">[browse]</a> """ % (mysourcev4,name) if name == discoveredloot.whoami(): html += """ <a href="/l/%s">[browse]</a> """ % (name) html += "<td><i>yourself</i></td>" else: html += "<td></td>" html += "</tr>" html += "</table></div>" html += htmlfooter return html
def debug(self, directory=forbanshareroot): html = htmlheader html += htmlnav html += """<br/> <br/> <br/> <div class="right inner">""" html += """ <h2>Search the loot...</h2> """ html += """ <form method=get action="q/"><input type="text" name="v" value=""> <input type="submit" value="search"></form> """ html += """</div> <div class="left inner">""" html += """ <h2>Discovered link-local Forban available with their loot in the last 3 minutes</h2> """ html += "<table>" html += "<th><td>Access</td><td>Name</td><td>Last seen</td><td>Size</td><td>How many files are missing from yourself?</td><td></td></th>" discoveredloot = loot.loot(dynpath=os.path.join(forbanpath, "var")) mysourcev4 = discoveredloot.getipv4(discoveredloot.whoami()) allindex = index.manage(sharedir=forbanshareroot, forbanglobal=forbanpath) for name in discoveredloot.listall(): if (discoveredloot.exist(name) and discoveredloot.lastannounced(name)): allindex.cache(name) if discoveredloot.lastannounced(name): html += "<tr>" rname = discoveredloot.getname(name) sourcev4 = discoveredloot.getipv4(name) if sourcev4 is not None: html += """<td><a href="http://%s:12555/">v4</a></td> """ % sourcev4 else: html += """<td></td>""" sourcev6 = discoveredloot.getipv6(name) if sourcev6 is not None: html += """<td><a href="http://[%s]:12555/">v6</a></td> """ % sourcev6 else: html += """<td></td>""" html += "<td>" + rname + "</td>" lastseen = discoveredloot.lastannounced(name) if lastseen is not None: html += """<td>%s secs ago</td>""" % lastseen else: html += "<td>never seen</td>" missingfiles = allindex.howfar(name) totalsize = allindex.totalfilesize(name) html += "<td>%s</td>" % str(totalsize) if type(missingfiles) is bool: html += "<td><b>Missing index</b> from this loot" elif missingfiles is not None: html += "<td>Missing %s files from this loot" % len( missingfiles) else: html += "<td>Missing no files from this loot" if name != discoveredloot.whoami(): html += """ <a href="http://%s:12555/v/%s">[missing?]</a> """ % ( mysourcev4, name) html += """ <a href="http://%s:12555/l/%s">[browse]</a> """ % ( mysourcev4, name) if name == discoveredloot.whoami(): html += """ <a href="/l/%s">[browse]</a> """ % (name) html += "<td><i>yourself</i></td>" else: html += "<td></td>" html += "</tr>" html += "</table></div>" html += htmlfooter return html