mirror of
https://github.com/YunoHost/yunohost.git
synced 2024-09-03 20:06:10 +02:00
Add users_remove bulk operation
This commit is contained in:
parent
1ad0979ace
commit
288d6b6b47
2 changed files with 37 additions and 8 deletions
|
@ -7,7 +7,7 @@ import os
|
||||||
from .conftest import message, raiseYunohostError, get_test_apps_dir
|
from .conftest import message, raiseYunohostError, get_test_apps_dir
|
||||||
|
|
||||||
from yunohost.domain import _get_maindomain, domain_add, domain_remove, domain_list, domains_add, domains_remove
|
from yunohost.domain import _get_maindomain, domain_add, domain_remove, domain_list, domains_add, domains_remove
|
||||||
from yunohost.user import user_create, user_list, user_delete, User, users_add
|
from yunohost.user import user_create, user_list, user_delete, User, users_add, users_remove
|
||||||
from yunohost.authenticators.ldap_ynhuser import Authenticator, SESSION_FOLDER, short_hash
|
from yunohost.authenticators.ldap_ynhuser import Authenticator, SESSION_FOLDER, short_hash
|
||||||
from yunohost.app import app_install, app_remove, app_setting, app_ssowatconf, app_change_url
|
from yunohost.app import app_install, app_remove, app_setting, app_ssowatconf, app_change_url
|
||||||
from yunohost.permission import user_permission_list, user_permission_update
|
from yunohost.permission import user_permission_list, user_permission_update
|
||||||
|
@ -63,8 +63,8 @@ def setup_module(module):
|
||||||
|
|
||||||
def teardown_module(module):
|
def teardown_module(module):
|
||||||
userlist = user_list()["users"]
|
userlist = user_list()["users"]
|
||||||
for user in [ "alice", "bob" ]:
|
users = [ user for user in [ "alice", "bob" ] if user in userlist ]
|
||||||
if user in userlist: user_delete(user)
|
users_remove(users)
|
||||||
|
|
||||||
app_remove("hellopy")
|
app_remove("hellopy")
|
||||||
|
|
||||||
|
|
39
src/user.py
39
src/user.py
|
@ -146,6 +146,28 @@ def shellexists(shell):
|
||||||
"""Check if the provided shell exists and is executable."""
|
"""Check if the provided shell exists and is executable."""
|
||||||
return os.path.isfile(shell) and os.access(shell, os.X_OK)
|
return os.path.isfile(shell) and os.access(shell, os.X_OK)
|
||||||
|
|
||||||
|
# Used in tests to create many users at once.
|
||||||
|
# The permissions are synchronized at the end of the entire operation.
|
||||||
|
@is_unit_operation()
|
||||||
|
def users_remove(
|
||||||
|
operation_logger,
|
||||||
|
users: List[str],
|
||||||
|
):
|
||||||
|
|
||||||
|
for username in users:
|
||||||
|
user_delete(username, do_regen_conf=False)
|
||||||
|
|
||||||
|
from yunohost.permission import permission_sync_to_user
|
||||||
|
permission_sync_to_user()
|
||||||
|
|
||||||
|
# Invalidate passwd to take user deletion into account
|
||||||
|
subprocess.call(["nscd", "-i", "passwd"])
|
||||||
|
|
||||||
|
from yunohost.hook import hook_callback
|
||||||
|
for username in users:
|
||||||
|
hook_callback("post_user_delete", args=[username, False])
|
||||||
|
logger.success(m18n.n("user_deleted"))
|
||||||
|
|
||||||
# Used in tests to create many users at once.
|
# Used in tests to create many users at once.
|
||||||
# The permissions are synchronized at the end of the entire operation.
|
# The permissions are synchronized at the end of the entire operation.
|
||||||
@is_unit_operation()
|
@is_unit_operation()
|
||||||
|
@ -360,7 +382,7 @@ def user_create(
|
||||||
|
|
||||||
|
|
||||||
@is_unit_operation([("username", "user")])
|
@is_unit_operation([("username", "user")])
|
||||||
def user_delete(operation_logger, username, purge=False, from_import=False):
|
def user_delete(operation_logger, username, purge=False, from_import=False, do_regen_conf=True):
|
||||||
from yunohost.hook import hook_callback
|
from yunohost.hook import hook_callback
|
||||||
from yunohost.utils.ldap import _get_ldap_interface
|
from yunohost.utils.ldap import _get_ldap_interface
|
||||||
from yunohost.authenticators.ldap_ynhuser import Authenticator as PortalAuth
|
from yunohost.authenticators.ldap_ynhuser import Authenticator as PortalAuth
|
||||||
|
@ -372,7 +394,6 @@ def user_delete(operation_logger, username, purge=False, from_import=False):
|
||||||
if not from_import:
|
if not from_import:
|
||||||
operation_logger.start()
|
operation_logger.start()
|
||||||
|
|
||||||
user_group_update("all_users", remove=username, force=True, sync_perm=False)
|
|
||||||
for group, infos in user_group_list()["groups"].items():
|
for group, infos in user_group_list()["groups"].items():
|
||||||
if group == "all_users":
|
if group == "all_users":
|
||||||
continue
|
continue
|
||||||
|
@ -385,7 +406,14 @@ def user_delete(operation_logger, username, purge=False, from_import=False):
|
||||||
# epic bug happened somewhere else and only a partial removal was
|
# epic bug happened somewhere else and only a partial removal was
|
||||||
# performed...)
|
# performed...)
|
||||||
if username in user_group_list()["groups"].keys():
|
if username in user_group_list()["groups"].keys():
|
||||||
user_group_delete(username, force=True, sync_perm=True)
|
user_group_delete(username, force=True, sync_perm=False)
|
||||||
|
|
||||||
|
PortalAuth.invalidate_all_sessions_for_user(username)
|
||||||
|
AdminAuth.invalidate_all_sessions_for_user(username)
|
||||||
|
|
||||||
|
# Apparently ldap.remove uid removes from group all_users, but unless we have test we
|
||||||
|
# can't be too sure... so leave it here until we have tests for this!
|
||||||
|
user_group_update("all_users", remove=username, force=True, sync_perm=do_regen_conf)
|
||||||
|
|
||||||
ldap = _get_ldap_interface()
|
ldap = _get_ldap_interface()
|
||||||
try:
|
try:
|
||||||
|
@ -393,8 +421,9 @@ def user_delete(operation_logger, username, purge=False, from_import=False):
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise YunohostError("user_deletion_failed", user=username, error=e)
|
raise YunohostError("user_deletion_failed", user=username, error=e)
|
||||||
|
|
||||||
PortalAuth.invalidate_all_sessions_for_user(username)
|
if not do_regen_conf:
|
||||||
AdminAuth.invalidate_all_sessions_for_user(username)
|
return
|
||||||
|
|
||||||
|
|
||||||
# Invalidate passwd to take user deletion into account
|
# Invalidate passwd to take user deletion into account
|
||||||
subprocess.call(["nscd", "-i", "passwd"])
|
subprocess.call(["nscd", "-i", "passwd"])
|
||||||
|
|
Loading…
Add table
Reference in a new issue