예제 #1
0
def test_multiple_attachments():
    test_file1 = FieldStorage()
    test_file1.name = 'file_info'
    test_file1.filename = 'test1.txt'
    test_file1.type = 'text/plain'
    test_file1.file = StringIO('test file1\n')
    test_file2 = FieldStorage()
    test_file2.name = 'file_info'
    test_file2.filename = 'test2.txt'
    test_file2.type = 'text/plain'
    test_file2.file = StringIO('test file2\n')
    d = M.Discussion(shortname='test', name='test')
    t = M.Thread.new(discussion_id=d._id, subject='Test Thread')
    test_post = t.post('test post')
    test_post.add_multiple_attachments([test_file1, test_file2])
    ThreadLocalORMSession.flush_all()
    assert_equals(len(test_post.attachments), 2)
    attaches = test_post.attachments
    assert 'test1.txt' in [attaches[0].filename, attaches[1].filename]
    assert 'test2.txt' in [attaches[0].filename, attaches[1].filename]
예제 #2
0
 def form(self, name):
     if self._form is None:
         safe_env = {'QUERY_STRING': ''}
         for key in ('REQUEST_METHOD', 'CONTENT_TYPE', 'CONTENT_LENGTH'):
             if key in self.env:
                 safe_env[key] = self.env[key]
         fs = FieldStorage(fp=self.body,
                           environ=safe_env,
                           keep_blank_values=True)
         self._form = fs
     return self._form.getfirst(name)
예제 #3
0
파일: test_forms.py 프로젝트: alkadis/vcv
 def test_valid_file_upload(self):
     from adhocracy.forms.common import ValidFileUpload
     from formencode import Invalid
     from cgi import FieldStorage
     from io import BytesIO
     ValidFileUpload.max_size = 1
     value = FieldStorage()
     value.file = BytesIO(b"bi")
     value.filename = u"test.png"
     value.name = u"thumbs"
     self.assertRaises(Invalid, ValidFileUpload.to_python, value)
    def setUp(self):
        self.form = FieldStorage()
        self.client = MockNull()
        self.client.db = db = MockDatabase()
        db.security.hasPermission = lambda *args, **kw: True
        self.client.form = self.form

        # add client props for testing anti_csrf_nonce
        self.client.session_api = MockNull(_sid="1234567890")
        self.client.db.getuid = lambda : 10
        self.client.db.config = {'WEB_CSRF_TOKEN_LIFETIME': 10 }
예제 #5
0
    def go(self):  # determine which page to return
        self.cookies = {}
        self.error = ''
        form = FieldStorage()

        # come in from the null or return
        if form.keys() == []:
            self.showForm()
            return

        # come in from the form only
        # get the person
        if form.has_key('person'):
            self.who = capwords(strip(form['person'].value))
            if self.who == '':
                self.error = 'Your name is required. (blank)'
        else:
            self.error = 'Your name is required. (missing)'

        # the cookie field
        if form.has_key('cookie'):
            self.cookies['user'] = unquote(strip(form['cookie'].value))
        else:
            self.cookies['user'] = ''

        # the language
        self.langs = []
        if form.has_key('lang'):
            langdata = form['lang']
            if type(langdata) == type([]):
                for eachLang in langdata:
                    self.langs.append(eachLang.value)
            else:
                self.langs.append(langdata.value)
        else:
            self.error = 'At least one language required.'

        # resolve the file
        if form.has_key('upfile'):
            upfile = form["upfile"]
            self.fn = upfile.filename or ''
            if upfile.file:
                self.fp = upfile.file
            else:
                self.fp = StringIO('(no data)')
        else:
            self.fp = StringIO('(no file)')
            self.fn = ''

        # error or not
        if not self.error:
            self.doResults()
        else:
            self.showError()
예제 #6
0
파일: request.py 프로젝트: Th0rt/webserver
 def request_body(self) -> Dict[str, str]:
     headers = {
         "content-type": self.env["CONTENT_TYPE"],
         "content-length": self.env["CONTENT_LENGTH"],
     }
     fs = FieldStorage(
         fp=self.env["wsgi.input"],
         headers=headers,
         environ={"REQUEST_METHOD": "POST"},
     )
     return {f.name: f.value for f in fs.list}
