Пример #1
0
 def page_login(self, req):
     """ create login page """
     if req.method == 'POST':
         try:
             username = req.params_alt().get('username')
             password = req.params_alt().get('password')
             (storage_url, token) = get_auth(self.auth_url,
                                             username, password,
                                             auth_version=self.auth_version)
             if self.token_bank.get(token, None):
                 self.token_bank[token].update({'url': storage_url,
                                                'last': int(time())})
             else:
                 self.token_bank[token] = {'url': storage_url,
                                           'last': int(time())}
             resp = HTTPFound(location=self.add_prefix(storage_url) + \
                              '?limit=%s' % self.items_per_page)
             resp.set_cookie('_token', token, path=self.page_path,
                             max_age=self.cookie_max_age,
                             secure=self.secure)
             self.memcache_update(token)
             return resp
         except Exception, err:
             lang = self.get_lang(req)
             resp = Response(charset='utf8')
             resp.app_iter = self.tmpl({'ptype': 'login',
                                        'top': self.page_path,
                                        'title': self.title, 'lang': lang,
                                        'message': 'Login Failed'})
             return resp
Пример #2
0
 def page_login(self, req):
     """ create login page """
     if req.method == 'POST':
         try:
             username = req.params_alt().get('username')
             password = req.params_alt().get('password')
             (storage_url, token) = get_auth(self.auth_url,
                                             username,
                                             password,
                                             auth_version=self.auth_version)
             if self.token_bank.get(token, None):
                 self.token_bank[token].update({
                     'url': storage_url,
                     'last': int(time())
                 })
             else:
                 self.token_bank[token] = {
                     'url': storage_url,
                     'last': int(time())
                 }
             resp = HTTPFound(location=self.add_prefix(storage_url) + \
                              '?limit=%s' % self.items_per_page)
             resp.set_cookie('_token',
                             token,
                             path=self.page_path,
                             max_age=self.cookie_max_age,
                             secure=self.secure)
             self.memcache_update(token)
             return resp
         except Exception, err:
             lang = self.get_lang(req)
             resp = Response(charset='utf8')
             resp.app_iter = self.tmpl({
                 'ptype': 'login',
                 'top': self.page_path,
                 'title': self.title,
                 'lang': lang,
                 'message': 'Login Failed'
             })
             return resp
Пример #3
0
 def page_after_action(self, req, storage_url, token):
     """ page after action """
     path = urlparse(self.del_prefix(req.url)).path
     vrs, acc, cont, obj = split_path(path, 1, 4, True)
     path_type = len([i for i in [vrs, acc, cont, obj] if i])
     params = req.params_alt()
     loc = storage_url
     action = params.get('_action')
     if action == 'cont_create' or action == 'obj_create':
         rc = self.action_routine(req, storage_url, token)
         if rc == HTTP_CREATED:
             self.token_bank[token].update({'msg': 'Create Success'})
         elif rc == HTTP_BAD_REQUEST:
             self.token_bank[token].update({'msg': ''})
         elif rc == HTTP_PRECONDITION_FAILED:
             self.token_bank[token].update(
                 {'msg': 'Invalid name or too long.'})
         else:
             self.token_bank[token].update({'msg': 'Create Failed'})
         if action == 'cont_create':
             loc = storage_url
         else:
             loc = self.cont_path(path)
     if action == 'cont_delete' or action == 'obj_delete':
         if self.action_routine(req, storage_url, token) == HTTP_NO_CONTENT:
             self.token_bank[token].update({'msg': 'Delete Success'})
         else:
             self.token_bank[token].update({'msg': 'Delete Failed'})
         if action == 'cont_delete':
             loc = storage_url
         else:
             loc = self.cont_path(path)
     if action == 'obj_copy':
         if self.action_routine(req, storage_url, token) == HTTP_CREATED:
             self.token_bank[token].update({'msg': 'Copy Success'})
         else:
             self.token_bank[token].update({'msg': 'Copy Failed'})
         loc = self.cont_path(path)
     if action == 'cont_metadata' or action == 'obj_metadata' or \
        action == 'cont_acl' or action == 'obj_set_delete_time' or \
        action == 'cont_set_version' or action == 'cont_unset_version' or \
        action == 'cont_contsync':
         if self.action_routine(req, storage_url, token) == HTTP_ACCEPTED:
             result = 'Success'
         else:
             result = 'Failed'
         if action == 'cont_acl':
             self.token_bank[token].update(
                 {'msg': 'ACL update %s' % result})
         elif action == 'obj_set_delete_time':
             self.token_bank[token].update(
                 {'msg': 'Schedule of deletion update %s' % result})
         elif action == 'cont_set_version' or action == 'cont_unset_version':
             self.token_bank[token].update(
                 {'msg': 'Version-storing container update %s' % result})
         else:
             self.token_bank[token].update(
                 {'msg': 'Metadata update %s' % result})
         if action.startswith('cont_'):
             loc = storage_url
         else:
             loc = self.cont_path(path)
     resp = HTTPFound(location=self.add_prefix(loc))
     resp.set_cookie('_token',
                     token,
                     path=self.page_path,
                     max_age=self.cookie_max_age,
                     secure=self.secure)
     self.memcache_update(token)
     return resp
