예제 #1
0
    def delete(self, domains=None, keep_mailbox_days=0):
        if not domains:
            return (False, 'INVALID_DOMAIN_NAME')

        domains = [str(v).lower() for v in domains if iredutils.is_domain(v)]

        if not domains:
            return (True, )

        msg = {}
        for domain in domains:
            dn = ldaputils.convert_keyword_to_dn(web.safestr(domain), accountType='domain')
            if dn[0] is False:
                return dn

            # Log maildir path in SQL table.
            try:
                qr = self.conn.search_s(attrs.DN_BETWEEN_USER_AND_DOMAIN + dn,
                                        ldap.SCOPE_ONELEVEL,
                                        "(objectClass=mailUser)",
                                        ['mail', 'homeDirectory'])

                if keep_mailbox_days == 0:
                    keep_mailbox_days = 36500

                # Convert keep days to string
                _now_in_seconds = time.time()
                _days_in_seconds = _now_in_seconds + (keep_mailbox_days * 24 * 60 * 60)
                sql_keep_days = time.strftime('%Y-%m-%d', time.strptime(time.ctime(_days_in_seconds)))

                v = []
                for obj in qr:
                    deleted_mail = obj[1].get('mail')[0]
                    deleted_maildir = obj[1].get('homeDirectory', [''])[0]
                    v += [{'maildir': deleted_maildir,
                           'username': deleted_mail,
                           'domain': domain,
                           'admin': session.get('username'),
                           'delete_date': sql_keep_days}]

                if v:
                    web.admindb.multiple_insert('deleted_mailboxes', values=v)
            except:
                pass

            try:
                connUtils.delete_ldap_tree(dn=dn, conn=self.conn)
                web.logger(msg="Delete domain: %s." % (domain), domain=domain, event='delete',)
            except ldap.LDAPError, e:
                msg[domain] = str(e)
예제 #2
0
파일: admin.py 프로젝트: steedos/iredadmin
    def delete(self, mails):
        if mails is None or len(mails) == 0:
            return (False, 'NO_ACCOUNT_SELECTED')

        result = {}

        for mail in mails:
            self.mail = web.safestr(mail)
            dn = ldaputils.convert_keyword_to_dn(self.mail,
                                                 accountType='admin')
            if dn[0] is False:
                return dn

            try:
                connUtils.delete_ldap_tree(dn=dn, conn=self.conn)
                web.logger(
                    msg="Delete admin: %s." % (self.mail, ),
                    event='delete',
                )
            except ldap.NO_SUCH_OBJECT:
                # This is a mail user admin
                dn = ldaputils.convert_keyword_to_dn(self.mail,
                                                     accountType='user')
                try:
                    connutils = connUtils.Utils()
                    # Delete enabledService=domainadmin
                    connutils.addOrDelAttrValue(dn=dn,
                                                attr='enabledService',
                                                value='domainadmin',
                                                action='delete')

                    # Delete domainGlobalAdmin=yes
                    connutils.addOrDelAttrValue(dn=dn,
                                                attr='domainGlobalAdmin',
                                                value='yes',
                                                action='delete')
                    web.logger(msg="Delete admin: %s." % (self.mail),
                               event='delete')
                except Exception, e:
                    result[self.mail] = str(e)
            except ldap.LDAPError, e:
                result[self.mail] = str(e)
예제 #3
0
    def deleteSingleUser(self,
                         mail,
                         deleteFromGroups=True,
                         keep_mailbox_days=0):
        self.mail = web.safestr(mail)
        if not iredutils.is_email(self.mail):
            return (False, 'INVALID_MAIL')

        # Get domain name of this account.
        self.domain = self.mail.split('@')[-1]

        # Get dn of mail user and domain.
        self.dnUser = ldaputils.convert_keyword_to_dn(self.mail,
                                                      accountType='user')
        if self.dnUser[0] is False:
            return self.dnUser

        # Log maildir path in SQL table.
        try:
            qr_profile = self.profile(domain=self.domain, mail=self.mail)
            if qr_profile[0]:
                user_profile = qr_profile[1][0][1]
            else:
                return qr_profile

            if 'homeDirectory' in user_profile:
                maildir = user_profile.get('homeDirectory', [''])[0]
            else:
                storageBaseDirectory = user_profile.get(
                    'storageBaseDirectory', [''])[0]
                mailMessageStore = user_profile.get('mailMessageStore',
                                                    [''])[0]
                maildir = os.path.join(storageBaseDirectory, mailMessageStore)

            if keep_mailbox_days == 0:
                keep_mailbox_days = 36500

            # Convert keep days to string
            _now_in_seconds = time.time()
            _days_in_seconds = _now_in_seconds + (keep_mailbox_days * 24 * 60 *
                                                  60)
            sql_keep_days = time.strftime(
                '%Y-%m-%d', time.strptime(time.ctime(_days_in_seconds)))

            web.admindb.insert('deleted_mailboxes',
                               maildir=maildir,
                               username=self.mail,
                               domain=self.domain,
                               admin=session.get('username'),
                               delete_date=sql_keep_days)
        except:
            pass

        del maildir

        # Delete user object.
        try:
            # Delete object and its subtree.
            connUtils.delete_ldap_tree(dn=self.dnUser, conn=self.conn)

            if deleteFromGroups:
                self.deleteSingleUserFromGroups(self.mail)

            # Delete record from SQL database: real-time used quota.
            try:
                connUtils.deleteAccountFromUsedQuota([self.mail])
            except Exception as e:
                pass

            # Log delete action.
            web.logger(msg="Delete user: %s." % (self.mail),
                       domain=self.domain,
                       event='delete')
            return (True, )
        except ldap.LDAPError as e:
            return (False, ldaputils.getExceptionDesc(e))