예제 #7
0
    def go(self):  # determine which page to return
        try:
            self.cookies = {}
            self.error = ''
            form = FieldStorage()
            if form.keys() == []:
                self.showForm()
                return

            if form.has_key('person'):
                logger.info("form['person'].value is:%s" %
                            (form['person'].value, ))
                self.who = capwords(strip(form['person'].value))
                if self.who == '':
                    self.error = 'Your name is required. (blank)'
            else:
                self.error = 'Your name is required. (missing)'

            if form.has_key('cookie'):
                logger.info("form['cookie'].value is:%s" %
                            (form['cookie'].value, ))
                self.cookies['user'] = unquote(strip(\
                                form['cookie'].value))
            else:
                self.cookies['user'] = ''

            self.langs = []
            if form.has_key('lang'):
                langdata = form['lang']
                if type(langdata) == type([]):
                    for eachLang in langdata:
                        self.langs.append(eachLang.value)
                else:
                    self.langs.append(langdata.value)
            else:
                self.error = 'At least one language required.'

            if form.has_key('upfile'):
                upfile = form["upfile"]
                self.fn = upfile.filename or ''
                if upfile.file:
                    self.fp = upfile.file
                else:
                    self.fp = StringIO('(no data)')
            else:
                self.fp = StringIO('(no file)')
                self.fn = ''

            if not self.error:
                self.doResult()
            else:
                self.showError()
        except:
            logger.exception("Error!!!")
예제 #8
0
    def tokenizer(self, spin, header, fd, resource, version):
        data = ''

        try:
            resource, data = resource.split('?', 1)
        except ValueError:
            pass

        spawn(spin, 'POST %s' % resource, header, 
              FieldStorage(fp=fd, environ=get_env(header)),
                                         parse_qs(data), version)
예제 #9
0
    def actualizar(self):
        form = FieldStorage()
        propiedad_id = form["datodecontacto_id"].value
        denominacion = form["denominacion"].value
        valor = form["valor"].value

        self.model.datodecontacto_id = propiedad_id
        self.model.denominacion = denominacion
        self.model.valor = valor

        self.model.update()
        self.redirect()
예제 #10
0
   def go(self):                # determine which page to return
       self.cookies = {}
       self.error = ''
       form = FieldStorage()
       if form.keys() == []:
           self.showForm()
           return

    #    if form.has_key('person'):
       if 'person' in form:
        #    self.who = capwords(strip(form['person'].value))
           self.who=form['person'].value.strip().title()
           if self.who == '':
               self.error = 'Your name is required. (blank)'
       else:
           self.error = 'Your name is required. (missing)'

    #    if form.has_key('cookie'):
       if 'cookie' in form:
           self.cookies['user'] = unquote(form['cookie'].value.strip())
       else:
           self.cookies['user'] = ''

       self.langs = []
    #    if form.has_key('lang'):
       if 'lang' in form:
           langdata = form['lang']
           if type(langdata) == type([]):
               for eachLang in langdata:
                   self.langs.append(eachLang.value)
           else:
               self.langs.append(langdata.value)
       else:
           self.error = 'At least one language required.'

    #    if form.has_key('upfile'):
       if 'upfile' in form:
           upfile = form["upfile"]
        #    print(AdvCGI.header+upfile.filename)
           self.fn = upfile.filename or ''
           if upfile.file:
               self.fp = upfile.file
               
           else:
               self.fp = StringIO('(no data)')
       else:
           self.fp = StringIO('(no file)')
           self.fn = ''

       if not self.error:
           self.doResults()
       else:
           self.showError()
예제 #11
0
 def form(self):
     """ use cgi fieldstorage 解析 multipart body and return a FileStorage object"""
     if self.method.upper() == 'POST' and \
             (self.content_type.upper().startswith('MULTIPART/') or
              self.content_type.upper().startswith('APPLICATION/')):
         form = FieldStorage(fp=self.body,
                             environ=self.environ,
                             keep_blank_values=True)
         return form
     else:
         raise AttributeError(
             "Can not parse form data. May form not exists.")
