Пример #1
0
    def register(request):
        register_serializer = RegisterSerializer(data=request.data)
        register_serializer.is_valid(raise_exception=True)
        data = register_serializer.data

        action_code_settings = auth.ActionCodeSettings(
            url='https://buildevents.today/#login', )
        try:
            user = auth.create_user(email=data['email'],
                                    phone_number=data['phone_number'],
                                    display_name=data['name'],
                                    password=data['password'])
            link = auth.generate_email_verification_link(
                user.email, action_code_settings)
            email_success = AuthViewSet.send_verification_email(
                user.email, link)
            if not email_success:
                return Response(
                    {
                        'detail':
                        'Something went wrong, we are unable to send a verification link to your '
                        'email'
                    },
                    status=status.HTTP_503_SERVICE_UNAVAILABLE)
            else:
                return Response(
                    "Verification link has been sent to {}.".format(
                        user.email),
                    status=status.HTTP_200_OK)
        except (ValueError, exceptions.FirebaseError) as e:
            return Response({'detail': str(e)},
                            status=status.HTTP_400_BAD_REQUEST)
Пример #2
0
def test_email_verification_with_settings(new_user_email_unverified, api_key):
    action_code_settings = auth.ActionCodeSettings(ACTION_LINK_CONTINUE_URL)
    link = auth.generate_email_verification_link(new_user_email_unverified.email,
                                                 action_code_settings=action_code_settings)
    assert isinstance(link, str)
    query_dict = _extract_link_params(link)
    assert query_dict['continueUrl'] == ACTION_LINK_CONTINUE_URL
    user_email = _verify_email(query_dict['oobCode'], api_key)
    assert new_user_email_unverified.email == user_email
    assert auth.get_user(new_user_email_unverified.uid).email_verified
Пример #3
0
def test_email_sign_in_with_settings(new_user_email_unverified, api_key):
    action_code_settings = auth.ActionCodeSettings(ACTION_LINK_CONTINUE_URL)
    link = auth.generate_sign_in_with_email_link(new_user_email_unverified.email,
                                                 action_code_settings=action_code_settings)
    assert isinstance(link, str)
    query_dict = _extract_link_params(link)
    assert query_dict['continueUrl'] == ACTION_LINK_CONTINUE_URL
    oob_code = query_dict['oobCode']
    id_token = _sign_in_with_email_link(new_user_email_unverified.email, oob_code, api_key)
    assert id_token is not None and len(id_token) > 0
    assert auth.get_user(new_user_email_unverified.uid).email_verified
Пример #4
0
def test_password_reset_with_settings(new_user_email_unverified, api_key):
    action_code_settings = auth.ActionCodeSettings(ACTION_LINK_CONTINUE_URL)
    link = auth.generate_password_reset_link(new_user_email_unverified.email,
                                             action_code_settings=action_code_settings)
    assert isinstance(link, str)
    query_dict = _extract_link_params(link)
    assert query_dict['continueUrl'] == ACTION_LINK_CONTINUE_URL
    user_email = _reset_password(query_dict['oobCode'], 'newPassword', api_key)
    assert new_user_email_unverified.email == user_email
    # password reset also set email_verified to True
    assert auth.get_user(new_user_email_unverified.uid).email_verified
Пример #5
0
def init_action_code_settings():
    # [START init_action_code_settings]
    action_code_settings = auth.ActionCodeSettings(
        url='https://www.example.com/checkout?cartId=1234',
        handle_code_in_app=True,
        ios_bundle_id='com.example.ios',
        android_package_name='com.example.android',
        android_install_app=True,
        android_minimum_version='12',
        dynamic_link_domain='coolapp.page.link',
    )
    # [END init_action_code_settings]
    return action_code_settings
Пример #6
0
    def test_generate_sign_in_with_email_link(self, tenant_mgt_app):
        client = tenant_mgt.auth_for_tenant('tenant-id', app=tenant_mgt_app)
        recorder = _instrument_user_mgt(client, 200,
                                        '{"oobLink":"https://testlink"}')
        settings = auth.ActionCodeSettings(url='http://localhost')

        link = client.generate_sign_in_with_email_link('*****@*****.**',
                                                       settings)

        assert link == 'https://testlink'
        self._assert_request(
            recorder, '/accounts:sendOobCode', {
                'email': '*****@*****.**',
                'requestType': 'EMAIL_SIGNIN',
                'returnOobLink': True,
                'continueUrl': 'http://localhost',
            })
