Esempio n. 1
0
 def ping(self, ip=False):
     host = DBSession.query(s.host).filter(s.host.ip_as_int == ipToInt(ip)).first()
     result = pingSMB(ip)
     if host:
         DBSession.add(s.ping(host, result))
         DBSession.commit()
     return dict(page='ping', time=result, host=ip)
Esempio n. 2
0
    def search_by_host(self, query=None, offset=0, length=10, cutoff=25, **kw):
        """Handle the 'search_by_host' page."""

        #Process keywords
        query += processKW(kw)["query"]

        offset = int(offset)
        length = int(length)

        if "MSIE" in request.user_agent:
            userAgent = "internetExplorer"
        else:
            userAgent = "mozilla"

        q = search(query)

        numberOfHosts = len( q.from_self(s.share.host_id).distinct().all() )
        pages = []
        i = 0
        n = 1
        while i <= numberOfHosts:
            pages.append({})
            pages[-1]["number"] = n
            pages[-1]["offset"] = i
            pages[-1]["current"] = offset == i
            n += 1
            i += length

        hosts = []
        for line in q.from_self(s.share.host_id).distinct()[offset:length+offset]:
            hosts.append( DBSession.query(s.host).filter(s.host.id == line[0]).first() )
            hosts[-1].resultset = [] # will be filled with the results later on
            if userAgent == "internetExplorer":
                hosts[-1].path = "\\\\" + str(hosts[-1].ip)
            else:
                hosts[-1].path = "smb://" + str(hosts[-1].ip)

        for host in hosts:
            for folderid in q.filter(s.share.host_id == host.id).from_self(s.share.parent_id).distinct()[:cutoff]: # cause the content.host value is only set for the first level we go for the id
                folder = DBSession.query(s.share).filter(s.share.id == folderid[0]).first()
                path = generatePath(folder, userAgent)
                folder.path = path
                folder.showpath = folder.getShowPath()
                folder.resultset =[]
                for item in q.filter(s.share.parent_id == folderid[0]).order_by(s.share.name).all():
                    item.path = path
                    if hasattr(item, "extension"):
                        if item.extension != None:
                            item.showname = item.name + u"." + item.extension
                        else:
                            item.showname = item.name
                    else:
                        item.showname = item.name
                    folder.resultset.append(item)
                host.resultset.append(folder)

        return dict(page='search_by_host', hosts=hosts, compiledQuery=q, query=query, offset=offset, lenght=length, pages=pages, numberOfHosts=numberOfHosts)
Esempio n. 3
0
 def pinboard(self, author=None, text=None, offset=0, length=20):
     offset = int(offset)
     length = int(length)
     
     if author and text:
         # create new post
         newpost = post()
         newpost.author = author
         newpost.text = text
         newpost.date = datetime.now()
         DBSession.add(newpost)
         DBSession.commit()
     
     posts = DBSession.query(post).order_by(post.date.desc())[offset:offset+length]
     return dict(page="PinBoard", offset=offset, length=length, posts=posts)
Esempio n. 4
0
    def index(self):
        """Handles the front-page."""

        #Calculates the overall share amount
        overallShare = 0
        try:
            for host in DBSession.query(s.host).all():
                if host.sharesize > 0:
                    overallShare += host.sharesize
        except:
            pass

        #Renders the page index with overall share amount
        return dict(page='index', overallShare=s.makePretty(overallShare))
Esempio n. 5
0
 def setup(self):
     try:
         new_attrs = {}
         new_attrs.update(self.attrs)
         new_attrs.update(self.do_get_dependencies())
         self.obj = self.klass(**new_attrs)
         DBSession.add(self.obj)
         DBSession.flush()
         return self.obj
     except:
         DBSession.rollback()
         raise
