etwist/server.py
branchtls-sprint
changeset 1543 dca9817bb337
parent 1542 2965fcfaeca1
child 1936 c5af2fbda5b6
equal deleted inserted replaced
1542:2965fcfaeca1 1543:dca9817bb337
    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)