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=['*'])
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)
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)
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
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
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
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)
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), {})
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])
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])
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': '' })
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