def POST(self): i = web.input(domainName=[], _unicode=False,) domainName = i.get('domainName', None) action = i.get('action') domainLib = domainlib.Domain() if action == 'delete': keep_mailbox_days = form_utils.get_single_value(form=i, input_name='keep_mailbox_days', default_value=0, is_integer=True) result = domainLib.delete(domains=domainName, keep_mailbox_days=keep_mailbox_days) msg = 'DELETED' elif action == 'disable': result = domainLib.enableOrDisableAccount(accounts=domainName, active=False,) msg = 'DISABLED' elif action == 'enable': result = domainLib.enableOrDisableAccount(accounts=domainName, active=True,) msg = 'ENABLED' else: result = (False, 'INVALID_ACTION') msg = i.get('msg', None) if result[0] is True: raise web.seeother('/domains?msg=%s' % msg) else: raise web.seeother('/domains?msg=' + web.urlquote(result[1]))
def POST(self): i = web.input( domainName=[], _unicode=False, ) domainName = i.get('domainName', None) self.action = i.get('action') domainLib = domainlib.Domain() if self.action == 'delete': result = domainLib.delete(domains=domainName) msg = 'DELETED' elif self.action == 'disable': result = domainLib.enableOrDisableAccount( accounts=domainName, active=False, ) msg = 'DISABLED' elif self.action == 'enable': result = domainLib.enableOrDisableAccount( accounts=domainName, active=True, ) msg = 'ENABLED' else: result = (False, 'INVALID_ACTION') msg = i.get('msg', None) if result[0] is True: raise web.seeother('/domains?msg=%s' % msg) else: raise web.seeother('/domains?msg=' + web.urlquote(result[1]))
def GET(self, cur_page=1,): i = web.input() try: cur_page = int(cur_page) or 1 except: cur_page = 1 domainLib = domainlib.Domain() result = domainLib.listAccounts(cur_page=cur_page) if result[0] is True: allDomains = result[2] return web.render( 'pgsql/domain/list.html', cur_page=cur_page, total=result[1], allDomains=allDomains, msg=i.get('msg', None), ) else: return web.render( 'pgsql/domain/list.html', cur_page=cur_page, total=0, allDomains=[], msg=result[1], )
def POST(self, profile_type, domain): self.profile_type = str(profile_type) self.domain = str(domain) i = web.input( domainAliasName=[], domainAdmin=[], defaultList=[], ) domainLib = domainlib.Domain() result = domainLib.update( profile_type=self.profile_type, domain=self.domain, data=i, ) if result[0] is True: raise web.seeother('/profile/domain/%s/%s?msg=UPDATED' % (self.profile_type, self.domain)) else: raise web.seeother('/profile/domain/%s/%s?msg=%s' % ( self.profile_type, self.domain, web.urlquote(result[1]), ))
def POST(self): i = web.input() self.domain = web.safestr(i.get('domainName')).strip().lower() domainLib = domainlib.Domain() result = domainLib.add(data=i) if result[0] is True: raise web.seeother('/profile/domain/general/%s?msg=CREATED' % self.domain) else: raise web.seeother('/create/domain?msg=%s' % web.urlquote(result[1]))
def GET(self, profile_type, mail): i = web.input() self.mail = web.safestr(mail) self.profile_type = web.safestr(profile_type) if not iredutils.is_email(self.mail): raise web.seeother('/admins?msg=INVALID_MAIL') if session.get('domainGlobalAdmin' ) is not True and session.get('username') != self.mail: # Don't allow to view/update other admins' profile. raise web.seeother( '/profile/admin/general/%s?msg=PERMISSION_DENIED' % session.get('username')) adminLib = adminlib.Admin() result = adminLib.profile(mail=self.mail) if result[0] is True: domainGlobalAdmin, profile = result[1], result[2] # Get all domains. self.allDomains = [] domainLib = domainlib.Domain() resultOfAllDomains = domainLib.getAllDomains() if resultOfAllDomains[0] is True: self.allDomains = resultOfAllDomains[1] # Get managed domains. self.managedDomains = [] return web.render( 'pgsql/admin/profile.html', mail=self.mail, profile_type=self.profile_type, domainGlobalAdmin=domainGlobalAdmin, profile=profile, languagemaps=languages.get_language_maps(), allDomains=self.allDomains, min_passwd_length=settings.min_passwd_length, max_passwd_length=settings.max_passwd_length, msg=i.get('msg'), ) else: raise web.seeother('/admins?msg=' + web.urlquote(result[1]))
def GET(self, domain=None,): if domain is None: self.cur_domain = None else: self.cur_domain = str(domain) if not iredutils.is_domain(self.cur_domain): raise web.seeother('/domains?msg=INVALID_DOMAIN_NAME') i = web.input() # Get all managed domains. connutils = connUtils.Utils() qr = connutils.getManagedDomains(admin=session.get('username'), domainNameOnly=True,) if qr[0] is True: allDomains = qr[1] else: raise web.seeother('/domains?msg=' % web.urlquote(qr[1])) # Set first domain as current domain. if self.cur_domain is None: if len(allDomains) > 0: raise web.seeother('/create/user/%s' % str(allDomains[0])) else: raise web.seeother('/domains?msg=NO_DOMAIN_AVAILABLE') # Get domain profile. domainLib = domainlib.Domain() resultOfProfile = domainLib.profile(domain=self.cur_domain) if resultOfProfile[0] is True: self.profile = resultOfProfile[1] else: raise web.seeother('/domains?msg=%s' % web.urlquote(resultOfProfile[1])) return web.render( 'pgsql/user/create.html', cur_domain=self.cur_domain, allDomains=allDomains, profile=self.profile, min_passwd_length=settings.min_passwd_length, max_passwd_length=settings.max_passwd_length, msg=i.get('msg'), )
def GET(self, profile_type, domain): i = web.input() self.domain = web.safestr(domain.split('/', 1)[0]) self.profile_type = web.safestr(profile_type) if not iredutils.is_domain(self.domain): raise web.seeother('/domains?msg=EMPTY_DOMAIN') domainLib = domainlib.Domain() result = domainLib.profile(domain=self.domain) if result[0] is not True: raise web.seeother('/domains?msg=' + web.urlquote(result[1])) else: self.profile = result[1] return web.render( 'pgsql/domain/profile.html', cur_domain=self.domain, profile_type=self.profile_type, profile=self.profile, msg=i.get('msg'), )
def add(self, domain, data): # Get domain name, username, cn. self.domain = web.safestr(data.get('domainName')).strip().lower() mail_local_part = web.safestr(data.get('username')).strip().lower() self.mail = mail_local_part + '@' + self.domain if not iredutils.is_domain(self.domain): return (False, 'INVALID_DOMAIN_NAME') if self.domain != domain: return (False, 'PERMISSION_DENIED') if not iredutils.is_email(self.mail): return (False, 'INVALID_MAIL') # Check account existing. connutils = connUtils.Utils() if connutils.is_email_exists(mail=self.mail): return (False, 'ALREADY_EXISTS') # Get domain profile. domainLib = domainlib.Domain() resultOfDomainProfile = domainLib.profile(domain=self.domain) if resultOfDomainProfile[0] is True: domainProfile = resultOfDomainProfile[1] else: return resultOfDomainProfile # Check account limit. adminLib = adminlib.Admin() numberOfExistAccounts = adminLib.getNumberOfManagedAccounts(accountType='user', domains=[self.domain]) if domainProfile.mailboxes == -1: return (False, 'NOT_ALLOWED') elif domainProfile.mailboxes > 0: if domainProfile.mailboxes <= numberOfExistAccounts: return (False, 'EXCEEDED_DOMAIN_ACCOUNT_LIMIT') # Check spare quota and number of spare account limit. # Get quota from <form> mailQuota = str(data.get('mailQuota')).strip() if mailQuota.isdigit(): mailQuota = int(mailQuota) else: mailQuota = 0 # Re-calculate mail quota if this domain has limited max quota. if domainProfile.maxquota > 0: # Get used quota. qr = domainLib.getAllocatedQuotaSize(domain=self.domain) if qr[0] is True: allocatedQuota = qr[1] else: return qr spareQuota = domainProfile.maxquota - allocatedQuota if spareQuota > 0: if spareQuota < mailQuota: mailQuota = spareQuota else: # No enough quota. return (False, 'EXCEEDED_DOMAIN_QUOTA_SIZE') # # Get password from <form>. # newpw = web.safestr(data.get('newpw', '')) confirmpw = web.safestr(data.get('confirmpw', '')) resultOfPW = iredutils.verify_new_password( newpw, confirmpw, min_passwd_length=settings.min_passwd_length, max_passwd_length=settings.max_passwd_length, ) if resultOfPW[0] is True: pwscheme = None if 'storePasswordInPlainText' in data and settings.STORE_PASSWORD_IN_PLAIN_TEXT: pwscheme = 'PLAIN' passwd = iredutils.generate_password_hash(resultOfPW[1], pwscheme=pwscheme) else: return resultOfPW # Get display name from <form> cn = data.get('cn', '') # Get storage base directory. tmpStorageBaseDirectory = settings.storage_base_directory.lower() splitedSBD = tmpStorageBaseDirectory.rstrip('/').split('/') storageNode = splitedSBD.pop() storageBaseDirectory = '/'.join(splitedSBD) try: # Store new user in SQL db. self.conn.insert( 'mailbox', domain=self.domain, username=self.mail, password=passwd, name=cn, maildir=iredutils.generate_maildir_path(self.mail), quota=mailQuota, storagebasedirectory=storageBaseDirectory, storagenode=storageNode, created=iredutils.get_gmttime(), active='1', local_part=mail_local_part, ) # Create an alias account: address=goto. self.conn.insert( 'alias', address=self.mail, goto=self.mail, domain=self.domain, created=iredutils.get_gmttime(), active='1', ) web.logger(msg="Create user: %s." % (self.mail), domain=self.domain, event='create',) return (True,) except Exception, e: return (False, str(e))