mercurial/hgweb/hgweb_mod.py
changeset 36713 2442927cdd96
parent 36518 7937850a523d
child 36760 7bf80d9d9543
equal deleted inserted replaced
36712:e79adc12cde3 36713:2442927cdd96
   375             return protohandler['dispatch']()
   375             return protohandler['dispatch']()
   376 
   376 
   377         # translate user-visible url structure to internal structure
   377         # translate user-visible url structure to internal structure
   378 
   378 
   379         args = query.split('/', 2)
   379         args = query.split('/', 2)
   380         if r'cmd' not in req.form and args and args[0]:
   380         if 'cmd' not in req.form and args and args[0]:
   381             cmd = args.pop(0)
   381             cmd = args.pop(0)
   382             style = cmd.rfind('-')
   382             style = cmd.rfind('-')
   383             if style != -1:
   383             if style != -1:
   384                 req.form['style'] = [cmd[:style]]
   384                 req.form['style'] = [cmd[:style]]
   385                 cmd = cmd[style + 1:]
   385                 cmd = cmd[style + 1:]
   386 
   386 
   387             # avoid accepting e.g. style parameter as command
   387             # avoid accepting e.g. style parameter as command
   388             if util.safehasattr(webcommands, cmd):
   388             if util.safehasattr(webcommands, cmd):
   389                 req.form[r'cmd'] = [cmd]
   389                 req.form['cmd'] = [cmd]
   390 
   390 
   391             if cmd == 'static':
   391             if cmd == 'static':
   392                 req.form['file'] = ['/'.join(args)]
   392                 req.form['file'] = ['/'.join(args)]
   393             else:
   393             else:
   394                 if args and args[0]:
   394                 if args and args[0]:
   407                     ext = spec[2]
   407                     ext = spec[2]
   408                     if fn.endswith(ext):
   408                     if fn.endswith(ext):
   409                         req.form['node'] = [fn[:-len(ext)]]
   409                         req.form['node'] = [fn[:-len(ext)]]
   410                         req.form['type'] = [type_]
   410                         req.form['type'] = [type_]
   411         else:
   411         else:
   412             cmd = pycompat.sysbytes(req.form.get(r'cmd', [r''])[0])
   412             cmd = req.form.get('cmd', [''])[0]
   413 
   413 
   414         # process the web interface request
   414         # process the web interface request
   415 
   415 
   416         try:
   416         try:
   417             tmpl = rctx.templater(req)
   417             tmpl = rctx.templater(req)
   421             # check read permissions non-static content
   421             # check read permissions non-static content
   422             if cmd != 'static':
   422             if cmd != 'static':
   423                 self.check_perm(rctx, req, None)
   423                 self.check_perm(rctx, req, None)
   424 
   424 
   425             if cmd == '':
   425             if cmd == '':
   426                 req.form[r'cmd'] = [tmpl.cache['default']]
   426                 req.form['cmd'] = [tmpl.cache['default']]
   427                 cmd = req.form[r'cmd'][0]
   427                 cmd = req.form['cmd'][0]
   428 
   428 
   429             # Don't enable caching if using a CSP nonce because then it wouldn't
   429             # Don't enable caching if using a CSP nonce because then it wouldn't
   430             # be a nonce.
   430             # be a nonce.
   431             if rctx.configbool('web', 'cache') and not rctx.nonce:
   431             if rctx.configbool('web', 'cache') and not rctx.nonce:
   432                 caching(self, req) # sets ETag header or raises NOT_MODIFIED
   432                 caching(self, req) # sets ETag header or raises NOT_MODIFIED
   433             if cmd not in webcommands.__all__:
   433             if cmd not in webcommands.__all__:
   434                 msg = 'no such method: %s' % cmd
   434                 msg = 'no such method: %s' % cmd
   435                 raise ErrorResponse(HTTP_BAD_REQUEST, msg)
   435                 raise ErrorResponse(HTTP_BAD_REQUEST, msg)
   436             elif cmd == 'file' and r'raw' in req.form.get(r'style', []):
   436             elif cmd == 'file' and 'raw' in req.form.get('style', []):
   437                 rctx.ctype = ctype
   437                 rctx.ctype = ctype
   438                 content = webcommands.rawfile(rctx, req, tmpl)
   438                 content = webcommands.rawfile(rctx, req, tmpl)
   439             else:
   439             else:
   440                 content = getattr(webcommands, cmd)(rctx, req, tmpl)
   440                 content = getattr(webcommands, cmd)(rctx, req, tmpl)
   441                 req.respond(HTTP_OK, ctype)
   441                 req.respond(HTTP_OK, ctype)