예제 #12
0
 def _parse_multipart(self:HTTPContext, content_params: Dict[str, str], charset: codecs.CodecInfo) -> None:
     storage = FieldStorage(fp=BytesIO(self._params['raw_body']), headers=self.headers, keep_blank_values=True, encoding=charset)
     self._params['post_data'] = {}
     for key in storage:
         if storage[key].file:
             self._params['post_data'][key] = storage[key].file
             self._params['post_data'][key].filename = storage[key].filename
             self._params['post_data'][key].type = storage[key].type
         elif storage[key].list:
             self._params['post_data'][key] = storage[key].list
         else:
             self._params['post_data'][key] = storage[key].value
예제 #13
0
파일: producto.py 프로젝트: Templario17/crm
    def actualizar(self):
        form = FieldStorage()
        producto_id = form["producto_id"].value
        denominacion = form["denominacion"].value
        precio = form["precio"].value

        self.model.producto_id = producto_id
        self.model.denominacion = denominacion
        self.model.precio = precio

        self.model.update()
        self.redirect()
예제 #14
0
def GetQuery(QueryString, BlankIfMissing =0 ):
    if not InGlobals("FormFieldStorage"):
        from cgi import FieldStorage
        global FormFieldStorage
        FormFieldStorage = FieldStorage()

    if FormFieldStorage.has_key(QueryString):
        retVal = FormFieldStorage[QueryString].value
    else:
        retVal = iif(BlankIfMissing,"",None)

    return retVal
예제 #15
0
    def __init__(self, environ):
        """
        constructor
        """
        self.q = {}
        if isinstance(environ, (dict, )) and not "REQUEST_METHOD" in environ:
            self.q = environ

        elif environ and "REQUEST_METHOD" in environ and environ[
                "REQUEST_METHOD"] == "GET":
            request_body = environ['QUERY_STRING']
            q = parse_qs(request_body)
            for key in q:
                self.q[key] = [escape(item) for item in q[key]]

        elif environ and "REQUEST_METHOD" in environ and environ[
                "REQUEST_METHOD"] == "POST":

            env_copy = environ.copy()
            env_copy['QUERY_STRING'] = ''
            q = FieldStorage(fp=environ["wsgi.input"],
                             environ=env_copy,
                             keep_blank_values=True)
            for key in q:
                self.q[key] = q.getvalue(key)
                # print(key, "=", len(q.getvalue(key)))

            # load extra query string info:
            request_body = environ['QUERY_STRING']
            q = parse_qs(request_body)
            for key in q:
                self.q[key] = [escape(item) for item in q[key]]

        if environ and "DOCUMENT_ROOT" in environ:
            self.q["DOCUMENT_ROOT"] = environ["DOCUMENT_ROOT"]
            environ["DOCUMENT_WWW"] = os.path.abspath(
                environ["DOCUMENT_ROOT"] + "/var/www")
            self.q["DOCUMENT_WWW"] = environ["DOCUMENT_WWW"]

        if environ and "HTTP_COOKIE" in environ:
            if isinstance(environ["HTTP_COOKIE"], (str, )):
                self.q["HTTP_COOKIE"] = mapify(environ["HTTP_COOKIE"], ";")
            else:
                self.q["HTTP_COOKIE"] = environ["HTTP_COOKIE"]

        if "encoded" in self.q and self.q["encoded"] in ("true", "1", 1):
            for key in q:
                if not key in ("encoded", "encrypted"):
                    try:
                        self.q[key] = base64.b64decode(self.q[key])
                    except:
                        pass
