예제 #1
0
def generate_test_admin():
    test_admin = models.Admins().from_json({
        'username': '******',
        'password': '******',
        'name': 'Test Admin'
    })
    return test_admin
예제 #2
0
def add_ldap_user_to_db(username, display_name):
    """ Adds an LDAP user stub in the Admins table of the database for flask_login
    """
    try:
        new_admin = models.Admins().ldap_user_from_json({
            'username': username,
            'name': display_name
        })
        db.session.add(new_admin)
        db.session.commit()
        json_logger('audit', username,
                    '"{0}" was added as an LDAP admin to the database"'.format(username))
    except ValidationError as e:
        raise e
    except Exception as e:
        db.session.rollback()
        json_logger(
            'error', username,
            'The following error occurred when adding an LDAP admin: {0}'.format(str(e)))
        ValidationError('A database error occurred. Please try again.', 'error')
    finally:
        db.session.close()
예제 #3
0
def initialize():
    try:
        db.session.remove()
        db.drop_all()
        db.create_all()
        add_default_configuration_settings()
        admin2 = models.Admins().from_json({
            'username': '******',
            'password': '******',
            'name': 'Some Admin'
        })
        enable_ldap_auth = models.Configs.query.filter_by(
            setting='Enable LDAP Authentication').first()
        enable_ldap_auth.value = 'True'
        ldap_server = models.Configs.query.filter_by(
            setting='AD Server LDAP String').first()
        ldap_server.value = 'LDAPS://postmaster.local:636'
        domain = models.Configs.query.filter_by(setting='AD Domain').first()
        domain.value = 'postmaster.local'
        ldap_admin_group = models.Configs.query.filter_by(
            setting='AD PostMaster Group').first()
        ldap_admin_group.value = 'PostMaster Admins'

        try:
            db.session.add(admin2)
            db.session.add(enable_ldap_auth)
            db.session.add(ldap_server)
            db.session.add(domain)
            db.session.add(ldap_admin_group)
            db.session.commit()
        except:
            return False

        domain = models.VirtualDomains().from_json({'name': 'postmaster.com'})
        domain2 = models.VirtualDomains().from_json({'name': 'postmaster.org'})

        try:
            db.session.add(domain)
            db.session.add(domain2)
            db.session.commit()
        except:
            return False

        emailUser = models.VirtualUsers().from_json({
            'email': '*****@*****.**',
            'password': '******'
        })
        emailUser2 = models.VirtualUsers().from_json({
            'email': '*****@*****.**',
            'password': '******'
        })
        emailUser3 = models.VirtualUsers().from_json({
            'email': '*****@*****.**',
            'password': '******'
        })

        try:
            db.session.add(emailUser)
            db.session.add(emailUser2)
            db.session.add(emailUser3)
            db.session.commit()
        except:
            return False

        alias = models.VirtualAliases().from_json({
            'domain_id':
            1,
            'source':
            '*****@*****.**',
            'destination':
            '*****@*****.**'
        })
        alias2 = models.VirtualAliases().from_json({
            'domain_id':
            1,
            'source':
            '*****@*****.**',
            'destination':
            '*****@*****.**'
        })
        alias3 = models.VirtualAliases().from_json({
            'domain_id':
            1,
            'source':
            '*****@*****.**',
            'destination':
            '*****@*****.**'
        })

        try:
            db.session.add(alias)
            db.session.add(alias2)
            db.session.add(alias3)
            db.session.commit()
        except:
            return False

        return True

    except Exception as e:
        print("Unexpected error: {0}".format(e.message))
        return False

    return False
