Пример #1
0
    def navbar(self,
               query=Framework.Query(()),
               next=None,
               previous=None,
               pageno=None):
        """ Returns the HTML for the navigation bar. """
        if not query.has_key('family'):
            query['family'] = ''

        if next:
            #Make a link
            q = query.clone()
            q.FillQueryTarget(next)
            next = '<a href="f?%s"><img src="images/forward.png" border="0"></a>' % (
                str(q))
        else:
            next = '<img src="images/g_forward.png" border="0">'

        if previous < 0:
            previous = '<img src="images/g_back.png" border="0">'
        else:
            q = query.clone()
            q.FillQueryTarget(previous)
            previous = '<a href="f?%s"><img src="images/back.png"  border="0"></a>' % (
                str(q))

        bar = {
            'family': propegate(query, Framework.Query()),
            'back': previous,
            'case': query.get('case', ''),
            'pageno': pageno,
            'next': next,
            'reset': str(query) + '&reset=1',
            'stop': str(query) + '&stop=1'
        }

        toolbar = '''<table><tr>
        <td valign="bottom"><a href="f?family=%(family)s"><img src="images/home.png" border="0"></a></td><td valign="bottom">%(back)s</td>%(case)s - page %(pageno)s<td valign="bottom">%(next)s</td> <td valign="bottom">
        <td valign="bottom"><a href="flag?%(reset)s"><img src="images/reset.png" border="0"></a></td>	  
        <td valign="bottom"><a href=flag?%(stop)s><img src="images/stop.png" border="0"></a></td></tr></table>''' % bar

        return toolbar
Пример #2
0
    def menu(self, query, result):
        """ Draws the menu for the current family.

        @arg flag: A Flag object containing the appropriate dispatcher
        @arg query: The user query
        """
        family = query['family']
        family_block = flag.ui()
        family_block.start_table()

        module_list = Registry.REPORTS.get_families()
        order_families(module_list)

        for m in module_list:
            link = flag.ui()
            link.link(m, family=m)
            family_block.row(link)

        report_block = flag.ui()
        if family and family != 'None':
            report_block.start_table()
            report_list = Registry.REPORTS.family[family]
            for r in report_list:
                if r.hidden: continue
                link = flag.ui()
                link.link(r.name,
                          target=propegate(query, Framework.Query()),
                          report=r.name,
                          tooltip=r.__doc__)

                report_block.row(link, colspan=2)
                report_block.row(" ", r.description)

        result = flag.ui()
        result.heading("Flag Main Menu")
        result.start_table()
        result.row(family_block, report_block, valign="top")
        return result
Пример #3
0
    def render(self,
               query=Framework.Query(()),
               meta='',
               data='',
               next=None,
               previous=None,
               pageno=None,
               ui=None):
        toolbar = self.navbar(query=query,
                              next=next,
                              previous=previous,
                              pageno=pageno)
        try:
            toolbar_str = ui.toolbar_ui.__str__()
        except:
            toolbar_str = ''

        return " ".join((
            self.header, self.banner, meta,
            "<td align=left>%s</td><td align=center>" % toolbar_str, toolbar,
            '''</td><td width=10><center><img src="images/logo.png"><br><font size="+1"><a href="http://www.gnu.org/copyleft/gpl.html"> &copy;GPL</a></font></center></td></tr></tbody></table> </tr></table>\n''',
            data,
            "<table width=100%%><tr><td></td></tr><tr><td align=center>%s</td></tr></table>"
            % (toolbar), self.footer))
Пример #4
0
    def parse_query(self):
        """ Parses the query and prepares a query object.

        Returns query object prepared from the request
        """
        # check for authentication and pull out auth fields to add to
        # query type
        user = passwd = None
        try:
            import base64
            authtype, authtoken = self.headers['Authorization'].split()
            user, passwd = base64.decodestring(authtoken).split(':')
        except KeyError:
            # if authentication is required, the reports will
            # throw an exception later, dont worry about it here.
            pass

        ## Use the cgi module to parse out the request. This allows us
        ## to use POST, upload files etc:
        i = self.path.rfind('?')
        if i >= 0:
            rest, query_str = self.path[:i], self.path[i + 1:]
        elif '=' in self.path:
            rest, query_str = '', self.path[1:]
        else:
            rest, query_str = self.path, ''

        env = {}
        env['GATEWAY_INTERFACE'] = 'CGI/1.1'
        env['SERVER_PROTOCOL'] = self.protocol_version
        env['REQUEST_METHOD'] = self.command
        if self.headers.typeheader is None:
            env['CONTENT_TYPE'] = self.headers.type
        else:
            env['CONTENT_TYPE'] = self.headers.typeheader

        length = self.headers.getheader('content-length')
        if length:
            env['CONTENT_LENGTH'] = length

        if query_str:
            env['QUERY_STRING'] = query_str

        ## FieldStorage does not seem to include GET parameters in POSTs:
        if self.command == "POST":
            query_list = cgi.parse_qsl(query_str)
        else:
            query_list = ()

        form = cgi.FieldStorage(fp=self.rfile, headers=None, environ=env)
        query = Framework.Query(query_list,
                                base=rest,
                                user=user,
                                passwd=passwd)

        try:
            for key in form.keys():
                ## See if key has a filename, if so we store it ala php:
                try:
                    if form[key].filename:
                        query["%s_filename" % key] = form[key].filename
                except AttributeError:
                    pass

                try:
                    value = form[key].value
                    ## We only accept non-empty args
                    if len(value) > 0 and value != 'None':
                        query[key] = value
                except AttributeError:
                    for value in form[key]:
                        query[key] = value.value
        except TypeError:
            query['_value'] = form.value

        ## This handles the case where the entire query is submitted
        ## in a single parameter called pseudo_post_query. This is
        ## done for stupid browsers like IE which refuse to handle
        ## long queries using get - so we post the entire query
        ## through javascript:
        try:
            qsl = query['pseudo_post_query']
            if '?' in qsl:
                qsl = qsl[qsl.find('?') + 1:]

            query = Framework.Query(cgi.parse_qsl(qsl),
                                    user=user,
                                    passwd=passwd)
            pyflaglog.log(pyflaglog.DEBUG, "pseudo posted query is %s", query)
        except KeyError:
            if self.command == 'POST':
                pyflaglog.log(pyflaglog.DEBUG, "posted query is %s", query)

        for k, v in query.q:
            if v == 'None':
                del query[k]

        self.query = query
        return query