예제 #16
0
def contactUs():
    # Function to take in user information from contact us and insert it into a database

    from cgi import FieldStorage, escape
    import pymysql as db
    from os import environ

    result = ''
    url = environ.get('SCRIPT_NAME')
    try:
        connection = db.connect('cs1.ucc.ie', 'cgg1', 'weeS2dih', '2021_cgg1')
        cursor = connection.cursor(db.cursors.DictCursor)
        form_data = FieldStorage()

        if len(form_data) != 0:
            if form_data.getfirst('name') != None and form_data.getfirst(
                    'phone') != None and form_data.getfirst('comment') != None:
                name = escape(form_data.getfirst('name')).strip()
                phone = escape(form_data.getfirst('phone')).strip()
                comment = escape(form_data.getfirst('comment')).strip()
                comment = profanity(comment)
                if not phone.isnumeric() or len(phone) != 10:
                    result += '<p class="error">Please enter a valid phone number.</p>'
                else:
                    cursor.execute(
                        """INSERT INTO contact_us (name, url, phone, comment)
                                    VALUES (%s, %s, %s, %s)""",
                        (name, url, phone, comment))
                    connection.commit()
                    result += "<p>Message successfully sent.</p>"
            else:
                result += '<p class="error">Please fill in all the text boxes.</p>'
        cursor.close()
        connection.close()
    except db.Error:
        result += '<p class="error">Sorry! We are experiencing problems at the moment. Please call back later.</p>'

    return """
        <h1>Contact Us</h1>
        <form action="%s" method="post">
            <fieldset>
                <legend>Send A Message</legend>
                <label for="name">Name: </label>
                <input type="text" name="name" id="name" maxlength="40"/>
                <label for="phone">Phone: </label>
                <input type="text" name="phone" id="phone" maxlength="10"/>
                <label for="comment">Comment:</label>
                <textarea name="comment" id="comment" rows="4" cols="30"></textarea>
                <input type="submit" value="Send"/>
            </fieldset>
        </form>
        %s""" % (url, result)
예제 #17
0
    def do_POST(self):
        form = FieldStorage(fp=self.rfile,
                            headers=self.headers,
                            environ={
                                'REQUEST_METHOD': 'POST',
                                'CONTENT_TYPE': self.headers['Content-Type'],
                            })

        self.post = {}
        for name in form.keys():
            self.post[name] = form[name].value

        return self.do_GET()
예제 #18
0
def print_env(environ, start_response):
	"""list environ items"""
	import os
	print(os.environ)
	from cgi import FieldStorage
	form = FieldStorage(environ=environ)
	#print(form.keys())
	for k in form.keys():
		print ('k: %s' % k)
		f = form[k]
		print (f)
	start_response('200 OK', [('Content-Type', 'text/plain')])
	return ['\n'.join(['%s: %r' % item for item in environ.items()])]
예제 #19
0
def web_loader(environ, start_response):
    headers = [('Content-type', 'application/json; charset=UTF-8'),
               ("Access-Control-Allow-Origin", "*")]
    start_response('200 OK', headers)

    form = FieldStorage()
    pid = os.fork()
    if pid == 0:  # new process
        os.system("philoload4 %s %s &" %
                  (form.getvalue("dbname"), form.getvalue("files")))
        exit()

    yield dumps({"success": True})
예제 #20
0
def parse_body(request, response, params):
    if "Content-Type" not in request.headers:
        request.headers["Content-Type"] = ""

    form = FieldStorage(environ={"REQUEST_METHOD": "POST"},
                        fp=TextIOWrapper(request.body),
                        headers=request.headers,
                        keep_blank_values=True)

    if form.file:
        request.body = form.file
    else:
        params.update(dictform(form))
def parse_multi_part_response(response):
    parsed_response = {}
    fs = FieldStorage(
        fp=BytesIO(response.content),
        headers=response.headers,
        environ={"REQUEST_METHOD": "POST", "CONTENT_TYPE": response.headers["Content-Type"],},
    )
    for child in fs.list:
        key = child.name
        value = child.file.read()
        parsed_response.update({key: value})

    return parsed_response
예제 #22
0
def main():
    # parse query string
    arguments = FieldStorage(keep_blank_values=True)

    json = arguments.getvalue('payload')
    content = loads(json)
    if 'commits' in content:
        repo = content['repository']['name']

        if repo in VALID_UPDATE_REPOSITORIES:
            handle_repository_update(repo)

        process_commit_mails(content)
