def testSetUp(self): client = getUtility(IAdminClient) if client._state == 'disconnected': zr = getUtility(IZopeReactor) zr.reactor.callFromThread(client.connect) wait_for_client_state(client, 'authenticated') setupXMPPEnvironment(client, member_jids=[JID('test_user_1_@localhost')], member_passwords={JID('test_user_1_@localhost'): 'secret'}) wait_on_client_deferreds(client)
def testSetUp(self): client = getUtility(IAdminClient) if client._state == 'disconnected': zr = getUtility(IZopeReactor) zr.reactor.callFromThread(client.connect) wait_for_client_state(client, 'authenticated') _setupXMPPEnvironment( client, member_jids=[JID('test_user_1_@localhost')], member_passwords={JID('test_user_1_@localhost'): 'secret'}) wait_on_client_deferreds(client)
def test_nodes(self): portal = self.layer['portal'] mt = getToolByName(portal, 'portal_membership') member_ids = set(mt.listMemberIds()) client = getUtility(IAdminClient) d = getAllChildNodes(client, None) wait_on_client_deferreds(client) tree = d.result self.assertEqual(tree[''], ['people']) self.assertTrue(member_ids.issubset(set(tree['people'])))
def setup_xmpp(context): # Setup existing users from jarn.xmpp.core.interfaces import IAdminClient from jarn.xmpp.core.subscribers.startup import setupAdminClient from jarn.xmpp.core.utils.setup import setupXMPPEnvironment from jarn.xmpp.twisted.testing import wait_for_client_state from jarn.xmpp.twisted.testing import wait_on_client_deferreds setupAdminClient(None, None) client = getUtility(IAdminClient) wait_for_client_state(client, 'authenticated') wait_on_client_deferreds(client) setupXMPPEnvironment(context) wait_on_client_deferreds(client)
def test_add_delete_user(self): portal = self.layer['portal'] setRoles(portal, TEST_USER_ID, ['Manager']) client = getUtility(IAdminClient) mt = getToolByName(portal, 'portal_membership') mt.addMember('stpeter', 'secret', ['Member'], []) wait_on_client_deferreds(client) # User has been added d = client.admin.getRegisteredUsers() self.assertTrue(wait_on_deferred(d)) user_jids = [user_dict['jid'] for user_dict in d.result] self.assertTrue('stpeter@localhost' in user_jids) # User's pubsub node has been added d = getAllChildNodes(client, 'people') self.assertTrue(wait_on_deferred(d)) self.assertTrue('stpeter' in d.result['people']) pass_storage = getUtility(IXMPPPasswordStorage) self.assertTrue(pass_storage.get('stpeter') is not None) mt.deleteMembers('stpeter') wait_on_client_deferreds(client) # User has been deleted d = client.admin.getRegisteredUsers() wait_on_client_deferreds(client) user_jids = [user_dict['jid'] for user_dict in d.result] self.assertTrue('stpeter@localhost' not in user_jids) self.assertTrue(pass_storage.get('stpeter') is None) # User's pubsub node has been removed d = getAllChildNodes(client, 'people') wait_on_client_deferreds(client) self.assertTrue('stpeter' not in d.result['people'])
def test_publish_to_node(self): portal = self.layer['portal'] client = getUtility(IAdminClient) # Add a member mt = getToolByName(portal, 'portal_membership') mt.addMember('stpeter', 'secret', ['Member'], []) wait_on_client_deferreds(client) transaction.commit() app = self.layer['app'] portalURL = portal.absolute_url() browser = Browser(app) browser.addHeader('Authorization', 'Basic %s:%s' % ('stpeter', 'secret', )) browser.open(portalURL+'/@@pubsub-publish') browser.getControl('Node').value='stpeter' browser.getControl('Message').value='Hello pubsub' browser.getControl('Post').click() # This is the only case where we do not have a deferred to wait on, # as it's the DeferredClient that acts on behalf of the user. # Let's sleep it out. time.sleep(1.0) # Hopefully the pubsub events have been sent to the admin client... wait_on_client_deferreds(client) pubsub_storage = getUtility(IPubSubStorage) items = pubsub_storage.node_items self.assertTrue('stpeter' in items) self.assertEqual(1, len(items['stpeter'])) personal_item = items['stpeter'][0] self.assertTrue('content' in personal_item) self.assertTrue('published' in personal_item) self.assertTrue('published' in personal_item) self.assertEqual(u'Hello pubsub', personal_item['content']) people_item = items['people'][0] self.assertEqual(people_item, personal_item)
def create_site_admin(app, args): # Display all messages on stderr logger.setLevel(logging.INFO) logger.handlers[0].setLevel(logging.INFO) existing = app.objectValues('Plone Site') site = existing and existing[0] or None if site is None: logger.error("No Plone site found in the database.") sys.exit(1) _, site = _setup(app, site) parser = OptionParser() parser.add_option('-l', '--login', default=None, help='Site admin login.') parser.add_option('-e', '--email', default=None, help='Site admin email.') parser.add_option('-n', '--fullname', default=None, help='Site admin full name.') parser.add_option('-a', '--hostname', default=None, help='Intranett site host name.') (options, args) = parser.parse_args(args=args) # User info login = options.login email = options.email fullname = options.fullname hostname = options.hostname if not login: logger.error("Missing option --login.") sys.exit(1) if not email: logger.error("Missing option --email.") sys.exit(1) if not fullname: logger.error("Missing option --fullname.") sys.exit(1) if not hostname: logger.error("Missing option --hostname.") sys.exit(1) # Add and notify the site admin user mt = aq_get(site, 'portal_membership') pt = aq_get(site, 'portal_password_reset') rt = aq_get(site, 'portal_registration') if mt.getMemberById(login) is not None: logger.error("User %s already exists." % login) sys.exit(1) from intranett.policy.browser.activation import ActivationMail # Get the hostname if not hostname.endswith('.intranett.no'): hostname += '.intranett.no' mt.addMember(login, rt.generatePassword(), ['Member', 'Site Administrator'], []) member = mt.getMemberById(login) # getMemberByLogin??? member.setMemberProperties(dict(email=email, fullname=fullname)) reset = pt.requestReset(login) # change ownership of all content to new user and update dates to now from DateTime import DateTime user = member.getUser() userid = user.getId() now = DateTime() catalog = aq_get(site, 'portal_catalog') brains = catalog.unrestrictedSearchResults() for brain in brains: if brain.portal_type.startswith('Member'): continue obj = brain.getObject() obj.setCreators(userid) obj.changeOwnership(user) obj.setCreationDate(now) obj.setEffectiveDate(now) obj.setModificationDate(now) obj.reindexObject(idxs=None) # Mail him mail_text = ActivationMail(site, site.REQUEST)(member=member, reset=reset, email=email, fullname=fullname, hostname=hostname) if isinstance(mail_text, unicode): mail_text = mail_text.encode('utf-8') mail_text = mail_text.replace('http://foo/Plone/passwordreset/', 'https://%s/activate/' % hostname) message_obj = message_from_string(mail_text.strip()) subject = message_obj['Subject'] m_to = message_obj['To'] m_from = message_obj['From'] host = aq_get(site, 'MailHost') host.send(mail_text, m_to, m_from, subject=subject, charset='utf-8', immediate=True) from jarn.xmpp.core.interfaces import IAdminClient from jarn.xmpp.core.subscribers.startup import setupAdminClient from jarn.xmpp.core.subscribers.user_management import onUserCreation from jarn.xmpp.twisted.testing import wait_for_client_state from jarn.xmpp.twisted.testing import wait_on_deferred from jarn.xmpp.twisted.testing import wait_on_client_deferreds setupAdminClient(None, None) client = getUtility(IAdminClient) wait_for_client_state(client, 'authenticated') wait_on_client_deferreds(client) class FakeEvent(object): pass ev = FakeEvent() ev.principal = user d = onUserCreation(ev) wait_on_deferred(d) transaction.get().note('Added site admin user %r.' % login) transaction.get().commit() logger.info('Added site admin user %r.', login)
def create_site_admin(app, args): # Display all messages on stderr logger.setLevel(logging.INFO) logger.handlers[0].setLevel(logging.INFO) existing = app.objectValues('Plone Site') site = existing and existing[0] or None if site is None: logger.error("No Plone site found in the database.") sys.exit(1) _, site = _setup(app, site) parser = OptionParser() parser.add_option('-l', '--login', default=None, help='Site admin login.') parser.add_option('-e', '--email', default=None, help='Site admin email.') parser.add_option('-n', '--fullname', default=None, help='Site admin full name.') parser.add_option('-a', '--hostname', default=None, help='Intranett site host name.') (options, args) = parser.parse_args(args=args) # User info login = options.login email = options.email fullname = options.fullname hostname = options.hostname if not login: logger.error("Missing option --login.") sys.exit(1) if not email: logger.error("Missing option --email.") sys.exit(1) if not fullname: logger.error("Missing option --fullname.") sys.exit(1) if not hostname: logger.error("Missing option --hostname.") sys.exit(1) # Add and notify the site admin user mt = aq_get(site, 'portal_membership') pt = aq_get(site, 'portal_password_reset') rt = aq_get(site, 'portal_registration') if mt.getMemberById(login) is not None: logger.error("User %s already exists." % login) sys.exit(1) from intranett.policy.browser.activation import ActivationMail # Get the hostname if not hostname.endswith('.intranett.no'): hostname += '.intranett.no' mt.addMember(login, rt.generatePassword(), ['Member', 'Site Administrator'], []) member = mt.getMemberById(login) # getMemberByLogin??? member.setMemberProperties(dict(email=email, fullname=fullname)) reset = pt.requestReset(login) # change ownership of all content to new user and update dates to now from intranett.policy.config import PERSONAL_FOLDER_ID from DateTime import DateTime user = member.getUser() userid = user.getId() now = DateTime() catalog = aq_get(site, 'portal_catalog') brains = catalog.unrestrictedSearchResults() for brain in brains: if brain.portal_type.startswith('Member'): continue if brain.getId == PERSONAL_FOLDER_ID: continue obj = brain.getObject() obj.setCreators(userid) obj.changeOwnership(user) obj.setCreationDate(now) obj.setEffectiveDate(now) obj.setModificationDate(now) obj.reindexObject(idxs=None) # Mail him mail_text = ActivationMail(site, site.REQUEST)(member=member, reset=reset, email=email, fullname=fullname, hostname=hostname) if isinstance(mail_text, unicode): mail_text = mail_text.encode('utf-8') mail_text = mail_text.replace('http://foo/Plone/passwordreset/', 'https://%s/activate/' % hostname) message_obj = message_from_string(mail_text.strip()) subject = message_obj['Subject'] m_to = message_obj['To'] m_from = message_obj['From'] host = aq_get(site, 'MailHost') host.send(mail_text, m_to, m_from, subject=subject, charset='utf-8', immediate=True) from jarn.xmpp.core.interfaces import IAdminClient from jarn.xmpp.core.subscribers.startup import setupAdminClient from jarn.xmpp.core.subscribers.user_management import onUserCreation from jarn.xmpp.twisted.testing import wait_for_client_state from jarn.xmpp.twisted.testing import wait_on_deferred from jarn.xmpp.twisted.testing import wait_on_client_deferreds setupAdminClient(None, None) client = getUtility(IAdminClient) wait_for_client_state(client, 'authenticated') wait_on_client_deferreds(client) class FakeEvent(object): pass ev = FakeEvent() ev.principal = user d = onUserCreation(ev) wait_on_deferred(d) transaction.get().note('Added site admin user %r.' % login) transaction.get().commit() logger.info('Added site admin user %r.', login)