Example #1
0
    def initialize_object(self, form, appstruct, obj: User):
        password = appstruct.pop("password")
        form.schema.objectify(appstruct, obj)
        hasher = self.request.registry.getUtility(IPasswordHasher)
        obj.hashed_password = hasher.hash_password(password)

        # Users created through admin are useable right away, so activate the user
        obj.activated_at = now()
Example #2
0
    def initialize_object(self, form, appstruct, obj: User):
        password = appstruct.pop("password")
        form.schema.objectify(appstruct, obj)
        hasher = self.request.registry.getUtility(IPasswordHasher)
        obj.hashed_password = hasher.hash_password(password)

        # Users created through admin are useable right away, so activate the user
        obj.activated_at = now()
Example #3
0
def create_user(dbsession: Session,
                registry: Registry,
                email: str = EMAIL,
                password: str = PASSWORD,
                admin: bool = False) -> User:
    """A helper function to create normal and admin users for tests.

    :param admin: If True run :py:class:`websauna.system.user.usermixin.SiteCreator` login and set the user to admin group.
    """

    user = User(email=email)

    if password:
        hasher = registry.getUtility(IPasswordHasher)
        user.hashed_password = hasher.hash_password(password)

    user.user_registration_source = "dummy"
    dbsession.add(user)
    dbsession.flush()
    user.username = user.generate_username()
    user.activated_at = now()

    assert user.can_login()

    # First user, make it admin
    if admin:
        site_creator = get_site_creator(registry)
        site_creator.init_empty_site(dbsession, user)

    return user
Example #4
0
def demo_user(request, dbsession):
    """Create a database object asyncronously manipulated."""

    with transaction.manager:
        # Do a dummy database write
        u = User(username="******", email="*****@*****.**")
        dbsession.add(u)
Example #5
0
def test_virgin_init_admin(init, dbsession):
    """When the user logs in first time see we create admin group and permissions for it."""

    with transaction.manager:
        u = User(username="******", email="*****@*****.**")
        dbsession.add(u)
        dbsession.flush()
        assert not u.is_admin()

        site_creator = get_site_creator(init.config.registry)
        site_creator.init_empty_site(dbsession, u)

    with transaction.manager:
        u = dbsession.query(User).get(1)
        assert dbsession.query(Group).count() == 1
        assert u.is_admin()
Example #6
0
def new_user(dbsession, new_group):
    """Create a new user and return it for testing."""
    with transaction.manager:
        u = User(email='*****@*****.**')
        u.groups.append(new_group)
        dbsession.add(u)
        dbsession.flush()
    return dbsession.query(User).get(1)
Example #7
0
def create_user(dbsession:Session, registry:Registry, email:str=EMAIL, password:str=PASSWORD, admin:bool=False) -> User:
    """A helper function to create normal and admin users for tests.

    :param admin: If True run :py:class:`websauna.system.user.usermixin.SiteCreator` login and set the user to admin group.
    """

    user = User(email=email)

    if password:
        hasher = registry.getUtility(IPasswordHasher)
        user.hashed_password = hasher.hash_password(password)

    user.user_registration_source = "dummy"
    dbsession.add(user)
    dbsession.flush()
    user.username = user.generate_username()
    user.activated_at = now()

    assert user.can_login()

    # First user, make it admin
    if admin:
        site_creator = get_site_creator(registry)
        site_creator.init_empty_site(dbsession, user)

    return user
Example #8
0
def test_user_subsystem(init, dbsession):
    """Load the default user models and see we create correponding tables right."""

    with transaction.manager:
        u = User(email="*****@*****.**")
        dbsession.add(u)

    with transaction.manager:
        u = dbsession.query(User).get(1)
        assert u.email == "*****@*****.**"
Example #9
0
def get_or_create_email_user(request: Request, email: str) -> User:
    """Fetch existing user or create new based on email."""
    dbsession = request.dbsession

    u = dbsession.query(User).filter_by(email=email).first()
    if u is not None:
        u.first_login = False
        return u

    u = User(email=email)
    u.registration_source = "email"
    u.activated_at = now()
    u.first_login = True

    dbsession.add(u)
    dbsession.flush()

    request.registry.notify(UserCreated(request, u))
    return u
Example #10
0
def create_user(dbsession: Session,
                registry: Registry,
                email: str = EMAIL,
                password: str = PASSWORD,
                admin: bool = False) -> User:
    """A helper function to create normal and admin users for tests.

    Example:

    .. code-block:: python

        import transaction
        from websauna.tests.utils import create_user


        def test_some_stuff(dbsession, registry):

            with transaction.manager:
                u = create_user(registry)
                # Do stuff with new user



    :param email: User's email address. If inot given use unit testing default.

    :param password: Password as plain text. If not given use unit testing default.

    :param admin: If True run :py:class:`websauna.system.user.usermixin.SiteCreator` login and set the user to admin group.
    """

    user = User(email=email)

    if password:
        hasher = registry.getUtility(IPasswordHasher)
        user.hashed_password = hasher.hash_password(password)

    user.user_registration_source = "dummy"
    dbsession.add(user)
    dbsession.flush()
    user.username = user.generate_username()
    user.activated_at = now()

    assert user.can_login()

    # First user, make it admin
    if admin:
        site_creator = get_site_creator(registry)
        site_creator.init_empty_site(dbsession, user)

    return user
Example #11
0
def create_user(dbsession: Session, registry: Registry, email: str=EMAIL, password: str=PASSWORD, admin: bool=False) -> User:
    """A helper function to create normal and admin users for tests.

    Example:

    .. code-block:: python

        import transaction
        from websauna.tests.utils import create_user


        def test_some_stuff(dbsession, registry):

            with transaction.manager:
                u = create_user(registry)
                # Do stuff with new user



    :param email: User's email address. If inot given use unit testing default.

    :param password: Password as plain text. If not given use unit testing default.

    :param admin: If True run :py:class:`websauna.system.user.usermixin.SiteCreator` login and set the user to admin group.
    """

    user = User(email=email)

    if password:
        hasher = registry.getUtility(IPasswordHasher)
        user.hashed_password = hasher.hash_password(password)

    user.user_registration_source = "dummy"
    dbsession.add(user)
    dbsession.flush()
    user.username = user.generate_username()
    user.activated_at = now()

    assert user.can_login()

    # First user, make it admin
    if admin:
        site_creator = get_site_creator(registry)
        site_creator.init_empty_site(dbsession, user)

    return user
Example #12
0
def import_subscriber(mailgun: Mailgun, address: str, user: User, upsert=True) -> bool:
    """Add one subscriber to the mailing list.

    :return: True if user was fresh and imported
    """

    # Track import status in user_data JSON, so we don't do double requests if the user has already been subscribed once
    mailing_list_subscribes = user.user_data.get("mailing_list_subscribes", [])

    if address not in mailing_list_subscribes:

        # Some sanity logic to filter out emails that are legit in some services, unlegit in Mailgun
        first_part, second_part = address.split("@")
        if first_part.startswith(".") or first_part.endswith("."):
            logger.info("Bad email address: %s", address)
            return False

        logger.info("Subscribing %s to %s", user.email, address)

        # Don't set subscribed field, so that we don't accidentally update unsubscribed users
        data = {
            "address": user.email,
            "name": user.friendly_name,
            "upsert": upsert and "yes" or "no",
        }

        try:
            mailgun.update_subscription(address, data)
        except Exception as e:
            logger.error("Failed to subscribe email %s: %s", user.email, e)
            return False

        mailing_list_subscribes.append(address)

        user.user_data["mailing_list_subscribes"] = mailing_list_subscribes
        return True
    return False