From 3a9bf0492e7bcda5cecc26c8d7769d32fc2ff440 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Wed, 8 Jun 2016 15:05:41 +0400 Subject: [PATCH] =?UTF-8?q?cgilsxml.py:=20possibilit=C3=A9=20de=20sp=C3=A9?= =?UTF-8?q?cifier=20la=20disposition=20du=20contenu,=20le=20type=20de=20co?= =?UTF-8?q?ntenu,=20ainsi=20que=20l'encoding?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ulib/support/cgilsxml.py | 41 +++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/lib/ulib/support/cgilsxml.py b/lib/ulib/support/cgilsxml.py index 679686d..e316d5c 100755 --- a/lib/ulib/support/cgilsxml.py +++ b/lib/ulib/support/cgilsxml.py @@ -272,7 +272,7 @@ def print_files(files, fgroups=None, select_group=None, script_name=None, xslt=N for name, value in file.vars.items(): ET.SubElement(xfile, name).text = _u(value) - sys.stdout.write('\n') + sys.stdout.write('\n') if xslt is not None: sys.stdout.write('\n' % xslt) ET.ElementTree(xresult).write(sys.stdout, "utf-8") @@ -313,8 +313,12 @@ def run_cgilsxml(): help=u"Activer le mode CGI. Ce mode est automatiquement activé si la variable d'environnement REQUEST_METHOD existe.") OP.add_option('--cgi-allow-cache', dest='cgi_allow_cache', action='store_true', help=u"En mode CGI, ne pas rajouter les en-tête désactivant la mise en cache du résultat.") - OP.add_option('--cgi-inline', dest='cgi_inline', action='store_true', - help=u"En mode CGI, servir le fichier avec Content-Disposition=inline au lieu de attachment.") + OP.add_option('--cgi-content-type', '--cgict', dest='cgi_content_type', + help=u"En mode CGI, forcer le type de contenu avec lequel servir le fichier.") + OP.add_option('--cgi-content-charset', '--cgicc', dest='cgi_content_charset', + help=u"En mode CGI, forcer l'encoding de contenu avec lequel servir le fichier.") + OP.add_option('--cgi-content-disposition', '--cgicd', dest='cgi_content_disposition', + help=u"En mode CGI, forcer la disposition de contenu avec lequel servir le fichier. Les valeurs valides sont attachment (par défaut), inline, none") OP.add_option('-P', '--cgi-path-info', dest='path_info', help=u"Spécifier un chemin d'un fichier à télécharger. En mode CGI, cette valeur est prise dans la variable d'environnement PATH_INFO") OP.add_option('-Q', '--cgi-query-string', dest='query_string', @@ -342,9 +346,20 @@ def run_cgilsxml(): sortby = o.sortby environ = os.environ - cgi_cache = o.cgi_allow_cache and True or False - cgi_inline = o.cgi_inline and True or False cgi_mode = o.cgi_mode + cgi_cache = o.cgi_allow_cache and True or False + cgi_content_type = o.cgi_content_type + cgi_content_charset = o.cgi_content_charset or 'utf-8' + cgi_content_disposition = o.cgi_content_disposition or 'attachment' + if cgi_content_disposition in ('attachment', 'inline'): pass + elif cgi_content_disposition == 'none': cgi_content_disposition = None + else: + if cgi_mode: + if not cgi_cache: cgi_nocache() + print "Content-Type: text/plain; charset=utf-8" + print + print "%s: Disposition de contenu invalide. Ce soit être attachment, inline ou none" % cgi_content_disposition + sys.exit(1) cgi_query_string = o.query_string if cgi_query_string is not None: environ['QUERY_STRING'] = cgi_query_string if cgi_mode is None: @@ -397,28 +412,30 @@ def run_cgilsxml(): if file is None: if cgi_mode: if not cgi_cache: cgi_nocache() - print "Content-Type: text/plain; charset=UTF-8" + print "Content-Type: text/plain; charset=utf-8" print print "Impossible de trouver le fichier %s" % cgi_path_info + sys.exit(1) else: if cgi_mode: if not cgi_cache: cgi_nocache() dlname = file.dlname or file.name - ctype = file.has_key('type') and file.type or None + ctype = cgi_content_type + if ctype is None: ctype = file.has_key('type') and file.type or None if ctype is None: ctype, encoding = mimetypes.guess_type(dlname, False) if ctype is None: ctype = "application/octet-stream" - print "Content-Type: %s; charset=utf-8" % ctype - disposition = cgi_inline and 'inline' or 'attachment' - print "Content-Disposition: %s; filename=\"%s\"" % (disposition, dlname) + print "Content-Type: %s; charset=%s" % (ctype, cgi_content_charset) + if cgi_content_disposition is not None: + print "Content-Disposition: %s; filename=\"%s\"" % (cgi_content_disposition, dlname) print inf = open(file.pf, 'rb') try: shutil.copyfileobj(inf, sys.stdout) finally: inf.close() - sys.exit() + sys.exit(0) if cgi_mode: if not cgi_cache: cgi_nocache() - print "Content-Type: text/xml; charset=UTF-8" + print "Content-Type: text/xml; charset=utf-8" print print_files(files, fgroups, cgi_select_group, cgi_script_name, cgi_xslt, cgi_query_string, o.includes, o.excludes, o.prefix)