Пример #1
0
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
Пример #2
0
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 ""
Пример #3
0
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)