From a285133f751889be5744458b6227761f50a34217 Mon Sep 17 00:00:00 2001 From: Jan Dittberner Date: Sat, 27 Dec 2014 14:48:18 +0100 Subject: [PATCH] add new mailbox handling tasks --- docs/changelog.rst | 3 +++ gvafile/osusers/tasks.py | 54 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/docs/changelog.rst b/docs/changelog.rst index 2aff143..748cdca 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -1,6 +1,9 @@ Changelog ========= +* :feature:`-` add new mailbox handling tasks + :py:func:`osusers.tasks.create_file_mailbox` and + :py:func:`osusers.tasks.delete_file_mailbox` * :support:`-` move celery routers into gvacommon that is in it's own repository to be used by others (gva, gvaldap) * :bug:`-` sftp directories are now owned by root instead of user diff --git a/gvafile/osusers/tasks.py b/gvafile/osusers/tasks.py index cab899d..8e4ffb2 100644 --- a/gvafile/osusers/tasks.py +++ b/gvafile/osusers/tasks.py @@ -143,3 +143,57 @@ def delete_file_mail_userdir(username): raise GVAFileException( "could not remove mail base directory of user %s" % username) return mail_directory + + +@shared_task +def create_file_mailbox(username, mailboxname): + """ + This task creates a new mailbox directory for the given user and mailbox + name. + + :param str username: the user name + :param str mailboxname: the mailbox name + :raises GVAFileException: if the mailbox directory cannot be created + :return: the created mailbox directory name + :rtype: str + + """ + mailbox_directory = os.path.join( + _build_mail_directory_name(username), mailboxname) + try: + subprocess.check_output([ + SUDO_CMD, INSTALL_CMD, '-o', username, '-g', username, + '-m', '0700', '-d', mailbox_directory], stderr=subprocess.STDOUT) + except subprocess.CalledProcessError: + _logger.exception( + 'could not create mailbox %s for user %s', mailboxname, username) + raise GVAFileException( + "could not create mailbox %s for user %s" % (mailboxname, username) + ) + return mailbox_directory + + +@shared_task +def delete_file_mailbox(username, mailboxname): + """ + This task deletes the given mailbox of the given user. + + :param str username: the user name + :param str mailboxname: the mailbox name + :raises GVAFileException: if the mailbox directory cannot be deleted + :return: the deleted mailbox directory name + :rtype: str + + """ + mailbox_directory = os.path.join( + _build_mail_directory_name(username), mailboxname) + try: + subprocess.check_output([ + SUDO_CMD, RM_CMD, '-r', '-f', mailbox_directory], + stderr=subprocess.STDOUT) + except subprocess.CalledProcessError: + _logger.exception( + 'could not remove mailbox %s of user %s', mailboxname, username) + raise GVAFileException( + "could not remove mailbox %s of user %s" % (mailboxname, username)) + return mailbox_directory