Exemplo n.º 1
0
 def test_add_duplicate_user_will_fail(self):
     u1 = User("*****@*****.**", "user")
     db.session.add(u1)
     u2 = User("*****@*****.**", "user")
     db.session.add(u2)
     with self.assertRaises(Exception):
         db.session.commit()
Exemplo n.º 2
0
 def test_email_unification(self):
     u1 = User("*****@*****.**", "user")
     u2 = User("*****@*****.**", "user")
     db.session.add(u1)
     db.session.add(u2)
     x1 = User.query.filter_by(email="*****@*****.**").first()
     x2 = User.query.filter_by(email="*****@*****.**").first()
     assert u1 == x1
     assert u1.email == x1.email
     assert u2 == x2
     assert u2.email == x2.email
Exemplo n.º 3
0
    def setUp(self):
        db.create_all()
        u = User("*****@*****.**", "user", is_admin=False)
        self.known_user = u

        db.session.add(u)

        g = Group('Group1')
        self.known_group = g
        db.session.add(g)

        p1 = Plugin()
        p1.name = "TestPlugin"
        self.known_plugin_id = p1.id
        db.session.add(p1)

        t1 = BlueprintTemplate()
        t1.name = 'EnabledTestTemplate'
        t1.plugin = p1.id
        t1.is_enabled = True
        t1.allowed_attrs = ['cost_multiplier']
        db.session.add(t1)
        self.known_template_id = t1.id

        b1 = Blueprint()
        b1.name = "TestBlueprint"
        b1.template_id = t1.id
        b1.group_id = g.id
        # b1.cost_multiplier = 1.5
        b1.config = {'cost_multiplier': '1.5'}
        self.known_blueprint = b1
        db.session.add(b1)

        db.session.commit()
Exemplo n.º 4
0
def invite_user(email, password=None, is_admin=False):
    email_regex = r"(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)"
    if not re.match(email_regex, email):
        raise RuntimeError("Incorrect email")
    user = User.query.filter_by(email=email).first()
    if user:
        logging.warn("user %s already exists" % email)
        return None

    user = User(email, password, is_admin)
    db.session.add(user)
    db.session.commit()

    token = ActivationToken(user)
    db.session.add(token)
    db.session.commit()

    if not app.dynamic_config['SKIP_TASK_QUEUE'] and not app.dynamic_config[
            'MAIL_SUPPRESS_SEND']:
        send_mails.delay([(user.email, token.token, user.is_active)])
    else:
        logging.warn(
            "email sending suppressed in config: SKIP_TASK_QUEUE:%s MAIL_SUPPRESS_SEND:%s"
            % (app.dynamic_config['SKIP_TASK_QUEUE'],
               app.dynamic_config['MAIL_SUPPRESS_SEND']))
        activation_url = '%s/#/activate/%s' % (app.config['BASE_URL'],
                                               token.token)
        content = render_template('invitation.txt',
                                  activation_link=activation_url)
        logging.warn(content)

    return user
Exemplo n.º 5
0
def invite_user(email, password=None, is_admin=False):
    user = User.query.filter_by(email=email).first()
    if user:
        logging.warn("user %s already exists" % email)
        return None

    user = User(email, password, is_admin)
    db.session.add(user)
    db.session.commit()

    token = ActivationToken(user)
    db.session.add(token)
    db.session.commit()

    if not app.dynamic_config['SKIP_TASK_QUEUE'] and not app.dynamic_config[
            'MAIL_SUPPRESS_SEND']:
        send_mails.delay([(user.email, token.token)])
    else:
        logging.warn(
            "email sending suppressed in config: SKIP_TASK_QUEUE:%s MAIL_SUPPRESS_SEND:%s"
            % (app.dynamic_config['SKIP_TASK_QUEUE'],
               app.dynamic_config['MAIL_SUPPRESS_SEND']))
        activation_url = '%s/#/activate/%s' % (app.config['BASE_URL'],
                                               token.token)
        content = render_template('invitation.txt',
                                  activation_link=activation_url)
        logging.warn(content)

    return user
