Exemplo n.º 1
0
def normalize_ids_after_copy(node, id_prefix='e', ids=[]):
    request = node.REQUEST
    copy_of_prefix = 'copy_of_'
    for childNode in node.getChildNodes():
        # validate id
        id = childNode.getId()
        new_id = None
        if '*' in ids or id in ids or id.startswith(copy_of_prefix):
            # reset ref_by
            childNode.ref_by = []
            # init object-state
            if not '*' in ids:
                lang = request.get('lang')
                for langId in node.getLangIds():
                    request.set('lang', langId)
                    childNode.setObjStateNew(request, reset=0)
                    childNode.onChangeObj(request)
                request.set('lang', lang)
                # new id
                new_id = node.getNewId(id_prefix)
            else:
                # new id
                new_id = node.getNewId(standard.id_prefix(id))
            # reset id
            if new_id is not None and new_id != id:
                standard.writeBlock(
                    node,
                    '[CopySupport._normalize_ids_after_copy]: rename %s(%s) to %s'
                    % (childNode.absolute_url(), childNode.meta_id, new_id))
                node.manage_renameObject(id=id, new_id=new_id)
            # traverse tree
            normalize_ids_after_copy(childNode, id_prefix, ids=['*'])
Exemplo n.º 2
0
def normalize_ids_after_move(node, id_prefix='e', ids=[]):
    request = node.REQUEST
    copy_of_prefix = 'copy_of_'
    for childNode in node.getChildNodes():
        # validate id
        id = childNode.getId()
        new_id = None
        if '*' in ids or id in ids or id.startswith(copy_of_prefix):
            # init object-state
            if not '*' in ids:
                lang = request.get('lang')
                for langId in node.getLangIds():
                    request.set('lang', langId)
                    childNode.setObjStateModified(request)
                    childNode.onChangeObj(request)
                request.set('lang', lang)
                # new id
                if id.startswith(copy_of_prefix):
                    new_id = id[len(id.startswith(copy_of_prefix)):]
                elif standard.id_prefix(id) != id_prefix:
                    new_id = node.getNewId(id_prefix)
            # reset id
            if new_id is not None and new_id != id:
                standard.writeBlock(
                    node,
                    '[CopySupport._normalize_ids_after_move]: rename %s(%s) to %s'
                    % (childNode.absolute_url(), childNode.meta_id, new_id))
                node.manage_renameObject(id=id, new_id=new_id)
Exemplo n.º 3
0
 def _update(self, node, d):
     zcm = self.getCatalogAdapter()
     # Prepare object.
     for attr_id in extra_column_ids:
         attr_name = 'zcat_column_%s' % attr_id
         value = d.get(attr_id)
         setattr(node, attr_name, value)
     for attr_id in zcm._getAttrIds():
         last_id = attr_id
         attr_name = 'zcat_index_%s' % attr_id
         value = umlaut_quote(self, d.get(attr_id))
         setattr(node, attr_name, value)
     # Reindex object.
     request = self.REQUEST
     lang = request.get('lang', self.getPrimaryLanguage())
     zcatalog = getZCatalog(self, lang)
     if zcatalog is not None:
         path = node.getPath()
         if zcatalog.getrid(path):
             zcatalog.uncatalog_object(path)
         zcatalog.catalog_object(node, path)
     # Unprepare object.
     for attr_id in extra_column_ids:
         attr_name = 'zcat_column_%s' % attr_id
         delattr(node, attr_name)
     for attr_id in zcm._getAttrIds():
         attr_name = 'zcat_index_%s' % attr_id
         delattr(node, attr_name)
     # premature commit
     req_key = 'ZMSZCatalogConnector._update.transaction_count'
     cfg_key = 'ZMSZCatalogConnector._update.transaction_size'
     if request.get(req_key, 0) >= int(self.getConfProperty(cfg_key, 999)):
         import transaction
         transaction.commit()
     request.set(req_key, request.get(req_key, 0) + 1)
Exemplo n.º 4
0
 def getLinkUrl( self, url, REQUEST=None):
   request = self.REQUEST
   if isInternalLink(url):
     # Params.
     ref_params = {}
     if url.find(';') > 0:
       ref_params = dict(re.findall(';(\w*)=(\w*)', url[url.find(';'):-1]))
       url = '{$%s}'%url[2:url.find(';')]
     # Anchor.
     ref_anchor = ''
     if url.find('#') > 0:
       ref_anchor = url[url.find('#'):-1]
     # Prepare request.
     bak_params = {}
     for key in ref_params:
       bak_params[key] = request.get(key, None)
       request.set(key, ref_params[key])
     # Get index_html.
     ref_obj = self.getLinkObj(url)
     index_html = getInternalLinkUrl(self, url, ref_obj)
     # Unprepare request.
     for key in bak_params:
       request.set(key, bak_params[key])
     # Return index_html.
     url = index_html + ref_anchor
   elif isMailLink (url):
     prefix = 'mailto:'
     url = 'javascript:window.location.href=\''+prefix+'\'+atob(\''+base64.b64encode(url[len(prefix):].encode()).decode()+'\')'
   return url
