comparison mercurial/hgweb/hgweb_mod.py @ 36807:1e2194e0ef62

hgweb: use computed base URL from parsed request Let's not reinvent URL construction in a function that runs the templater. Differential Revision: https://phab.mercurial-scm.org/D2735
author Gregory Szorc <gregory.szorc@gmail.com>
date Thu, 08 Mar 2018 12:59:25 -0800
parents 69b2d0900cd7
children 0031e972ded2
comparison
equal deleted inserted replaced
36806:69b2d0900cd7 36807:1e2194e0ef62
140 allowed = self.configlist('web', 'allow_archive') 140 allowed = self.configlist('web', 'allow_archive')
141 for typ, spec in self.archivespecs.iteritems(): 141 for typ, spec in self.archivespecs.iteritems():
142 if typ in allowed or self.configbool('web', 'allow%s' % typ): 142 if typ in allowed or self.configbool('web', 'allow%s' % typ):
143 yield {'type': typ, 'extension': spec[2], 'node': nodeid} 143 yield {'type': typ, 'extension': spec[2], 'node': nodeid}
144 144
145 def templater(self, wsgireq): 145 def templater(self, wsgireq, req):
146 # determine scheme, port and server name 146 # determine scheme, port and server name
147 # this is needed to create absolute urls 147 # this is needed to create absolute urls
148
149 proto = wsgireq.env.get('wsgi.url_scheme')
150 if proto == 'https':
151 proto = 'https'
152 default_port = '443'
153 else:
154 proto = 'http'
155 default_port = '80'
156
157 port = wsgireq.env[r'SERVER_PORT']
158 port = port != default_port and (r':' + port) or r''
159 urlbase = r'%s://%s%s' % (proto, wsgireq.env[r'SERVER_NAME'], port)
160 logourl = self.config('web', 'logourl') 148 logourl = self.config('web', 'logourl')
161 logoimg = self.config('web', 'logoimg') 149 logoimg = self.config('web', 'logoimg')
162 staticurl = (self.config('web', 'staticurl') 150 staticurl = (self.config('web', 'staticurl')
163 or pycompat.sysbytes(wsgireq.url) + 'static/') 151 or pycompat.sysbytes(wsgireq.url) + 'static/')
164 if not staticurl.endswith('/'): 152 if not staticurl.endswith('/'):
192 defaults = { 180 defaults = {
193 'url': pycompat.sysbytes(wsgireq.url), 181 'url': pycompat.sysbytes(wsgireq.url),
194 'logourl': logourl, 182 'logourl': logourl,
195 'logoimg': logoimg, 183 'logoimg': logoimg,
196 'staticurl': staticurl, 184 'staticurl': staticurl,
197 'urlbase': urlbase, 185 'urlbase': req.advertisedbaseurl,
198 'repo': self.reponame, 186 'repo': self.reponame,
199 'encoding': encoding.encoding, 187 'encoding': encoding.encoding,
200 'motd': motd, 188 'motd': motd,
201 'sessionvars': sessionvars, 189 'sessionvars': sessionvars,
202 'pathdef': makebreadcrumb(pycompat.sysbytes(wsgireq.url)), 190 'pathdef': makebreadcrumb(pycompat.sysbytes(wsgireq.url)),
394 cmd = wsgireq.form.get('cmd', [''])[0] 382 cmd = wsgireq.form.get('cmd', [''])[0]
395 383
396 # process the web interface request 384 # process the web interface request
397 385
398 try: 386 try:
399 tmpl = rctx.templater(wsgireq) 387 tmpl = rctx.templater(wsgireq, req)
400 ctype = tmpl('mimetype', encoding=encoding.encoding) 388 ctype = tmpl('mimetype', encoding=encoding.encoding)
401 ctype = templater.stringify(ctype) 389 ctype = templater.stringify(ctype)
402 390
403 # check read permissions non-static content 391 # check read permissions non-static content
404 if cmd != 'static': 392 if cmd != 'static':