def genMailboxPassword(session_id, login_id, owner_id): from ccs_contact import verifyLoginID """ Will generate a new password for a login """ session = getSessionE(session_id) #Check values verifyLoginID(session_id, login_id) verifyLoginID(session_id, owner_id) plain = createPassword(8) # Encrypt password salt = createSalt() passwd = crypt.crypt(plain, salt) sql = "UPDATE logins SET passwd=%s WHERE login_id=%s" session.execute(sql, (passwd, login_id)) updateShadowPassword(session, login_id, plain) # Raise an event if this is the customers login if int(login_id) == int(owner_id): triggerEvent(session_id, "customerModified", login_id=login_id) return plain
def editMailbox(session_id, details): """ Will edit an existing email account. If a password is supplied it will be used to update the logins table as well. """ session = getSessionE(session_id) #Check values verifyMailbox(details) # If not in a changeset, create one to group these commands together commit = 0 if session.changeset == 0: session.begin("Edited mailbox %s" % details["username"], '', 1) commit = 1 # create a password if "passwd" in details.keys() and len(details['passwd']) > 1: plain = details['passwd'] salt = createSalt() passwd = crypt.crypt(plain, salt) sql = "UPDATE logins SET passwd=%s WHERE login_id=%s" session.execute(sql, (passwd, details['login_id'])) updateShadowPassword(session, details['login_id'], passwd) try: details['quota'] = int(details['quota']) except ValueError or KeyError: details['quota'] = -1 try: if len(details['fwdto']) == 0: details['fwdto'] = -1 except ValueError or KeyError: details['fwdto'] = -1 # Update email account props = ['customer_id', 'quota', 'fwdto'] sql, values = buildUpdateFromDict("email_account", props, details, "login_id", details['login_id'], True) session.execute(sql,values) # If we started a changeset, commit it if commit == 1: session.commit() #Figure out whether it is tied to a broadband account sql = "SELECT count(login_id) FROM broadband_account WHERE login_id=%s" res2 = session.query(sql, (details['login_id'])) if int(res2[0][0]) == 1: triggerEvent(session_id, "customerModified", login_id=details['login_id']) return ""
def addMailbox(session_id, details): """ Will create the required logon, and email account required to make a new mailbox. If a password is supplied it will be used otherwise a random one will be generated and returned. """ session = getSessionE(session_id) #Check values verifyMailbox(details) # If not in a changeset, create one to group these commands together commit = 0 if session.changeset == 0: session.begin("Created new Mailbox %s" % details["username"], '', 1) commit = 1 # create a password if not provided if "passwd" in details.keys() and len(details['passwd']) > 1: plain = details['passwd'] else: plain = createPassword(8) # Encrypt password salt = createSalt() passwd = crypt.crypt(plain, salt) # Create login sql = "INSERT INTO logins(username, domain, passwd, enabled) VALUES(%s, " \ "%s, %s, %s)" session.execute(sql, (details['username'], details['domain'], passwd, 1)) # Get the login_id that was created for the user sql = "SELECT currval('logins_login_id_seq') AS login_id" details['login_id'] = session.query(sql, ())[0][0] updateShadowPassword(session, details['login_id'], plain) try: details['quota'] = int(details['quota']) except ValueError or KeyError: details['quota'] = -1 try: if len(details['fwdto']) == 0: details['fwdto'] = -1 except ValueError or KeyError: details['fwdto'] = -1 # Create email account props = ['login_id', 'customer_id', 'quota', 'fwdto'] sql, values = buildInsertFromDict("email_account", props, details, True) session.execute(sql,values) #sql = "INSERT INTO email_account(login_id, customer_id) VALUES (%s, %s)" #session.execute(sql, (login_id, customer_id)) # If we started a changeset, commit it if commit == 1: session.commit() if "passwd" in details.keys() and len(details['passwd']) > 1: return (details['login_id'], "") else: return (details['login_id'], plain)