equal
deleted
inserted
replaced
41 except: |
41 except: |
42 repo.exception('error in looping task') |
42 repo.exception('error in looping task') |
43 start_task(interval, catch_error_func) |
43 start_task(interval, catch_error_func) |
44 # ensure no tasks will be further added |
44 # ensure no tasks will be further added |
45 repo._looping_tasks = () |
45 repo._looping_tasks = () |
|
46 |
|
47 def host_prefixed_baseurl(baseurl, host): |
|
48 scheme, netloc, url, query, fragment = urlsplit(baseurl) |
|
49 netloc_domain = '.' + '.'.join(netloc.split('.')[-2:]) |
|
50 if host.endswith(netloc_domain): |
|
51 netloc = host |
|
52 baseurl = urlunsplit((scheme, netloc, url, query, fragment)) |
|
53 return baseurl |
46 |
54 |
47 |
55 |
48 class LongTimeExpiringFile(static.File): |
56 class LongTimeExpiringFile(static.File): |
49 """overrides static.File and sets a far futre ``Expires`` date |
57 """overrides static.File and sets a far futre ``Expires`` date |
50 on the resouce. |
58 on the resouce. |
153 if self.config['profile']: # default profiler don't trace threads |
161 if self.config['profile']: # default profiler don't trace threads |
154 return self.render_request(request) |
162 return self.render_request(request) |
155 else: |
163 else: |
156 return threads.deferToThread(self.render_request, request) |
164 return threads.deferToThread(self.render_request, request) |
157 |
165 |
158 def _host_prefixed_base_url(self, base_url): |
|
159 scheme, netloc, url, query, fragment = urlsplit(baseurl) |
|
160 if '.' in netloc: |
|
161 netloc = '.'.join(host.split('.')[:1] + netloc.split('.')[1:]) |
|
162 baseurl = urlunsplit((scheme, netloc, url, query, fragment)) |
|
163 self.warning('base_url is %s for this request', baseurl) |
|
164 return base_url |
|
165 |
|
166 def render_request(self, request): |
166 def render_request(self, request): |
167 origpath = request.path |
167 origpath = request.path |
168 host = request.host |
168 host = request.host |
169 # dual http/https access handling: expect a rewrite rule to prepend |
169 # dual http/https access handling: expect a rewrite rule to prepend |
170 # 'https' to the path to detect https access |
170 # 'https' to the path to detect https access |
175 baseurl = self.https_url or self.base_url |
175 baseurl = self.https_url or self.base_url |
176 else: |
176 else: |
177 https = False |
177 https = False |
178 baseurl = self.base_url |
178 baseurl = self.base_url |
179 if self.config['use-request-subdomain']: |
179 if self.config['use-request-subdomain']: |
180 base_url = self._host_prefixed_base_url(base_url) |
180 baseurl = host_prefixed_baseurl(baseurl, host) |
|
181 self.warning('used baseurl is %s for this request', baseurl) |
181 req = CubicWebTwistedRequestAdapter(request, self.appli.vreg, https, baseurl) |
182 req = CubicWebTwistedRequestAdapter(request, self.appli.vreg, https, baseurl) |
182 if req.authmode == 'http': |
183 if req.authmode == 'http': |
183 # activate realm-based auth |
184 # activate realm-based auth |
184 realm = self.config['realm'] |
185 realm = self.config['realm'] |
185 req.set_header('WWW-Authenticate', [('Basic', {'realm' : realm })], raw=False) |
186 req.set_header('WWW-Authenticate', [('Basic', {'realm' : realm })], raw=False) |