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()
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
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)
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()
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)
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
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 == "*****@*****.**"
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
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
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
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