Exemplo n.º 6
0
def verify_password(userid_or_token, password):
    g.user = User.verify_auth_token(userid_or_token, app.config['SECRET_KEY'])
    if not g.user:
        g.user = User.query.filter_by(email=userid_or_token).first()
        if not g.user:
            return False
        if not g.user.check_password(password):
            return False
    return True
Exemplo n.º 7
0
def create_user(email, password, is_admin=False):
    if User.query.filter_by(email=email).first():
        logging.info("user %s already exists" % email)
        return None

    user = User(email, password, is_admin=is_admin)
    if not is_admin:
        add_user_to_default_group(user)
    db.session.add(user)
    db.session.commit()
    return user
Exemplo n.º 8
0
def primary_test_setup(namespace):
    """ Setup taken from FlaskApiTestCase to re-use it elsewhere as well.

        db.create_all is left to the caller.

        namespace is a descendant of unittest.testcase and we store things to
        it for easy access during tests.

        ToDo: store test vars inside a namespace on the parent object, e.g.
        namespace.vars to avoid cluttering.
    """
    namespace.known_admin_email = "*****@*****.**"
    namespace.known_admin_password = "******"
    namespace.known_user_email = "*****@*****.**"
    namespace.known_user_password = "******"

    u1 = User(namespace.known_admin_email, namespace.known_admin_password, is_admin=True)
    u2 = User(namespace.known_user_email, namespace.known_user_password, is_admin=False)
    u3 = User("*****@*****.**", "group_owner")
    u4 = User("*****@*****.**", "group_owner2")

    # Fix user IDs to be the same for all tests, in order to reuse the same token
    # for multiple tests
    u1.id = 'u1'
    u2.id = 'u2'
    namespace.known_admin_id = u1.id
    namespace.known_admin_id = u1.id
    namespace.known_user_id = u2.id
    u3.id = 'u3'
    u3.is_group_owner = True
    u4.id = 'u4'
    u4.is_group_owner = True

    namespace.known_admin_id = u1.id
    namespace.known_user_id = u2.id
    namespace.known_group_owner_id = u3.id
    namespace.known_group_owner_id_2 = u4.id

    db.session.add(u1)
    db.session.add(u2)
    db.session.add(u3)
    db.session.add(u4)

    g1 = Group('Group1')
    g2 = Group('Group2')
    g3 = Group('Group3')
    g4 = Group('Group4')
    g5 = Group('System.default')

    g1.id = 'g1'
    g1u2 = GroupUserAssociation(user=u2)
    g1u3 = GroupUserAssociation(user=u3, manager=True, owner=True)
    g1u4 = GroupUserAssociation(user=u4, manager=True)
    g1.users.append(g1u2)
    g1.users.append(g1u3)
    g1.users.append(g1u4)
    g2.id = 'g2'
    g2u3 = GroupUserAssociation(user=u3)
    g2u4 = GroupUserAssociation(user=u4, owner=True)
    g2.users.append(g2u3)
    g2.users.append(g2u4)
    g3.id = 'g3'
    g3u4 = GroupUserAssociation(user=u4, owner=True)
    g3.users.append(g3u4)
    g3.banned_users.append(u2)
    g3.banned_users.append(u3)
    g4.id = 'g4'
    g4u1 = GroupUserAssociation(user=u1, owner=True)
    g4.users.append(g4u1)
    g5.id = 'g5'
    g5u1 = GroupUserAssociation(user=u1, owner=True)
    g5.users.append(g5u1)

    namespace.known_group_id = g1.id
    namespace.known_group_id_2 = g2.id
    namespace.known_group_id_3 = g3.id
    namespace.known_banned_group_join_id = g3.join_code
    namespace.known_group_join_id = g4.join_code
    namespace.system_default_group_id = g5.id
    db.session.add(g1)
    db.session.add(g2)
    db.session.add(g3)
    db.session.add(g4)
    db.session.add(g5)
    db.session.commit()

    p1 = Plugin()
    p1.name = "TestPlugin"
    p1.schema = {
        "type": "object",
        "title": "Comment",
        "description": "Description",
        "properties": {
            "name": {
                "type": "string"
            },
            "description": {
                "type": "string"
            },
            "maximum_lifetime": {
                "type": "string"
            }
        }
    }
    namespace.known_plugin_id = p1.id
    db.session.add(p1)

    t1 = BlueprintTemplate()
    t1.name = 'TestTemplate'
    t1.plugin = p1.id
    db.session.add(t1)
    namespace.known_template_id_disabled = t1.id

    t2 = BlueprintTemplate()
    t2.name = 'EnabledTestTemplate'
    t2.plugin = p1.id
    t2.config = {
        'cost_multiplier': '1.0',
        'maximum_lifetime': '1h',
        'memory_limit': '512m',
        'allow_update_client_connectivity': False
    }
    t2.allowed_attrs = [
        'maximum_lifetime',
        'cost_multiplier',
        'preallocated_credits',
        'allow_update_client_connectivity'
    ]
    t2.is_enabled = True
    db.session.add(t2)
    namespace.known_template_id = t2.id

    b1 = Blueprint()
    b1.name = "TestBlueprint"
    b1.template_id = t2.id
    b1.group_id = g1.id
    db.session.add(b1)
    namespace.known_blueprint_id_disabled = b1.id

    b2 = Blueprint()
    b2.name = "EnabledTestBlueprint"
    b2.template_id = t2.id
    b2.group_id = g1.id
    b2.is_enabled = True
    db.session.add(b2)
    namespace.known_blueprint_id = b2.id

    b3 = Blueprint()
    b3.name = "EnabledTestBlueprintClientIp"
    b3.template_id = t2.id
    b3.group_id = g1.id
    b3.is_enabled = True
    b3.config = {'allow_update_client_connectivity': True}
    db.session.add(b3)
    namespace.known_blueprint_id_2 = b3.id

    b4 = Blueprint()
    b4.name = "EnabledTestBlueprintOtherGroup"
    b4.template_id = t2.id
    b4.group_id = g2.id
    b4.is_enabled = True
    db.session.add(b4)
    namespace.known_blueprint_id_g2 = b4.id

    b5 = Blueprint()
    b5.name = "DisabledTestBlueprintOtherGroup"
    b5.template_id = t2.id
    b5.group_id = g2.id
    db.session.add(b5)
    namespace.known_blueprint_id_disabled_2 = b5.id

    n1 = Notification()
    n1.subject = "First notification"
    n1.message = "First notification message"
    namespace.known_notification_id = n1.id
    db.session.add(n1)

    n2 = Notification()
    n2.subject = "Second notification"
    n2.message = "Second notification message"
    namespace.known_notification2_id = n2.id
    db.session.add(n2)
    db.session.commit()

    i1 = Instance(
        Blueprint.query.filter_by(id=b2.id).first(),
        User.query.filter_by(email="*****@*****.**").first())
    db.session.add(i1)
    namespace.known_instance_id = i1.id

    i2 = Instance(
        Blueprint.query.filter_by(id=b3.id).first(),
        User.query.filter_by(email="*****@*****.**").first())
    db.session.add(i2)
    namespace.known_instance_id_2 = i2.id

    i3 = Instance(
        Blueprint.query.filter_by(id=b3.id).first(),
        User.query.filter_by(email="*****@*****.**").first())
    db.session.add(i3)
    i3.state = Instance.STATE_DELETED

    i4 = Instance(
        Blueprint.query.filter_by(id=b3.id).first(),
        User.query.filter_by(email="*****@*****.**").first())
    db.session.add(i4)

    i5 = Instance(
        Blueprint.query.filter_by(id=b4.id).first(),
        User.query.filter_by(email="*****@*****.**").first())
    db.session.add(i5)
    db.session.commit()