示例#1
0
文件: members.py 项目: claytron/karl
 def _getInvitations(self):
     L = []
     for invitation in self.context.values():
         if IInvitation.providedBy(invitation):
             L.append(invitation)
     return L
示例#2
0
文件: admin.py 项目: pombredanne/karl
    def _add_user_csv_row(self, search, profiles, users, row, reactivate, i):
        errors = []
        messages = []

        username = row.pop('username')
        login = row.pop('login', username)
        if not username:
            errors.append(
                "Malformed CSV: line %d has an empty username." %
                (i+2))

        email = row['email']
        if not email:
            errors.append(
                'Malformed CSV: line %d has an empty email address.' % (i+2)
            )

        if errors:
            return 0, messages, errors

        website = row.pop('website', None)
        if website is not None:
            row['websites'] = website.strip().split()

        profile = profiles.get(username)
        skip = False
        if (users.get_by_id(username) is not None or
            (profile is not None and profile.security_state != 'inactive')):
            messages.append(
                "Skipping user: %s: User already exists." %
                username
            )
            skip = True
        elif users.get_by_login(login):
            messages.append(
                "Skipping user: %s: User already exists with "
                "login: %s" % (username, login)
            )
            skip = True

        if skip:
            return 0, messages, errors

        merge_profile = None
        count, docids, resolver = search(email=email)
        if count > 1:
            errors.append(
                'Multiple users already exist with email '
                'address: %s' % email
            )
        elif count == 1:
            previous = resolver(iter(docids).next())
            if IInvitation.providedBy(previous):
                # This user was previously invited to join a community.  Remove
                # the invitation and carry on
                del previous.__parent__[previous.__name__]
            else:
                merge_profile = resolver(docids[0])
                if merge_profile.security_state != 'inactive':
                    errors.append(
                        'An active user already exists with email '
                        'address: %s.' % email
                    )
                elif not reactivate:
                    errors.append(
                        'A previously deactivated user exists with '
                        'email address: %s.  Consider checking the '
                        '"Reactivate user" checkbox to reactivate '
                        'the user.' % email
                    )

                if merge_profile.__name__ == username:
                    merge_profile = None

        if profile is None:
            profile = profiles.get(username)
            if profile is not None and not reactivate:
                errors.append(
                    'A previously deactivated user exists with username: %s.  '
                    'Consider checking the "Reactivate user" checkbox to '
                    'reactivate the user.' % username
                )

        if errors:
            return 0, messages, errors

        groups = row.pop('groups', '')
        groups = set(groups.split())
        if 'sha_password' in row:
            users.add(username, login, row.pop('sha_password'),
                      groups, encrypted=True)
        else:
            users.add(username, login, row.pop('password'),
                      groups)
        decoded = {}
        for k, v in row.items():
            if isinstance(v, str):
                try:
                    v = v.decode('utf8')
                except UnicodeDecodeError:
                    v = v.decode('latin1')
            decoded[k] = v
        if profile is None:
            profile = create_content(IProfile, **decoded)
            profiles[username] = profile
            workflow = get_workflow(IProfile, 'security', profile)
            if workflow is not None:
                workflow.initialize(profile)
        else:
            messages.append('Reactivated %s.' % username)
            for k, v in decoded.items():
                setattr(profile, k, v)
            workflow = get_workflow(IProfile, 'security', profile)
            workflow.transition_to_state(profile, None, 'active')

        if merge_profile is not None:
            merge_messages = StringIO()
            self.rename_user(profile, merge_profile.__name__, username,
                             merge=True, out=merge_messages)
            messages += merge_messages.getvalue().split('\n')

        return 1, messages, errors
示例#3
0
文件: members.py 项目: zagy/karl
 def _getInvitations(self):
     L = []
     for invitation in self.context.values():
         if IInvitation.providedBy(invitation):
             L.append(invitation)
     return L
示例#4
0
文件: admin.py 项目: zagy/karl
    def _add_user_csv_row(self, search, profiles, users, row, reactivate, i):
        errors = []
        messages = []

        username = row.pop('username')
        login = row.pop('login', username)
        if not username:
            errors.append("Malformed CSV: line %d has an empty username." %
                          (i + 2))

        email = row['email']
        if not email:
            errors.append(
                'Malformed CSV: line %d has an empty email address.' % (i + 2))

        if errors:
            return 0, messages, errors

        website = row.pop('website', None)
        if website is not None:
            row['websites'] = website.strip().split()

        profile = profiles.get(username)
        skip = False
        if (users.get_by_id(username) is not None or
            (profile is not None and profile.security_state != 'inactive')):
            messages.append("Skipping user: %s: User already exists." %
                            username)
            skip = True
        elif users.get_by_login(login):
            messages.append("Skipping user: %s: User already exists with "
                            "login: %s" % (username, login))
            skip = True

        if skip:
            return 0, messages, errors

        merge_profile = None
        count, docids, resolver = search(email=email)
        if count > 1:
            errors.append('Multiple users already exist with email '
                          'address: %s' % email)
        elif count == 1:
            previous = resolver(iter(docids).next())
            if IInvitation.providedBy(previous):
                # This user was previously invited to join a community.  Remove
                # the invitation and carry on
                del previous.__parent__[previous.__name__]
            else:
                merge_profile = resolver(docids[0])
                if merge_profile.security_state != 'inactive':
                    errors.append('An active user already exists with email '
                                  'address: %s.' % email)
                elif not reactivate:
                    errors.append('A previously deactivated user exists with '
                                  'email address: %s.  Consider checking the '
                                  '"Reactivate user" checkbox to reactivate '
                                  'the user.' % email)

                if merge_profile.__name__ == username:
                    merge_profile = None

        if profile is None:
            profile = profiles.get(username)
            if profile is not None and not reactivate:
                errors.append(
                    'A previously deactivated user exists with username: %s.  '
                    'Consider checking the "Reactivate user" checkbox to '
                    'reactivate the user.' % username)

        if errors:
            return 0, messages, errors

        groups = row.pop('groups', '')
        groups = set(groups.split())
        if 'sha_password' in row:
            users.add(username,
                      login,
                      row.pop('sha_password'),
                      groups,
                      encrypted=True)
        else:
            users.add(username, login, row.pop('password'), groups)
        decoded = {}
        for k, v in row.items():
            if isinstance(v, str):
                try:
                    v = v.decode('utf8')
                except UnicodeDecodeError:
                    v = v.decode('latin1')
            decoded[k] = v
        if profile is None:
            profile = create_content(IProfile, **decoded)
            profiles[username] = profile
            workflow = get_workflow(IProfile, 'security', profile)
            if workflow is not None:
                workflow.initialize(profile)
        else:
            messages.append('Reactivated %s.' % username)
            for k, v in decoded.items():
                setattr(profile, k, v)
            workflow = get_workflow(IProfile, 'security', profile)
            workflow.transition_to_state(profile, None, 'active')

        if merge_profile is not None:
            merge_messages = StringIO()
            self.rename_user(profile,
                             merge_profile.__name__,
                             username,
                             merge=True,
                             out=merge_messages)
            messages += merge_messages.getvalue().split('\n')

        return 1, messages, errors