コード例 #1
0
    def test_new_id(self):
        for _ in range(100):
            id1 = new_id()
            id2 = new_id()

            self.assertNotEqual(id1, id2)
            self.assertIsNotNone(id1)
            self.assertIsNotNone(id2)
コード例 #2
0
def handler(event, context):
    user_id = new_id()

    while db.table('user').where({'id': user_id}).first():
        user_id = new_id()

    try:
        body = json.loads(event.get('body'))
    except:
        body = {}

    props = body.get('props') or {}
    verbose = body.get('verbose')
    unique_props = {k: v for k, v in props.items() if k in UNIQUE_KEYS}
    custom_props = {k: v for k, v in props.items() if k not in unique_props}

    if 'password' in custom_props:
        custom_props['password'] = password(custom_props['password'])

    try:
        set_props(user_id, props=unique_props, unique=True)
        set_props(user_id, props=custom_props)
        db.table('user').insert(id=user_id)
    except Exception as e:
        return abort(400, parse_sql_error(e))

    return {
        'body':
        dumps({
            'data':
            get(
                user_id,
                keys=props.keys(),
                verbose=verbose,
                is_me=True,
            )
        }),
        'headers': {
            'Access-Control-Allow-Origin': '*'
        },
        'statusCode':
        201,
    }
コード例 #3
0
    def test_exists(self):
        set_props(new_id(), props={'username': '******'}, unique=True)

        event = {'body': json.dumps({'props': {'username': '******'}})}
        res = handler(event, None)

        body = json.loads(res['body'])

        self.assertEqual(res['statusCode'], 200)
        self.assertTrue(body['data']['username']['exists'])
        self.assertEqual(body['data']['username']['value'], 'riverleo')
コード例 #4
0
    def test_me_by_jwt(self):
        user_id = new_id()
        db.table('user').insert(id=user_id)
        set_props(user_id, props={'key': 'value'})
        encoded = jwt_encode(user_id)

        res = handler({
            'body': json.dumps({'props': ['key', 'anonymous']}),
            'headers': {'Authorization': 'Bearer {}'.format(encoded)},
        }, None)

        body = json.loads(res['body'])

        self.assertEqual(res['statusCode'], 200)
        self.assertEqual(body['data']['id'], user_id)
        self.assertEqual(body['data']['roles'], [])
        self.assertEqual(body['data']['props']['key'], 'value')
        self.assertIsNone(body['data']['props']['anonymous'])
コード例 #5
0
    def test_put_nonexistant(self):
        res = handler(
            {
                'headers': {
                    'Authorization': jwt_encode(new_id()),
                },
                'body':
                json.dumps({
                    'props': {
                        'username': '******',
                        'password': '******',
                    },
                }),
            }, None)

        body = json.loads(res['body'])

        self.assertIsNotNone(body['error'])
コード例 #6
0
    def test_get(self):
        user_id = new_id()
        db.table('user').insert(id=user_id)
        set_props(user_id, props={'key': 'value'})

        res = handler({
            'queryStringParameters': {
                'props': 'key,anonymous'
            },
        }, None)

        body = json.loads(res['body'])

        self.assertEqual(res['statusCode'], 200)
        self.assertEqual(body['data'][0]['id'], user_id)
        self.assertEqual(body['data'][0]['roles'], [])
        self.assertEqual(body['data'][0]['props']['key'], 'value')
        self.assertIsNone(body['data'][0]['props']['anonymous'])
コード例 #7
0
    def test_me_by_email_and_password(self):
        user_id = new_id()
        db.table('user').insert(id=user_id)
        set_props(user_id, props={
            'key': 'value',
            'email': '*****@*****.**',
            'password': password('password'),
        }, unique=True)

        res = handler({
            'body': json.dumps({
                'email': '*****@*****.**',
                'password': '******',
                'props': ['key', 'anonymous'],
            }),
        }, None)

        body = json.loads(res['body'])

        self.assertEqual(res['statusCode'], 200)
        self.assertEqual(body['data']['id'], user_id)
        self.assertIsNotNone(body['data']['ssid'])
        self.assertEqual(body['data']['props']['key'], 'value')
        self.assertIsNone(body['data']['props']['anonymous'])

        res = handler({
            'queryStringParameters': {
                'email': '*****@*****.**',
                'password': '******',
                'props': 'key,anonymous',
            },
        }, None)

        body = json.loads(res['body'])

        self.assertEqual(res['statusCode'], 200)
        self.assertEqual(body['data']['id'], user_id)
        self.assertIsNotNone(body['data']['ssid'])
        self.assertEqual(body['data']['props']['key'], 'value')
        self.assertIsNone(body['data']['props']['anonymous'])
コード例 #8
0
def set_connection(provider, provider_id, access_token, referer, props={}):
    connection = (
        db.table('userConnection')
        .where({
            'provider': provider,
            'providerId': provider_id,
        }).first()
    )

    if connection:
        created = False
        user_id = connection.get('userId')
        (
            db.table('userConnection')
            .where('providerId', provider_id)
            .update({'token': access_token})
        )
    else:
        created = True
        user_id = new_id()

        conn_id = db.table('userConnection').insert_get_id({
            'userId': user_id,
            'provider': provider,
            'providerId': provider_id,
            'token': access_token,
        })

        db.table('user').insert(id=user_id)
        set_props(user_id, props=props)

        connection = db.table('userConnection').where('id', conn_id).first()

    location = assign_query_params(referer, {
        'ssid': jwt_encode(connection.get('userId')),
        'created': int(created),
    })

    return connection, location
コード例 #9
0
    def test_put(self):
        user_id = new_id()
        db.table('user').insert(id=user_id)

        res = handler(
            {
                'headers': {
                    'Authorization': jwt_encode(user_id),
                },
                'body':
                json.dumps({
                    'props': {
                        'username': '******',
                        'password': '******',
                    },
                }),
            }, None)

        body = json.loads(res['body'])

        self.assertIsNotNone(body['data']['id'])
        self.assertEqual(body['data']['props']['username'], 'riverleo')
        self.assertFalse('password' in body['data']['props'])