예제 #23
0
 def _createBinaryFile():
     from cgi import FieldStorage
     from ZPublisher.HTTPRequest import FileUpload
     from tempfile import TemporaryFile
     fp = TemporaryFile('w+b')
     fp.write('\x00' + 'x' * (1 << 19))
     fp.seek(0)
     env = {'REQUEST_METHOD':'PUT'}
     headers = {'content-type':'application/msword',
                'content-length': 1 << 19,
                'content-disposition':'attachment; filename=test.doc'}
     fs = FieldStorage(fp=fp, environ=env, headers=headers)
     return FileUpload(fs)
예제 #24
0
    def run_brat_direct(self):
        """Execute brat server directly."""

        remote_addr = self.client_address[0]
        remote_host = self.address_string()
        cookie_data = ', '.join(filter(None,
                                       self.headers.getheaders('cookie')))

        query_string = ''
        i = self.path.find('?')
        if i != -1:
            query_string = self.path[i + 1:]

        saved = sys.stdin, sys.stdout, sys.stderr
        sys.stdin, sys.stdout = self.rfile, self.wfile

        # set env to get FieldStorage to read params
        env = {}
        env['REQUEST_METHOD'] = self.command
        content_length = self.headers.getheader('content-length')
        if content_length:
            env['CONTENT_LENGTH'] = content_length
        if query_string:
            env['QUERY_STRING'] = query_string
        os.environ.update(env)
        params = FieldStorage()

        # Call main server
        cookie_hdrs, response_data = serve(params, remote_addr, remote_host,
                                           cookie_data)

        sys.stdin, sys.stdout, sys.stderr = saved

        # Package and send response
        if cookie_hdrs is not None:
            response_hdrs = [hdr for hdr in cookie_hdrs]
        else:
            response_hdrs = []
        response_hdrs.extend(response_data[0])

        self.send_response(200)
        self.wfile.write('\n'.join('%s: %s' % (k, v)
                                   for k, v in response_hdrs))
        self.wfile.write('\n')
        self.wfile.write('\n')
        # Hack to support binary data and general Unicode for SVGs and JSON
        if isinstance(response_data[1], unicode):
            self.wfile.write(response_data[1].encode('utf-8'))
        else:
            self.wfile.write(response_data[1])
        return 0
예제 #25
0
    def go(self):
        """
        Dynamic generate the HTML page
        """
        self.cookies = {}
        self.error = ""
        form = FieldStorage()

        if not form.keys():
            self.show_form()
            return

        if form.has_key('person'):
            self.who = form['person'].value.strip().title()
            if self.who == "":
                self.error = "Your name is required. (blank)"
        else:
            self.error = "Your name is required. (missing)"

        if form.has_key('cookie'):
            self.cookies['user'] = unquote(form['cookie'].value.strip())
        else:
            self.cookies['user'] = ""

        self.langs = []
        if form.has_key('lang'):
            lang_data = form['lang']

            if isinstance(lang_data, list):
                for eachLang in lang_data:
                    self.langs.append(eachLang.value)
            else:
                self.langs.append(lang_data)
        else:
            self.error = 'At least one language required.'

        if form.has_key('upfile'):
            upfile = form['upfile']
            self.fn = upfile.filename or ""
            if upfile.file:
                self.fp = upfile.file
            else:
                self.fp = StringIO('(no data)')
        else:
            self.fp = StringIO('(no file)')
            self.fn = ""

        if not self.error:
            self.do_results()
        else:
            self.show_error()