Пример #7
0
def generate_email_verification_link_tenant(tenant_client):
    # [START email_verification_link_tenant]
    action_code_settings = auth.ActionCodeSettings(
        url='https://www.example.com/checkout?cartId=1234',
        handle_code_in_app=True,
        ios_bundle_id='com.example.ios',
        android_package_name='com.example.android',
        android_install_app=True,
        android_minimum_version='12',
        # FDL custom domain.
        dynamic_link_domain='coolapp.page.link',
    )

    email = '*****@*****.**'
    link = tenant_client.generate_email_verification_link(
        email, action_code_settings)
    # Construct email from a template embedding the link, and send
    # using a custom SMTP server.
    send_custom_email(email, link)
Пример #8
0
 def test_valid_data(self):
     data = {
         'url': 'http://localhost',
         'handle_code_in_app': True,
         'dynamic_link_domain': 'http://testly',
         'ios_bundle_id': 'test.bundle',
         'android_package_name': 'test.bundle',
         'android_minimum_version': '7',
         'android_install_app': True,
     }
     settings = auth.ActionCodeSettings(**data)
     parameters = _user_mgt.encode_action_code_settings(settings)
     assert parameters['continueUrl'] == data['url']
     assert parameters['canHandleCodeInApp'] == data['handle_code_in_app']
     assert parameters['dynamicLinkDomain'] == data['dynamic_link_domain']
     assert parameters['iosBundleId'] == data['ios_bundle_id']
     assert parameters['androidPackageName'] == data['android_package_name']
     assert parameters['androidMinimumVersion'] == data['android_minimum_version']
     assert parameters['androidInstallApp'] == data['android_install_app']
Пример #9
0
import random
import string
import time
from urllib import parse
import uuid

import requests
import pytest

from firebase_admin import auth
from firebase_admin import tenant_mgt
from integration import test_auth

ACTION_LINK_CONTINUE_URL = 'http://localhost?a=1&b=5#f=1'
ACTION_CODE_SETTINGS = auth.ActionCodeSettings(ACTION_LINK_CONTINUE_URL)
VERIFY_TOKEN_URL = 'https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyCustomToken'


@pytest.fixture(scope='module')
def sample_tenant():
    tenant = tenant_mgt.create_tenant(display_name='admin-python-tenant',
                                      allow_password_sign_up=True,
                                      enable_email_link_sign_in=True)
    yield tenant
    tenant_mgt.delete_tenant(tenant.tenant_id)


@pytest.fixture(scope='module')
def tenant_user(sample_tenant):
    client = tenant_mgt.auth_for_tenant(sample_tenant.tenant_id)
Пример #10
0
 def test_bad_url(self):
     settings = auth.ActionCodeSettings('http:')
     with pytest.raises(ValueError):
         _user_mgt.encode_action_code_settings(settings)
Пример #11
0
 def test_bad_data(self, data):
     settings = auth.ActionCodeSettings('http://localhost', **data)
     with pytest.raises(ValueError):
         _user_mgt.encode_action_code_settings(settings)
Пример #12
0
INVALID_INTS = [None, 'foo', '1', -1, 1.1, True, False, list(), tuple(), dict()]
INVALID_TIMESTAMPS = ['foo', '1', 0, -1, 1.1, True, False, list(), tuple(), dict()]

MOCK_GET_USER_RESPONSE = testutils.resource('get_user.json')
MOCK_LIST_USERS_RESPONSE = testutils.resource('list_users.json')

MOCK_ACTION_CODE_DATA = {
    'url': 'http://localhost',
    'handle_code_in_app': True,
    'dynamic_link_domain': 'http://testly',
    'ios_bundle_id': 'test.bundle',
    'android_package_name': 'test.bundle',
    'android_minimum_version': '7',
    'android_install_app': True,
}
MOCK_ACTION_CODE_SETTINGS = auth.ActionCodeSettings(**MOCK_ACTION_CODE_DATA)

@pytest.fixture(scope='module')
def user_mgt_app():
    app = firebase_admin.initialize_app(testutils.MockCredential(), name='userMgt',
                                        options={'projectId': 'mock-project-id'})
    yield app
    firebase_admin.delete_app(app)

def _instrument_user_manager(app, status, payload):
    auth_service = auth._get_auth_service(app)
    user_manager = auth_service.user_manager
    recorder = []
    user_manager._client.session.mount(
        auth._AuthService.ID_TOOLKIT_URL,
        testutils.MockAdapter(payload, status, recorder))