Exemplo n.º 5
0
 def get_catalog_index(node):
     request.set('ZMS_CONTEXT_URL', True)
     d = {}
     d['id'] = node.id
     d['home_id'] = node.getHome().id
     d['loc'] = '/'.join(node.getPhysicalPath())
     d['index_html'] = node.getHref2IndexHtmlInContext(
         node.getRootElement(), REQUEST=request)
     d['meta_id'] = node.meta_id
     d['custom'] = d.get('custom', {})
     d['custom']['breadcrumbs'] = []
     for obj in [
             x for x in node.breadcrumbs_obj_path()[1:-1] if x.isPage()
     ]:
         d['custom']['breadcrumbs'].append({
             '__nodeName__':
             'breadcrumb',
             'loc':
             '/'.join(obj.getPhysicalPath()),
             'index_html':
             obj.getHref2IndexHtmlInContext(obj.getRootElement(),
                                            REQUEST=request),
             'title':
             obj.getTitlealt(request),
         })
     return d
Exemplo n.º 6
0
 def getLinkUrl(self, url, REQUEST=None):
     self.startMeasurement('%s.getLinkUrl' % self.meta_id)
     request = self.REQUEST
     if isInternalLink(url):
         # Params.
         ref_params = {}
         if url.find(';') > 0:
             ref_params = dict(
                 re.findall(';(\w*)=(\w*)', url[url.find(';'):-1]))
             url = '{$%s}' % url[2:url.find(';')]
         # Anchor.
         ref_anchor = ''
         if url.find('#') > 0:
             ref_anchor = url[url.find('#'):-1]
         # Prepare request.
         bak_params = {}
         for key in ref_params:
             bak_params[key] = request.get(key, None)
             request.set(key, ref_params[key])
         # Get index_html.
         ref_obj = self.getLinkObj(url)
         index_html = getInternalLinkUrl(self, url, ref_obj)
         # Unprepare request.
         for key in bak_params:
             request.set(key, bak_params[key])
         # Return index_html.
         url = index_html + ref_anchor
     elif isMailLink(url):
         prefix = 'mailto:'
         url = prefix + standard.encrypt_ordtype(url[len(prefix):])
     self.stopMeasurement('%s.getLinkUrl' % self.meta_id)
     return url
Exemplo n.º 7
0
    def test_extractCredentials_from_cookie_with_bad_binascii(self):
        # this might happen between browser implementations
        from base64 import encodestring

        helper = self._makeOne()
        response = FauxCookieResponse()
        request = FauxSettableRequest(RESPONSE=response)

        cookie_val = 'NjE2NDZkNjk2ZTo3MDZjNmY2ZTY1MzQ3NQ%3D%3D'[:-1]
        request.set(helper.cookie_name, cookie_val)

        self.assertEqual(helper.extractCredentials(request), {})
 def __before_publishing_traverse__(self, self2, request):
     path = request['TraversalRequestNameStack']
     if path:
         target = path[-1]
         if target.endswith('.zem'):
             # Remove extension added by EditLink()
             # so we can traverse to the target in Zope
             target = target[:-4]
         request.set('target', target)
         path[:] = []
     else:
         request.set('target', None)
Exemplo n.º 9
0
    def test_extractCredentials_from_cookie_with_colon_that_is_not_ours(self):
        # http://article.gmane.org/gmane.comp.web.zope.plone.product-developers/5145
        from base64 import encodestring

        helper = self._makeOne()
        response = FauxCookieResponse()
        request = FauxSettableRequest(RESPONSE=response)

        cookie_str = 'cookie:from_other_plugin'
        cookie_val = encodestring(cookie_str)
        cookie_val = cookie_val.rstrip()
        request.set(helper.cookie_name, cookie_val)

        self.assertEqual(helper.extractCredentials(request), {})
Exemplo n.º 10
0
    def reindex_all(self):
        result = []
        zcm = self.getCatalogAdapter()
        request = self.REQUEST
        container = self.getDocumentElement()
        for lang in container.getLangIds():
            request.set('lang', lang)
            # Recreate catalog.
            result.append(recreateCatalog(container, self.aq_parent, lang))

            # Reindex items to catalog.
            def cb(node, d):
                self._update(node, d)

            for root in [container] + self.getPortalClients():
                result.append(zcm.get_sitemap(cb, root, recursive=True))
        result = [x for x in result if x]
        return ', '.join([x for x in result])
