def get_user(self, name: str):
        """
        Get user by name.
        :param name:
        :return: user: User object
        """
        try:
            user_d = self.connector.get_user_by_name(name)
            user = User(user_d['name'], user_d['level'],
                        user_d['password_hash'])
            user._id = user_d['_id']

            return user
        except Exception as e:
            print('ExperimentController-get_user: {}'.format(str(e)),
                  file=sys.stderr)
            return None
    def authenticate(self, **kwargs):
        """
        Authenticate user.
        :param kwargs:
        :return: user: User object
        """
        name = kwargs.get('name')
        password = kwargs.get('password')

        if not name or not password:
            return None

        user = self.connector.get_user_by_name(name)

        if not user or not check_password_hash(user['password_hash'],
                                               password):
            return None

        u = User(user['name'], user['level'], user['password_hash'])
        u._id = user['_id']
        return u