Пример #4
0
    def __call__(self, req):
        if not self.memcache:
            self.memcache = cache_from_env(req.environ)
        login_path = '%s/%s' % (self.page_path, 'login')
        token = None
        storage_url = None
        # favicon
        if req.path == '/favicon.ico':
            return self.pass_file(req, 'images/favicon.ico',
                                  'image/vnd.microsoft.icon')
        # not taylor
        if not req.path.startswith(self.page_path):
            return self.app

        # image
        if req.path.startswith(join(self.page_path, 'image')):
            return self.pass_file(req, join('images', basename(req.path)))
        # css
        if req.path.startswith(join(self.page_path, 'css')):
            return self.pass_file(req, join('css', basename(req.path)))
        # js
        if req.path.startswith(join(self.page_path, 'js')):
            return self.pass_file(req, join('js', basename(req.path)))
        # get token from cookie and query memcache
        token = req.cookies('_token')
        if self.memcache and token:
            cache_val = self.memcache.get('%s_%s' % (self.title, token))
            if cache_val:
                self.token_bank[token] = cache_val
        status = self.token_bank.get(token, None)
        if status:
            storage_url = status.get('url', None)
        # login page
        if req.path == login_path:
            return self.page_login(req)
        if not token or not storage_url:
            return HTTPFound(location=login_path)
        self.token_bank[token].update({'last': time()})
        # clean up token bank
        for tok, val in self.token_bank.items():
            last = val.get('last', 0)
            if (time() - last) >= self.cookie_max_age:
                del (self.token_bank[tok])
        if 'X-PJAX' in req.headers:
            return self.pass_file(req, 'images/test.html', 'text/html')
            # return self.page_cont_list(req, storage_url, token,
            #                            template_name='containers.tmpl')
            # return self.page_obj_list(req, storage_url, token,
            #                           template_name='objectss.tmpl')
        # ajax action
        if '_ajax' in req.params_alt():
            if req.params_alt()['_action'].endswith('_meta_list'):
                status, headers = self.action_routine(req, storage_url, token)
                return Response(status=status, body=headers)
            return Response(
                status=self.action_routine(req, storage_url, token))
        # after action
        if '_action' in req.params_alt():
            if req.params_alt()['_action'] == 'logout':
                del self.token_bank[token]
                self.memcache.delete('%s_%s' % (self.title, token))
                return HTTPFound(location=login_path)
            return self.page_after_action(req, storage_url, token)
        # construct main pages
        return self.page_main(req, storage_url, token)
