From 3218d58ee4caf46e1354be5d9c2c259bb67dd586 Mon Sep 17 00:00:00 2001 From: Jan Dittberner Date: Fri, 26 Dec 2014 00:39:53 +0100 Subject: [PATCH] implement delete SFTP and setup/delete for mail base directories --- docs/changelog.rst | 2 ++ gvafile/osusers/tasks.py | 70 +++++++++++++++++++++++++++++++++++++--- 2 files changed, 67 insertions(+), 5 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 53fa8dd..07449fa 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -1,5 +1,7 @@ Changelog ========= +* :feature:`-` implement tasks for creating and deleting SFTP and mail base directories + * :release:`0.0.1 <2014-12-25>` * :feature:`-` initial setup of django application and celery worker diff --git a/gvafile/osusers/tasks.py b/gvafile/osusers/tasks.py index 978c3fd..e386a99 100644 --- a/gvafile/osusers/tasks.py +++ b/gvafile/osusers/tasks.py @@ -22,6 +22,7 @@ _logger = get_task_logger(__name__) SUDO_CMD = '/usr/bin/sudo' INSTALL_CMD = '/usr/bin/install' SETFACL_CMD = '/usr/bin/setfacl' +RM_CMD = '/bin/rm' def _build_sftp_directory_name(username): @@ -46,8 +47,6 @@ def setup_file_sftp_userdir(username): This task creates the home directory for an SFTP user if it does not exist yet. - The task is rejected if the directory creation fails. - :param str username: the user name :raises Exception: if the SFTP directory of the user cannot be created :return: the created directory name @@ -72,14 +71,75 @@ def setup_file_sftp_userdir(username): @shared_task def delete_file_sftp_userdir(username): - pass + """ + This task recursively deletes the home directory of an SFTP user if it + does not exist yet. + + :param str username: the user name + :raises Exception: if the SFTP directory of the user cannot be removed + :return: the removed directory name + :rtype: str + + """ + sftp_directory = _build_sftp_directory_name(username) + try: + subprocess.check_output([ + SUDO_CMD, RM_CMD, '-r', '-f', sftp_directory], + stderr=subprocess.STDOUT) + except subprocess.CalledProcessError: + _logger.exception( + 'could not remove SFTP directory for user %s', username) + raise GVAFileException( + "could not remove SFTP directory for user %s" % username) + return sftp_directory @shared_task def setup_file_mail_userdir(username): - pass + """ + This task creates the mail base directory for a user if it does not exist + yet. + + :param str username: the user name + :raises Exception: if the mail base directory for the user cannot be + created + :return: the created directory name + :rtype: str + + """ + mail_directory = _build_mail_directory_name(username) + try: + subprocess.check_output([ + SUDO_CMD, INSTALL_CMD, '-o', username, '-g', username, + '-m', '0750', '-d', mail_directory], stderr=subprocess.STDOUT) + except subprocess.CalledProcessError: + _logger.exception( + 'could not create mail base directory for user %s', username) + raise GVAFileException( + "could not create mail base directory for user %s" % username) + return mail_directory @shared_task def delete_file_mail_userdir(username): - pass + """ + This task recursively deletes the mail base directory for a user if it + does not exist yet. + + :param str username: the user name + :raises Exception: if the mail base directory of the user cannot be removed + :return: the removed directory name + :rtype: str + + """ + mail_directory = _build_mail_directory_name(username) + try: + subprocess.check_output([ + SUDO_CMD, RM_CMD, '-r', '-f', mail_directory], + stderr=subprocess.STDOUT) + except subprocess.CalledProcessError: + _logger.exception( + 'could not remove mail base directory of user %s', username) + raise GVAFileException( + "could not remove mail base directory of user %s" % username) + return mail_directory