예제 #26
0
파일: advcgi.py 프로젝트: fjrti/snippets
    def go(self):
        self.error = ''

        form = FieldStorage()

        if form.keys() == []:
            #s('calling showForm()\n')
            self.showForm()
            return

        if form.has_key('person'):
            self.who = capwords(strip(form['person'].value))
            if self.who == '':
                self.error = 'Your name is required. (blank)'
        else:
            self.error = 'Your name is required. (missing)'

        if form.has_key('cookie'):
            self.cookies['user'] = unquote(strip(form['cookie'].value))
        else:
            self.cookies['user'] = ''

        self.langs = []
        if form.has_key('lang'):
            langdata = form['lang']
            if type(langdata) == type([]):
                for eachLang in langdata:
                    self.langs.append(eachLang.value)
            else:
                self.langs.append(langdata.value)
        else:
            self.error = 'At least one language required.'

        if form.has_key('upfile'):
            upfile = form["upfile"]
            self.fn = upfile.filename or ''
            #s('filename is %s??\n' % self.fn)
            if upfile.file:
                self.fp = upfile.file
            else:
                self.fp = StringIO('(no data)')
        else:
            self.fp = StringIO('(no file)')
            self.fn = ''

        if not self.error:
            #s('calling doResults()\n')
            self.doResults()
        else:
            #s('calling showError()\n')
            self.showError()
예제 #27
0
    def apply_model(self, model):
        self.title.data = model.title
        self.portrait.data = model.portrait
        self.export_fields.data = model.export_fields
        if model.organigram_file:
            fs = FieldStorage()
            fs.file = BytesIO(model.organigram_file.read())
            fs.type = model.organigram_file.content_type
            fs.filename = model.organigram_file.filename
            self.organigram.data = self.organigram.process_fieldstorage(fs)
        if hasattr(self, 'is_hidden_from_public'):
            self.is_hidden_from_public.data = model.is_hidden_from_public

        self.reorder_export_fields()
예제 #28
0
def main():
    """
    Script entry-point, reads from github.com request and processes the
    event.
    """
    # parse query string
    arguments = FieldStorage(keep_blank_values=True)

    json = arguments.getvalue('payload')
    content = loads(json)
    if 'commits' in content:
        repo = content['repository']['name']
        if repo in config['git']['repositories']:
            handle_irc_message(repo, content)
예제 #29
0
def createFileUpload(data, filename):
    fp = TemporaryFile('w+b')
    fp.write(data)
    fp.seek(0)
    env = {'REQUEST_METHOD': 'PUT'}
    headers = {'content-type':'text/plain',
               'content-length': len(data),
               'content-disposition':'attachment; filename=%s' % \
                 filename}
    fs = FieldStorage(fp=fp, environ=env, headers=headers)
    result = FileUpload(fs)
    fp.close()

    return result
    def _prepareFormTarball(self):
        """we could use our @@export-easyform view,
           but we want a more atomic test, so we make
           a tarfile for our test.  the approach to making
           a tarfile is a bit strange, but does the job
        """
        in_fname = 'test_form_1_easyform.tar.gz'
        test_dir = os.path.dirname(__file__)

        def _add_form_structure_to_archive(archive):
            form_relative_path = os.path.join('profiles', 'testing',
                                              'structure', 'Members',
                                              'test_user_1_',
                                              'test_form_1_easyform')
            abs_path = os.path.join(test_dir, form_relative_path)

            # add structure folder
            os.chdir(os.path.join(test_dir, 'profiles', 'testing'))
            archive.add('structure', recursive=False)

            for f in os.listdir(abs_path):
                os.chdir(abs_path)  # add form data w/o full directory tree
                archive.add(f, arcname=os.path.join('structure', f))

        # Capture the current working directory for later when we need to
        # clean up the environment.
        working_directory = os.path.abspath(os.curdir)

        # make me a tarfile in the current dir
        os.chdir(test_dir)
        archive = TarFile.open(name=in_fname, mode='w:gz')
        _add_form_structure_to_archive(archive)
        archive.close()

        # Change back to the working directory in case something tries to
        # write files (e.g. collective.xmltestreport).
        os.chdir(working_directory)

        # get it and upload
        in_file = open(os.path.join(test_dir, in_fname))
        env = {'REQUEST_METHOD': 'PUT'}
        headers = {
            'content-type': 'text/html',
            'content-length': len(in_file.read()),
            'content-disposition':
            'attachment; filename={0}'.format(in_file.name)
        }
        in_file.seek(0)
        fs = FieldStorage(fp=in_file, environ=env, headers=headers)
        return FileUpload(fs)