Пример #5
0
                return resp
            except err:
                pass
            resp = Response()
            resp.set_cookie('_token',
                            token,
                            path=self.page_path,
                            max_age=self.cookie_max_age,
                            secure=self.secure)
            resp.status = HTTP_OK
            resp.headers = obj_status
            resp.body = objct
            self.token_bank[token].update({'msg': ''})
            self.memcache_update(token)
            return resp
        return HTTPFound(location=self.add_prefix(storage_url))

    def page_cont_list(self, req, storage_url, token, template=None):
        """ """
        if template is None:
            tmpl = self.tmpl
        path = urlparse(self.del_prefix(req.url)).path
        if len(path.split('/')) <= 2:
            path = urlparse(storage_url).path
        vrs, acc, cont, obj = split_path(path, 1, 4, True)
        lang = self.get_lang(req)
        base = self.add_prefix(urlparse(storage_url).path)
        status = self.token_bank.get(token, None)
        msg = status.get('msg', '') if status else ''
        params = req.params_alt()
        limit = params.get('limit', self.items_per_page)
Пример #6
0
 def page_after_action(self, req, storage_url, token):
     """ page after action """
     path = urlparse(self.del_prefix(req.url)).path
     vrs, acc, cont, obj = split_path(path, 1, 4, True)
     path_type = len([i for i in [vrs, acc, cont, obj] if i])
     params = req.params_alt()
     loc = storage_url
     action = params.get('_action')
     if action == 'cont_create' or action == 'obj_create':
         rc = self.action_routine(req, storage_url, token)
         if rc == HTTP_CREATED:
             self.token_bank[token].update({'msg': 'Create Success'})
         elif rc == HTTP_BAD_REQUEST:
             self.token_bank[token].update({'msg': ''})
         elif rc == HTTP_PRECONDITION_FAILED:
             self.token_bank[token].update({'msg': 'Invalid name or too long.'})
         else:
             self.token_bank[token].update({'msg': 'Create Failed'})
         if action == 'cont_create':
             loc = storage_url
         else:
             loc = self.cont_path(path)
     if action == 'cont_delete' or action == 'obj_delete':
         if self.action_routine(req, storage_url, token) == HTTP_NO_CONTENT:
             self.token_bank[token].update({'msg': 'Delete Success'})
         else:
             self.token_bank[token].update({'msg': 'Delete Failed'})
         if action == 'cont_delete':
             loc = storage_url
         else:
             loc = self.cont_path(path)
     if action == 'obj_copy':
         if self.action_routine(req, storage_url, token) == HTTP_CREATED:
             self.token_bank[token].update({'msg': 'Copy Success'})
         else:
             self.token_bank[token].update({'msg': 'Copy Failed'})
         loc = self.cont_path(path)
     if action == 'cont_metadata' or action == 'obj_metadata' or \
        action == 'cont_acl' or action == 'obj_set_delete_time' or \
        action == 'cont_set_version' or action == 'cont_unset_version' or \
        action == 'cont_contsync':
         if self.action_routine(req, storage_url, token) == HTTP_ACCEPTED:
             result = 'Success'
         else:
             result = 'Failed'
         if action == 'cont_acl':
             self.token_bank[token].update(
                 {'msg': 'ACL update %s' % result})
         elif action == 'obj_set_delete_time':
             self.token_bank[token].update(
                 {'msg': 'Schedule of deletion update %s' % result})
         elif action == 'cont_set_version' or action == 'cont_unset_version':
             self.token_bank[token].update(
                 {'msg': 'Version-storing container update %s' % result})
         else:
             self.token_bank[token].update(
                 {'msg': 'Metadata update %s' % result})
         if action.startswith('cont_'):
             loc = storage_url
         else:
             loc = self.cont_path(path)
     resp = HTTPFound(location=self.add_prefix(loc))
     resp.set_cookie('_token', token, path=self.page_path,
                     max_age=self.cookie_max_age,
                     secure=self.secure)
     self.memcache_update(token)
     return resp
Пример #7
0
 def handle_oauth(self, state=None, approval_prompt='auto'):
     oauth_client = self.provider.create_for_redirect(
         self.conf, state=state, approval_prompt=approval_prompt)
     return HTTPFound(location=oauth_client.redirect)