Exemple #1
0
 def set_account_password(self, account, raw_password):
     """ Account's password was changed. """
     luser = self._get_account(account.username)
     changes = changeset(luser, {
         'password': raw_password,
     })
     save(changes, database=self._database)
Exemple #2
0
 def set_account_password(self, account, raw_password):
     """ Account's password was changed. """
     luser = self._get_account(account.username)
     changes = changeset(luser, {
         'password': raw_password,
     })
     save(changes, database=self._database)
Exemple #3
0
    def remove_account_from_group(self, account, group):
        """ Remove account from group. """
        lgroup: OpenldapGroup = self._get_group(group.name)
        person: OpenldapAccount = self._get_account(account.username)

        changes = changeset(lgroup, {})
        changes = lgroup.remove_member(changes, person)
        save(changes, database=self._database)
Exemple #4
0
    def add_account_to_group(self, account, group):
        """ Add account to group. """
        lgroup: OpenldapGroup = self._get_group(group.name)
        person: OpenldapAccount = self._get_account(account.username)

        changes = changeset(lgroup, {})
        changes = lgroup.add_member(changes, person)
        save(changes, database=self._database)
Exemple #5
0
    def remove_account_from_group(self, account, group):
        """ Remove account from group. """
        lgroup: OpenldapGroup = self._get_group(group.name)
        person: OpenldapAccount = self._get_account(account.username)

        changes = changeset(lgroup, {})
        changes = lgroup.remove_member(changes, person)
        save(changes, database=self._database)
Exemple #6
0
    def add_account_to_group(self, account, group):
        """ Add account to group. """
        lgroup: OpenldapGroup = self._get_group(group.name)
        person: OpenldapAccount = self._get_account(account.username)

        changes = changeset(lgroup, {})
        changes = lgroup.add_member(changes, person)
        save(changes, database=self._database)
Exemple #7
0
    def save_account(self, account: Account) -> None:
        """ Account was saved. """
        person = account.person
        if self._primary_group == 'institute':
            lgroup = self._get_group(person.institute.group.name)
        elif self._primary_group == 'default_project':
            if account.default_project is None:
                lgroup = self._get_group(self._default_primary_group)
            else:
                lgroup = self._get_group(account.default_project.group.name)
        else:
            raise RuntimeError("Unknown value of PRIMARY_GROUP.")

        if account.default_project is None:
            default_project = "none"
        else:
            default_project = account.default_project.pid

        try:
            luser = self._get_account(account.username)
            changes = changeset(luser, {})
            new_user = False
        except ObjectDoesNotExist:
            new_user = True
            luser = self._account_class()
            changes = changeset(luser, {'uid': account.username})

        changes = changes.merge({
            'gidNumber':
            lgroup['gidNumber'],
            'givenName':
            person.first_name,
            'sn':
            person.last_name,
            'telephoneNumber':
            _str_or_none(person.telephone),
            'mail':
            _str_or_none(person.email),
            'title':
            _str_or_none(person.title),
            'o':
            person.institute.name,
            'cn':
            person.full_name,
            'default_project':
            default_project,
            'loginShell':
            account.shell,
            'locked':
            account.is_locked()
        })
        save(changes, database=self._database)

        if new_user:
            # add all groups
            for group in account.person.groups.all():
                self.add_account_to_group(account, group)
Exemple #8
0
    def save_group(self, group):
        """ Group was saved. """
        # If group already exists, take over existing group rather then error.
        try:
            lgroup = self._get_group(group.name)
            changes = changeset(lgroup, {})
        except ObjectDoesNotExist:
            lgroup = self._group_class()
            changes = changeset(lgroup, {
                'cn': group.name,
            })

        changes = changes.merge({'description': group.description})
        save(changes, database=self._database)
Exemple #9
0
    def delete_account(self, account):
        """ Account was deleted. """
        try:
            luser = self._get_account(account.username)
            groups = luser['groups'].load(database=self._database)
            for group in groups:
                changes = changeset(group, {})
                changes = group.remove_member(changes, luser)
                save(changes, database=self._database)

            delete(luser, database=self._database)
        except ObjectDoesNotExist:
            # it doesn't matter if it doesn't exist
            pass
Exemple #10
0
    def delete_account(self, account):
        """ Account was deleted. """
        try:
            luser = self._get_account(account.username)
            groups = luser['groups'].load(database=self._database)
            for group in groups:
                changes = changeset(group, {})
                changes = group.remove_member(changes, luser)
                save(changes, database=self._database)

            delete(luser, database=self._database)
        except ObjectDoesNotExist:
            # it doesn't matter if it doesn't exist
            pass
Exemple #11
0
    def save_account(self, account: Account) -> None:
        """ Account was saved. """
        person = account.person
        if self._primary_group == 'institute':
            lgroup = self._get_group(person.institute.group.name)
        elif self._primary_group == 'default_project':
            if account.default_project is None:
                lgroup = self._get_group(self._default_primary_group)
            else:
                lgroup = self._get_group(account.default_project.group.name)
        else:
            raise RuntimeError("Unknown value of PRIMARY_GROUP.")

        if account.default_project is None:
            default_project = "none"
        else:
            default_project = account.default_project.pid

        try:
            luser = self._get_account(account.username)
            changes = changeset(luser, {})
            new_user = False
        except ObjectDoesNotExist:
            new_user = True
            luser = self._account_class()
            changes = changeset(luser, {
                'uid': account.username
            })

        changes = changes.merge({
            'gidNumber': lgroup['gidNumber'],
            'givenName': person.first_name,
            'sn': person.last_name,
            'telephoneNumber': _str_or_none(person.telephone),
            'mail': _str_or_none(person.email),
            'title': _str_or_none(person.title),
            'o': person.institute.name,
            'cn': person.full_name,
            'default_project': default_project,
            'loginShell': account.shell,
            'locked': account.is_locked()
        })
        save(changes, database=self._database)

        if new_user:
            # add all groups
            for group in account.person.groups.all():
                self.add_account_to_group(account, group)
Exemple #12
0
    def save_group(self, group):
        """ Group was saved. """
        # If group already exists, take over existing group rather then error.
        try:
            lgroup = self._get_group(group.name)
            changes = changeset(lgroup, {})
        except ObjectDoesNotExist:
            lgroup = self._group_class()
            changes = changeset(lgroup, {
                'cn': group.name,
            })

        changes = changes.merge({
            'description': group.description
        })
        save(changes, database=self._database)