def test_membership_validatepassword(self):
        """
        Tests the password validation logic.
        """
        store = MembershipStore()
        provider = MembershipProvider({ "store": store })

        password_one = "1568.Kop$2"
        password_two = "1568.asdas"

        valid, error = provider.validate_password(password_one, password_two)
        assert valid == False

        password_one = "easy" # too easy
        password_two = "easy"
        valid, error = provider.validate_password(password_one, password_two)
        assert valid == False and error == "password too weak"

        password_one = "1568.Kop$2"
        password_two = "1568.Kop$2"

        valid, error = provider.validate_password(password_one, password_two)
        assert valid == True
def register_membership(app):
    """
     Initialize an application global membership provider.
     NB:
     an alternative, if needed, is to initialize a membership provider for each logical area (e.g. admin, public, etc.);
     which allows to use different database structures to store accounts and sessions for different parts of
     the application and to have different, parallel authentication mechanisms.
     This template includes a global membership provider, because it is a simpler model that suffices in most cases.
    """
    DAL_PROJECT = app.config["DAL_PROJECT"]
    # initialize an application membership provider
    # NB: an alternative, if needed, is to initialize a membership provider for each area (e.g. admin and public areas)
    membership_store = None
    if DAL_PROJECT == "dalmongo":
        from dalmongo.membership.membershipstore import MembershipStore
        membership_store = MembershipStore()
    else:
        raise Exception("MembershipStore for `{}` implemented".format(DAL_PROJECT))

    # instantiate the membership provider
    provider = MembershipProvider({ "store": membership_store })

    # attach to the application
    setattr(app, "membership", provider)
    def test_membership_create_session(self):
        """
        Tests the membership create session functions.
        """
        store = MembershipStore()
        provider = MembershipProvider({ "store": store })

        success, error = provider.try_login("*****@*****.**", "1568.Kop$2", False, "no-ip", {
            "user_agent": "Flask-Three Template Test"
        })
        assert success == False and error == "AccountNotFound"

        # create account
        userkey = "*****@*****.**"
        password = "******"

        # delete the account (may be there due to previous failed test)
        provider.delete_account(userkey)

        success, result = provider.create_account(userkey, password)

        # the first time, it should work
        assert success == True

        # get account data
        account = store.get_account(userkey)
        assert account is not None

        # try to create again the same account, this time it shouldn't work
        success, result = provider.create_account(userkey, "1568.Kop$2")
        assert success == False and result == "AccountAlreadyExisting"

        # try to create a session for this account
        login_success, data = provider.try_login(userkey, password, False, "no-ip", {
            "user_agent": "Flask-Three Template Test"
        })

        assert login_success == True
        principal = data["principal"]
        session = data["session"]

        # now delete the account
        provider.delete_account(userkey)

        account = provider.get_account(userkey)
        assert account is None