def test_imports_handle_unicode_values_properly(self): klaus = create(Builder('ldapuser') .named('klaus.r\xc3\xbcegg') .having(firstname='Klaus', lastname='R\xc3\xbcegg', l=['M\xc3\xbcnsingen'], # noqa o=['M\xc3\xbcller & Co'], # noqa ou=['M\xc3\xbcnster'], # noqa street=['F\xc3\xa4hrstrasse 13'])) group = create(Builder('ldapgroup') .named('f\xc3\xbchrung') .with_members([klaus])) FAKE_LDAP_USERFOLDER.users = [klaus] FAKE_LDAP_USERFOLDER.groups = [group] updater = IOGDSUpdater(self.portal) updater.import_users() updater.import_groups() ogds_user = ogds_service().fetch_user(u'klaus.r\xfcegg') self.assertEquals(u'klaus.r\xfcegg', ogds_user.userid) self.assertEquals(u'Klaus', ogds_user.firstname) self.assertEquals(u'R\xfcegg', ogds_user.lastname) self.assertEquals(u'klaus.r\[email protected]', ogds_user.email) ogds_group = ogds_service().fetch_group(u'f\xfchrung') self.assertEquals(u'f\xfchrung', ogds_group.groupid)
def prepare_mail(self, subject=u'', to_userid=None, from_userid=None, data=None): if data is None: data = {} msg = MIMEMultipart('related') actor = ogds_service().fetch_user(from_userid) if from_userid else None if actor: msg['From'] = make_addr_header(actor.fullname(), actor.email, 'utf-8') else: msg['From'] = make_addr_header( u'OneGov GEVER', api.portal.get().email_from_address, 'utf-8') recipient = ogds_service().fetch_user(to_userid) msg['To'] = recipient.email msg['Subject'] = Header(subject, 'utf-8') # Break (potential) description out into a list element per newline if data.get('description'): data['description'] = data.get('description').splitlines() html = self.prepare_html(data) msg.attach(MIMEText(html.encode('utf-8'), 'html', 'utf-8')) return msg
def test_imports_handle_unicode_values_properly(self): klaus = create( Builder('ldapuser').named('klaus.r\xc3\xbcegg').having( firstname='Klaus', lastname='R\xc3\xbcegg', l=['M\xc3\xbcnsingen'], # noqa o=['M\xc3\xbcller & Co'], # noqa ou=['M\xc3\xbcnster'], # noqa street=['F\xc3\xa4hrstrasse 13'])) group = create( Builder('ldapgroup').named('f\xc3\xbchrung').with_members([klaus])) FAKE_LDAP_USERFOLDER.users = [klaus] FAKE_LDAP_USERFOLDER.groups = [group] updater = IOGDSUpdater(self.portal) updater.import_users() updater.import_groups() ogds_user = ogds_service().fetch_user(u'klaus.r\xfcegg') self.assertEquals(u'klaus.r\xfcegg', ogds_user.userid) self.assertEquals(u'Klaus', ogds_user.firstname) self.assertEquals(u'R\xfcegg', ogds_user.lastname) self.assertEquals(u'klaus.r\[email protected]', ogds_user.email) ogds_group = ogds_service().fetch_group(u'f\xfchrung') self.assertEquals(u'f\xfchrung', ogds_group.groupid)
def prepare_mail(self, subject=u'', to_userid=None, from_userid=None, data=None): if data is None: data = {} msg = MIMEMultipart('related') actor = ogds_service().fetch_user(from_userid) if from_userid else None if actor: msg['From'] = make_addr_header(actor.fullname(), actor.email, 'utf-8') else: msg['From'] = make_addr_header(u'OneGov GEVER', api.portal.get().email_from_address, 'utf-8') recipient = ogds_service().fetch_user(to_userid) msg['To'] = recipient.email msg['Subject'] = Header(subject, 'utf-8') # Break (potential) description out into a list element per newline if data.get('description'): data['description'] = data.get('description').splitlines() html = self.prepare_html(data) msg.attach(MIMEText(html.encode('utf-8'), 'html', 'utf-8')) return msg
def test_org_unit_created(self): self.assertEqual(1, len(ogds_service().all_org_units())) org_unit = ogds_service().fetch_org_unit('org') self.assertIsNotNone(org_unit) self.assertIsNotNone(org_unit.admin_unit) self.assertIsNotNone(org_unit.users_group) self.assertIsNotNone(org_unit.inbox_group)
def test_imports_users(self): FAKE_LDAP_USERFOLDER.users = [ create(Builder('ldapuser').named('sk1m1')), create(Builder('ldapuser').named('john'))] updater = IOGDSUpdater(self.portal) updater.import_users() self.assertIsNotNone(ogds_service().fetch_user('sk1m1')) self.assertIsNotNone(ogds_service().fetch_user('john'))
def test_sql_changes_are_isolated_1(self): self.login(self.administrator) args = { 'firstname': u'Leak', 'lastname': u'Officer', 'userid': 'leak.officer', 'email': '*****@*****.**', } self.assertFalse(ogds_service().fetch_user(args['userid']), 'SQL changes seem not to be isolated between tests.') create(Builder('ogds_user').having(**args)) self.assertTrue(ogds_service().fetch_user(args['userid']))
def test_sql_changes_are_isolated_1(self): self.login(self.administrator) args = { 'firstname': u'Leak', 'lastname': u'Officer', 'userid': 'leak.officer', 'email': '*****@*****.**', } self.assertFalse( ogds_service().fetch_user(args['userid']), 'SQL changes seem not to be isolated between tests.') create(Builder('ogds_user').having(**args)) self.assertTrue(ogds_service().fetch_user(args['userid']))
def test_flags_users_not_present_in_ldap_as_inactive(self): create(Builder('ogds_user').id('john.doe')) create(Builder('ogds_user').id('hugo.boss')) FAKE_LDAP_USERFOLDER.users = [ create(Builder('ldapuser').named('hugo.boss')), create(Builder('ldapuser').named('new.user'))] updater = IOGDSUpdater(self.portal) updater.import_users() self.assertFalse(ogds_service().fetch_user('john.doe').active) self.assertTrue(ogds_service().fetch_user('hugo.boss').active) self.assertTrue(ogds_service().fetch_user('new.user').active)
def prepare_mail(self, notification): msg = MIMEMultipart('alternative') actor = ogds_service().fetch_user(notification.activity.actor_id) msg['From'] = make_addr_header(actor.fullname(), actor.email, 'utf-8') recipient = ogds_service().fetch_user(notification.userid) msg['To'] = recipient.email msg['Subject'] = self.get_subject(notification) html = self.prepare_html(notification) msg.attach(MIMEText(html.encode('utf-8'), 'html', 'utf-8')) return msg
def get_properties(self): """Return user properties from OGDS. Always returns a minimal set of the properties 'ogg.user.userid' and 'ogg.user.title' even when no ogds-user is found. XXX Also contains deprecated properties that will go away eventually. """ user_id = self.get_user_id() ogds_user = ogds_service().fetch_user(user_id) fullname = ogds_user.fullname() if ogds_user else user_id # XXX deprecated properties properties = {'User.ID': user_id, 'User.FullName': fullname} self._add_property(properties, 'userid', user_id) self._add_property(properties, 'title', fullname) # abort early if there is no ogds user for some reason. if not ogds_user: return properties for attribute_name in self.ogds_user_attributes: value = getattr(ogds_user, attribute_name) self._add_property(properties, attribute_name, value) return properties
def test_imports_group_memberships(self): sk1m1 = create(Builder('ldapuser').named('sk1m1')) sk2m1 = create(Builder('ldapuser').named('sk2m1')) sk1m2 = create(Builder('ldapuser').named('sk1m2')) sk2m2 = create(Builder('ldapuser').named('sk2m2')) FAKE_LDAP_USERFOLDER.users = [sk1m1, sk2m1, sk1m2, sk2m2] FAKE_LDAP_USERFOLDER.groups = [ create(Builder('ldapgroup') .named('og_mandant1_users') .with_members([sk1m1, sk2m1])), create(Builder('ldapgroup') .named('og_mandant2_users') .with_members([sk1m2, sk2m2])), ] updater = IOGDSUpdater(self.portal) updater.import_users() updater.import_groups() ogds = ogds_service() og_mandant1_users = ogds.fetch_group('og_mandant1_users') og_mandant2_users = ogds.fetch_group('og_mandant2_users') self.assertItemsEqual( [ogds.fetch_user('sk1m1'), ogds.fetch_user('sk2m1')], og_mandant1_users.users) self.assertItemsEqual( [ogds.fetch_user('sk1m2'), ogds.fetch_user('sk2m2')], og_mandant2_users.users)
def create_committee( self, title, repository_folder, group_id, group_title, responsibles, ): # XXX I would have expected the commitee builder to do all of that. ogds_members = map( ogds_service().find_user, map(methodcaller('getId'), responsibles), ) create( Builder('ogds_group').having( groupid=group_id, users=ogds_members, )) create( Builder('group').with_groupid(group_id).having( title=group_title).with_members(*responsibles)) committee = create( Builder('committee').titled(title).within( self.committee_container).having( repository_folder=repository_folder, group_id=group_id, )) return committee
def setUp(self): super(TestContactsVocabulary, self).setUp() self.peter_a = create(Builder('person') .having(firstname=u'Peter', lastname=u'M\xfcller', former_contact_id=1111)) self.peter_b = create(Builder('person') .having(firstname=u'Peter', lastname=u'Fl\xfcckiger')) self.peter_c = create(Builder('person') .having(firstname=u'Peter', lastname=u'Meier') .having(is_active=False)) self.meier_ag = create(Builder('organization') .named(u'Meier AG') .having(former_contact_id=2222)) self.teamwork_ag = create(Builder('organization') .named(u'4teamwork AG')) self.school = create(Builder('organization') .named(u'School') .having(is_active=False)) self.role1 = create(Builder('org_role') .having(person=self.peter_a, organization=self.meier_ag, function='Developer')) self.role2 = create(Builder('org_role') .having(person=self.peter_a, organization=self.teamwork_ag, function='Scheffe')) self.ogds_user = OgdsUserToContactAdapter(ogds_service().all_users()[0])
def test_inbox_group_gets_migrated(self): org_unit_id = self.org_unit.unit_id migrator = OGDSMigrator(self.portal, {"client1_inbox_users": "new_inbox_group"}, "move") migrator.migrate() org_unit = ogds_service().fetch_org_unit(org_unit_id) self.assertEquals("new_inbox_group", org_unit.inbox_group.groupid)
def key_value_provider(self): """yield the items key = orgunit id value = orgunit label """ for org_unit in ogds_service().assigned_org_units(): yield (org_unit.id(), org_unit.label())
def setUp(self): super(TestContactsSource, self).setUp() self.peter_a = create( Builder('person').having(firstname=u'Peter', lastname=u'M\xfcller', former_contact_id=1111)) self.peter_b = create( Builder('person').having(firstname=u'Peter', lastname=u'Fl\xfcckiger')) self.peter_c = create( Builder('person').having( firstname=u'Peter', lastname=u'Meier').having(is_active=False)) self.meier_ag = create( Builder('organization').named(u'Meier AG').having( former_contact_id=2222)) self.teamwork_ag = create( Builder('organization').named(u'4teamwork AG')) self.school = create( Builder('organization').named(u'School').having(is_active=False)) self.role1 = create( Builder('org_role').having(person=self.peter_a, organization=self.meier_ag, function='Developer')) self.role2 = create( Builder('org_role').having(person=self.peter_a, organization=self.teamwork_ag, function='Scheffe')) self.ogds_user = OgdsUserToContactAdapter( ogds_service().all_users()[0]) self.source = ContactsSource(self.portal)
def send_digests(self): logger.info('Sending digests...') for userid, notifications in self.get_notifications().items(): # skip when digest interval is not expired yet if not self.is_interval_expired(userid): continue today = api.portal.get_localized_time(date.today()) user = ogds_service().fetch_user(userid) subject = translate( _(u'subject_digest', default=u'Daily Digest for ${date}', mapping={'date': today}), context=self.request) title = translate( _(u'title_daily_digest', default=u'Daily Digest for ${username}', mapping={'username': user.fullname()}), context=self.request) msg = self.prepare_mail( subject=subject, to_userid=userid, data={'notifications': self.prepare_data(notifications), 'public_url': get_current_admin_unit().public_url, 'title': title, 'today': today}) self.send_mail(msg) self.mark_as_sent(notifications) self.record_digest(userid) logger.info(' Digest sent for %s (%s)' % (userid, user.email)) logger.info('Done sending digests.')
def get_responsible_label(self, linked=True): actor = Actor.lookup(self.responsible) org_unit = ogds_service().fetch_org_unit(self.assigned_org_unit) if not linked: return org_unit.prefix_label(actor.get_label()) return org_unit.prefix_label(actor.get_link())
def _remote_request(target_admin_unit_id, viewname, path, data, headers): site = getSite() target_unit = ogds_service().fetch_admin_unit(target_admin_unit_id) if not target_unit: raise ClientNotFound() headers = headers.copy() data = data.copy() mtool = getToolByName(site, "portal_membership") member = mtool.getAuthenticatedMember() key = "X-OGDS-AC" if key not in headers.keys() and member: headers[key] = member.getId() headers["X-OGDS-AUID"] = get_current_admin_unit().id() handler = urllib2.ProxyHandler({}) opener = urllib2.build_opener(handler) viewname = viewname if viewname.startswith("@@") else "@@{}".format(viewname) if path: url = os.path.join(target_unit.site_url, path, viewname) else: url = os.path.join(target_unit.site_url, viewname) request = urllib2.Request(url, urllib.urlencode(data), headers) return opener.open(request)
def is_user_allowed_to_view_additional_tabs(self): """The additional tabs Alltasks and AllIssuedTasks are only shown to adminsitrators and users of the current inbox group.""" inbox = get_current_org_unit().inbox() current_user = ogds_service().fetch_current_user() return current_user in inbox.assigned_users() or self._is_user_admin()
def migrate(self): users_groups_moved = [] inbox_groups_moved = [] org_units = ogds_service().all_org_units() for org_unit in org_units: # Migrate users_group moved = self._migrate_group(org_unit, 'users_group') users_groups_moved.extend(moved) # Migrate inbox_group moved = self._migrate_group(org_unit, 'inbox_group') inbox_groups_moved.extend(moved) results = { 'users_groups': { 'moved': users_groups_moved, 'copied': [], 'deleted': [] }, 'inbox_groups': { 'moved': inbox_groups_moved, 'copied': [], 'deleted': [] }, } return results
def test_imports_group_memberships(self): sk1m1 = create(Builder('ldapuser').named('sk1m1')) sk2m1 = create(Builder('ldapuser').named('sk2m1')) sk1m2 = create(Builder('ldapuser').named('sk1m2')) sk2m2 = create(Builder('ldapuser').named('sk2m2')) FAKE_LDAP_USERFOLDER.users = [sk1m1, sk2m1, sk1m2, sk2m2] FAKE_LDAP_USERFOLDER.groups = [ create( Builder('ldapgroup').named('og_mandant1_users').with_members( [sk1m1, sk2m1])), create( Builder('ldapgroup').named('og_mandant2_users').with_members( [sk1m2, sk2m2])), ] updater = IOGDSUpdater(self.portal) updater.import_users() updater.import_groups() ogds = ogds_service() og_mandant1_users = ogds.fetch_group('og_mandant1_users') og_mandant2_users = ogds.fetch_group('og_mandant2_users') self.assertItemsEqual( [ogds.fetch_user('sk1m1'), ogds.fetch_user('sk2m1')], og_mandant1_users.users) self.assertItemsEqual( [ogds.fetch_user('sk1m2'), ogds.fetch_user('sk2m2')], og_mandant2_users.users)
def get_detail_view_url(self, item): """Returns the url to the detail view for users or group. We do not use item['type'] to determine whether it is a group or a user, as this was determined from the acl_users which wrongly identifies inactive groups (groups that were deleted from the LDAP) as users. Instead we check using the ogds service. """ if ogds_service().fetch_group(item['id']): return '{}/@@list_groupmembers?{}'.format( api.portal.get().absolute_url(), urlencode({'group': item['id']})) elif ogds_service().fetch_user(item['id']): return '{}/@@user-details-plain/{}'.format( api.portal.get().absolute_url(), item['id']) else: return None
def load_user(self): user = ogds_service().fetch_user(self.identifier) if not user: portal = getSite() portal_membership = getToolByName(portal, 'portal_membership') user = portal_membership.getMemberById(self.identifier) return user
def create_inbox_actor(self, org_unit=None): if not org_unit: org_unit_id = self.identifier.split(':', 1)[1] org_unit = ogds_service().fetch_org_unit(org_unit_id) assert org_unit, 'OrgUnit {} for identifier {} is missing.'.format( org_unit_id, self.identifier) return InboxActor(self.identifier, org_unit=org_unit)
def test_rollback_nested_sql_savepoints(self): self.login(self.administrator) args = { 'firstname': u'Transaction', 'lastname': u'Manager', 'userid': 'transaction.manager', } self.assertFalse( ogds_service().fetch_user(args['userid']), 'Opps, there is already a user {!r}'.format(args['userid'])) savepoint = transaction.savepoint() create(Builder('ogds_user').having(**args)) self.assertTrue(ogds_service().fetch_user(args['userid'])) savepoint.rollback() self.assertFalse(ogds_service().fetch_user(args['userid']), 'Could not rollback SQL properly.')
def key_value_provider(self): """ key = org_unit id value = org_unit title """ for org_unit in ogds_service().assigned_org_units(omit_current=True): yield (org_unit.id(), org_unit.label())
def test_imports_groups(self): FAKE_LDAP_USERFOLDER.groups = [ create(Builder('ldapgroup').named('og_mandant1_users'))] updater = IOGDSUpdater(self.portal) updater.import_groups() self.assertIsNotNone(ogds_service().fetch_group('og_mandant1_users'))
def key_value_provider(self): # Reset hidden_terms every time cache key changed self.hidden_terms = [] for user in ogds_service().all_users(): if not user.active: self.hidden_terms.append(user.userid) yield (user.userid, user.label())
def test_inbox_group_gets_migrated(self): org_unit_id = self.org_unit.unit_id migrator = OGDSMigrator( self.portal, {'org-unit-1_inbox_users': 'new_inbox_group'}, 'move') migrator.migrate() org_unit = ogds_service().fetch_org_unit(org_unit_id) self.assertEquals('new_inbox_group', org_unit.inbox_group.groupid)
def _get_users(self): items = [] hidden_terms = [] # users for user in ogds_service().all_users(): if not user.active: hidden_terms.append(user.userid) items.append((user.userid, user.label())) # inboxes for unit in ogds_service().all_org_units(): items.append(( unit.inbox().id(), Actor.inbox(unit.inbox().id(), unit).get_label())) return (items, hidden_terms)
def test_users_group_gets_migrated(self): org_unit_id = self.org_unit.unit_id migrator = OGDSMigrator(self.portal, {'client1_users': 'new_users_group'}, 'move') migrator.migrate() org_unit = ogds_service().fetch_org_unit(org_unit_id) self.assertEquals('new_users_group', org_unit.users_group.groupid)
def _verify_user(self, userid): ogds_user = ogds_service().fetch_user(userid) if ogds_user is None: msg = "User '{}' not found in OGDS!".format(userid) if self.strict: raise UserMigrationException(msg) else: logger.warn(msg)
def get_userdata(self): """Returns a dict of information about a specific user """ try: user = ogds_service().find_user(self.userid) except RecordNotFound: raise NotFound return {'user': user, 'groups': user.groups}
def test_rollback_nested_sql_savepoints(self): self.login(self.administrator) args = { 'firstname': u'Transaction', 'lastname': u'Manager', 'userid': 'transaction.manager', } self.assertFalse( ogds_service().fetch_user(args['userid']), 'Opps, there is already a user {!r}'.format(args['userid'])) savepoint = transaction.savepoint() create(Builder('ogds_user').having(**args)) self.assertTrue(ogds_service().fetch_user(args['userid'])) savepoint.rollback() self.assertFalse( ogds_service().fetch_user(args['userid']), 'Could not rollback SQL properly.')
def update(self): super(TaskEditForm, self).update() # omit the responsible_client field and adjust the field description # of the responsible field if there is only one client configured. if not ogds_service().has_multiple_org_units(): self.groups[0].widgets['responsible_client'].mode = HIDDEN_MODE self.groups[0].widgets['responsible'].field.description = _( u"help_responsible_single_client_setup", default=u"")
def get_responsible_org_unit(self): """Returns the OrgUnit object, which is configured in the ResponsibleOrgUnit behavior field.""" org_unit_id = IResponsibleOrgUnit(self).responsible_org_unit if org_unit_id: return ogds_service().fetch_org_unit(org_unit_id) return None
def send_button_handler(self, action): """Create and Send the Email.""" data, errors = self.extractData() if len(errors) == 0: mh = getToolByName(self.context, 'MailHost') userid = self.context.portal_membership.getAuthenticatedMember() userid = userid.getId() intern_receiver = [] for receiver in data.get('intern_receiver', []): # cut away the username intern_receiver.append(receiver.split(':')[0]) extern_receiver = data.get('extern_receiver') or [] addresses = intern_receiver + extern_receiver # create the mail msg = self.create_mail( data.get('message'), data.get('documents'), only_links=data.get('documents_as_links')) msg['Subject'] = Header(data.get('subject'), CHARSET) user = ogds_service().fetch_user(userid) sender_address = user and user.email if not sender_address: portal = self.context.portal_url.getPortalObject() sender_address = portal.email_from_address msg['From'] = make_addr_header( user.label(), sender_address, CHARSET) header_to = Header(','.join(addresses), CHARSET) msg['To'] = header_to # send it mfrom = u'{} <{}>'.format( user.label(), sender_address).encode(CHARSET) mh.send(msg, mfrom=mfrom, mto=','.join(addresses)) # Store a copy of the sent mail in dossier if (data.get('file_copy_in_dossier', False) and self._allow_save_file_copy_in_context()): self.file_sent_mail_in_dossier(msg) # let the user know that the mail was sent info = _(u'info_mail_sent', 'E-mail has been sent.') notify(DocumentSent( self.context, userid, header_to, data.get('subject'), data.get('message'), data.get('documents'))) IStatusMessage(self.request).addStatusMessage(info, type='info') # and redirect to default view / tab return self.request.RESPONSE.redirect( get_containing_document_tab_url(data.get('documents')[0]))
def personal_overview_title(self): current_user = ogds_service().fetch_current_user() if current_user: user_name = current_user.label(with_principal=False) else: user_name = api.user.get_current().getUserName() return _('personal_overview_title', default='Personal Overview: ${user_name}', mapping=dict(user_name=user_name))
def __call__(self): self.user_ids = [user.userid for user in ogds_service().all_users()] catalog = self.getToolByName('portal_catalog') brains = catalog.unrestrictedSearchResults( portal_type='opengever.document.document') with ProgressLogger('Resolve document author', brains) as step: for brain in brains: self.resolve_document_author(brain) step()
def updateWidgets(self): super(ECH0147ImportForm, self).updateWidgets() self.widgets['message'].value = None # Set default responsible to current user if not self.request.form.get('form.widgets.responsible'): user = ogds_service().fetch_current_user() if user is not None: self.widgets['responsible'].value = [user.userid] self.widgets['responsible'].update()