예제 #4
0
def add_default_configuration_settings():
    """ Adds the default configuration settings to the database if they aren't present.
    This is to be used from manage.py when creating the database.
    """
    if not models.Configs.query.filter_by(setting='Minimum Password Length').first():
        min_pwd_length = models.Configs()
        min_pwd_length.setting = 'Minimum Password Length'
        min_pwd_length.value = '8'
        min_pwd_length.regex = '^([0-9]|[1][0-9]|[2][0-5])$'
        db.session.add(min_pwd_length)

    if not models.Configs.query.filter_by(setting='Account Lockout Threshold').first():
        account_lockout_threshold = models.Configs()
        account_lockout_threshold.setting = 'Account Lockout Threshold'
        account_lockout_threshold.value = '5'
        account_lockout_threshold.regex = '^([0-9]|[1][0-9]|[2][0-5])$'
        db.session.add(account_lockout_threshold)

    if not models.Configs.query.filter_by(setting='Account Lockout Duration in Minutes').first():
        account_lockout_duration = models.Configs()
        account_lockout_duration.setting = 'Account Lockout Duration in Minutes'
        account_lockout_duration.value = '30'
        account_lockout_duration.regex = '^([1-9]|[1-9][0-9])$'
        db.session.add(account_lockout_duration)

    if not models.Configs.query.filter_by(setting='Reset Account Lockout Counter in Minutes').first():
        reset_account_lockout = models.Configs()
        reset_account_lockout.setting = 'Reset Account Lockout Counter in Minutes'
        reset_account_lockout.value = '30'
        reset_account_lockout.regex = '^([1-9]|[1-9][0-9])$'
        db.session.add(reset_account_lockout)

    if not models.Configs.query.filter_by(setting='Login Auditing').first():
        login_auditing = models.Configs()
        login_auditing.setting = 'Login Auditing'
        login_auditing.value = 'False'
        login_auditing.regex = '^(True|False)$'
        db.session.add(login_auditing)

    if not models.Configs.query.filter_by(setting='Mail Database Auditing').first():
        mail_db_auditing = models.Configs()
        mail_db_auditing.setting = 'Mail Database Auditing'
        mail_db_auditing.value = 'False'
        mail_db_auditing.regex = '^(True|False)$'
        db.session.add(mail_db_auditing)

    if not models.Configs.query.filter_by(setting='Enable LDAP Authentication').first():
        ldap_auth = models.Configs()
        ldap_auth.setting = 'Enable LDAP Authentication'
        ldap_auth.value = 'False'
        ldap_auth.regex = '^(True|False)$'
        db.session.add(ldap_auth)

    if not models.Configs.query.filter_by(setting='AD Server LDAP String').first():
        ad_server = models.Configs()
        ad_server.setting = 'AD Server LDAP String'
        ad_server.regex = '^(.*)$'
        db.session.add(ad_server)

    if not models.Configs.query.filter_by(setting='AD Domain').first():
        ad_domain = models.Configs()
        ad_domain.setting = 'AD Domain'
        ad_domain.regex = '^(.*)$'
        db.session.add(ad_domain)

    if not models.Configs.query.filter_by(setting='AD PostMaster Group').first():
        ad_group = models.Configs()
        ad_group.setting = 'AD PostMaster Group'
        ad_group.regex = '^(.*)$'
        db.session.add(ad_group)

    if not models.Admins.query.first():
        admin = models.Admins().from_json(
            {'username': '******', 'password': '******', 'name': 'Default Admin'})
        db.session.add(admin)

    try:
        db.session.commit()
    except Exception:
        db.session.rollback()
예제 #5
0
def initialize():
    db.session.remove()
    db.drop_all()
    db.create_all()
    add_default_configuration_settings()

    admin2 = models.Admins().from_json({
        'username': '******',
        'password': '******',
        'name': 'Some Admin'
    })
    db.session.add(admin2)

    enable_ldap_auth = models.Configs.query.filter_by(
        setting='Enable LDAP Authentication').first()
    enable_ldap_auth.value = 'True'
    ldap_server = models.Configs.query.filter_by(
        setting='AD Server LDAP String').first()
    ldap_server.value = 'LDAPS://postmaster.local:636'
    domain = models.Configs.query.filter_by(setting='AD Domain').first()
    domain.value = 'postmaster.local'
    ldap_admin_group = models.Configs.query.filter_by(
        setting='AD PostMaster Group').first()
    ldap_admin_group.value = 'PostMaster Admins'
    ldap_auth_method = models.Configs.query.filter_by(
        setting='LDAP Authentication Method').first()
    # Use SIMPLE auth because ldap3 testing only allows this authentication
    # method
    ldap_auth_method.value = 'SIMPLE'
    db.session.add(enable_ldap_auth)
    db.session.add(ldap_server)
    db.session.add(domain)
    db.session.add(ldap_admin_group)
    db.session.add(ldap_auth_method)

    domain = models.VirtualDomains().from_json({'name': 'postmaster.com'})
    domain2 = models.VirtualDomains().from_json({'name': 'postmaster.org'})
    db.session.add(domain)
    db.session.add(domain2)

    email_user = models.VirtualUsers().from_json({
        'email': '*****@*****.**',
        'password': '******'
    })
    email_user2 = models.VirtualUsers().from_json({
        'email': '*****@*****.**',
        'password': '******'
    })
    email_user3 = models.VirtualUsers().from_json({
        'email': '*****@*****.**',
        'password': '******'
    })
    db.session.add(email_user)
    db.session.add(email_user2)
    db.session.add(email_user3)

    alias = models.VirtualAliases().from_json({
        'domain_id':
        1,
        'source':
        '*****@*****.**',
        'destination':
        '*****@*****.**'
    })
    alias2 = models.VirtualAliases().from_json({
        'domain_id':
        1,
        'source':
        '*****@*****.**',
        'destination':
        '*****@*****.**'
    })
    alias3 = models.VirtualAliases().from_json({
        'domain_id':
        1,
        'source':
        '*****@*****.**',
        'destination':
        '*****@*****.**'
    })
    db.session.add(alias)
    db.session.add(alias2)
    db.session.add(alias3)

    db.session.commit()