Esempio n. 6
0
 def proxyDownload(self, id=None, tar=False):
     
     if proxyDl==True:
         
         # get path to file with ID id from database
         item = DBSession.query(s.share).filter(s.share.id == id).one()
         host = item.getHost()
         service = item.getService()
         filename = str( item.getShowPath().split("/")[-1] )
         
         if service.username and service.username != "anonymous":
             # uri = "smb://*****:*****@hostip/path/to/file"
             uri = u"smb://%s:%s@%s%s" % ( service.username, service.password, host.ip, item.getShowPath() )
         else:
             # uri = "smb://hostip/path/to/file"
             uri = u"smb://%s%s" % ( host.ip, item.getShowPath() )
         
         #imports moved to the top
         f = smbfileapp.FileApp(uri)
         return forward(f)
     else: #proxyDl not enabled
         return "<p><strong>proxyDownloader is (currently) not available on this system!</strong><br /><em>Sorry.</em></p>\n"
Esempio n. 7
0
def search(query=None):
    """ process the query string and return a compiled query """
    fileExtensions = []
    onlyHosts = []  # search only these hosts
    q = DBSession.query(s.share)
    for subquery in query.split(" "):

        if subquery == "":
            continue

        negate = False
        if subquery[0:1] == "-":
            negate = True
            subquery = subquery[1:]

        if len(subquery.split(":")) == 2:
            operator, value = subquery.split(":")
            if operator == "ext":
                fileExtensions.append(value)
                continue
            if operator == "type":
                if value == "video":
                    fileExtensions.extend(videoExt)
                if value == "audio":
                    fileExtensions.extend(audioExt)
                if value == "multimedia":
                    fileExtensions.extend(mediaExt)
                if value == "file":
                    q = q.filter(s.share.type == "file")
                if value == "folder":
                    q = q.filter(s.share.type == "folder")
                continue
            if operator == "greater":
                size = int(value) * 1000000 # in MB
                q = q.filter( s.file.size > size )
                continue
            if operator == "smaller":
                size = int(value) * 1000000 # in MB
                q = q.filter( s.file.size < size )
                continue
            if operator == "before":
                date = datetime.strptime(value, "%d.%m.%Y")
                q = q.filter(s.share.date <= date)
                continue
            if operator == "after":
                date = datetime.strptime(value, "%d.%m.%Y")
                q = q.filter(s.share.date >= date)
                continue
            if operator == "found_before":
                date = datetime.strptime(value, "%d.%m.%Y")
                q = q.filter(s.share.first_seen <= date)
                continue
            if operator == "found_after":
                date = datetime.strptime(value, "%d.%m.%Y")
                q = q.filter(s.share.first_seen >= date)
                continue
            
            if operator == "host":
                onlyHosts.append(value)
                continue
            if operator == "hostid":
                q = q.filter( s.share.host_id == int(value) )
                continue

        if negate:
            q = q.filter(~s.share.name.like('%%%s%%' % subquery))
        else:
            q = q.filter(s.share.name.like('%%%s%%' % subquery))

    if len(fileExtensions) > 0:
        q = q.filter( s.file.extension.in_(fileExtensions) )

    if len(onlyHosts) > 0:
        onlyHostIDs = []
        for host in onlyHosts:
            for occurence in DBSession.query(s.host).filter(s.host.name.like('%%%s%%' % host)).all():
                onlyHostIDs.append(occurence.id)
        q = q.filter( s.share.host_id.in_(onlyHostIDs) )

    q = q.filter(s.share.type != "serviceSMB")
    return q
Esempio n. 8
0
 def getShare(self, shareID):
     share = DBSession.query(s.share).filter(s.share.id == shareID).first()
     return dict(share=share)
Esempio n. 9
0
 def shareInfo(self, shareID):
     share = DBSession.query(s.share).filter(s.share.id == shareID).first()
     return dict(page='hostinfo', share=share)
Esempio n. 10
0
 def hostInfo(self, hostID):
     host = DBSession.query(s.host).filter(s.host.id == hostID).first()
     return dict(page='hostinfo', host=host)
Esempio n. 11
0
 def test_query_obj(self):
     obj = DBSession.query(self.klass).one()
     for key, value in self.attrs.iteritems():
         assert_equals(getattr(obj, key), value)
Esempio n. 12
0
 def tearDown(self):
     DBSession.rollback()