Exemplo n.º 11
0
    def reindex_self(self, uid):
        result = []
        zcm = self.getCatalogAdapter()
        request = self.REQUEST
        request.set('btn', 'Reindex')  # backwards-compatibility (UzK)
        container = self.getLinkObj(uid)
        home_id = container.getHome().id
        try:
            lresult = []
            langs = request.get('langs',
                                ';'.join(container.getLangIds())).split(';')
            for lang in langs:
                request.set('lang', lang)
                lresult.append('language: %s' % lang)
                # Clear catalog.
                zcatalog = getZCatalog(self, lang)
                if zcatalog is None:
                    lresult.append(
                        recreateCatalog(container, self.aq_parent, lang))
                else:
                    qr = zcatalog({'zcat_index_home_id': home_id})
                    lresult.append('%i objects removed from catalog' % len(qr))
                    for item in qr:
                        data_record_id = item.data_record_id_
                        path = zcatalog.getpath(data_record_id)
                        zcatalog.uncatalog_object(path)
                # Reindex items to catalog.
                def cb(node, d):
                    self._update(node, d)

                lresult.append(zcm.get_sitemap(cb, container, recursive=True))
                lresult = [x for x in lresult if x]
                result.extend(lresult)
                # Log changes.
                zcatalog = getZCatalog(self, lang)
                writeChangesLog(
                    zcatalog,
                    '[reindex_self]: ' + '\n'.join([x for x in lresult]))
        except:
            result.append(standard.writeError(self, 'can\'t reindex_self'))
        result = [x for x in result if x]
        return ', '.join([x for x in result])
Exemplo n.º 12
0
    def test_extractCredentials_from_cookie_with_colon_in_password(self):
        # http://www.zope.org/Collectors/PAS/51
        # Passwords with ":" characters broke authentication
        from base64 import encodestring

        helper = self._makeOne()
        response = FauxCookieResponse()
        request = FauxSettableRequest(RESPONSE=response)

        cookie_str = '%s:%s' % ('foo'.encode('hex'), 'b:ar'.encode('hex'))
        cookie_val = encodestring(cookie_str)
        cookie_val = cookie_val.rstrip()
        request.set(helper.cookie_name, cookie_val)

        self.assertEqual(
            helper.extractCredentials(request), {
                'login': '******',
                'password': '******',
                'remote_host': '',
                'remote_address': ''
            })
Exemplo n.º 13
0
    def recordSet_Sort(self, REQUEST=None):
        request = self.REQUEST
        metaObj = self.getMetaobj(self.meta_id)
        res = request['res']

        if 'sort_id' in [x['id'] for x in metaObj['attrs']]:
            l = [(x.get('sort_id', 1), x) for x in res]
            # Sort (FK).
            for metaObjAttr in metaObj['attrs'][1:]:
                if metaObjAttr.get('type', '') in self.getMetaobjIds():
                    d = {}
                    # FK-id for primary-sort.
                    [
                        self.operator_setitem(d, x.get(metaObjAttr['id']),
                                              x.get(metaObjAttr['id']))
                        for x in res
                    ]
                    for fkContainer in self.getParentNode().getChildNodes(
                            request, metaObjAttr['type']):
                        fkMetaObj = self.getMetaobj(fkContainer.meta_id)
                        fkMetaObjAttrIdRecordSet = fkMetaObj['attrs'][0]['id']
                        fkMetaObjRecordSet = fkContainer.attr(
                            fkMetaObjAttrIdRecordSet)
                        fkMetaObjIdId = self.getMetaobjAttrIdentifierId(
                            fkContainer.meta_id)
                        # FK-sort_id for primary-sort.
                        [
                            self.operator_setitem(d, x.get(fkMetaObjIdId),
                                                  x.get('sort_id'))
                            for x in fkMetaObjRecordSet
                        ]
                    # Add primary-sort.
                    l = [((d.get(x[1].get(metaObjAttr['id'])), x[0]), x[1])
                         for x in l]
                    break
            l.sort()
            res = [x[1] for x in l]
        else:
            qorder = request.get('qorder', '')
            qorderdir = 'asc'
            if qorder == '':
                skiptypes = ['file', 'image'] + self.getMetaobjManager(
                ).valid_xtypes + self.getMetaobjIds()
                for attr in metaObj['attrs'][1:]:
                    if attr.get('type', '') not in skiptypes and \
                       attr.get('name', '') != '' and \
                       attr.get('custom', '') != '':
                        qorder = attr['id']
                        if attr.get('type',
                                    '') in ['date', 'datetime', 'time']:
                            qorderdir = 'desc'
                        break
            if qorder:
                qorderdir = request.get('qorderdir', qorderdir)
                res = standard.sort_list(res, qorder, qorderdir)
                request.set('qorder', qorder)
                request.set('qorderdir', qorderdir)

        request.set('res', res)
        return res