Ejemplo n.º 1
0
def test_email_verification(new_user_email_unverified, api_key):
    link = auth.generate_email_verification_link(new_user_email_unverified.email)
    assert isinstance(link, str)
    query_dict = _extract_link_params(link)
    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
Ejemplo n.º 2
0
def verify_email():
    data = request.json
    email = data.get("email")
    verification_link = None

    try:
        # TODO: Add ActionCodeSetting for custom link/redirection back to main page
        verification_link = firebase_admin_auth.generate_email_verification_link(
            email)
    except ValueError:
        msg = "Invalid email"
        logger.info(msg)
        return create_response(status=422, message=msg)
    except FirebaseError as e:
        msg = e.message
        logger.info(msg)
        return create_response(status=422, message=msg)

    if not send_email(
            recipient=email,
            subject="Mentee Email Verification",
            data={"link": verification_link},
            template_id=USER_VERIFICATION_TEMPLATE,
    ):
        msg = "Could not send email"
        logger.info(msg)
        return create_response(status=422, message=msg)

    return create_response(message="Sent verification link to email")
Ejemplo n.º 3
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)
Ejemplo n.º 4
0
def email_verification_link():
    action_code_settings = init_action_code_settings()
    # [START email_verification_link]
    email = '*****@*****.**'
    link = auth.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)
Ejemplo n.º 5
0
    def test_email_verification_no_settings(self, user_mgt_app):
        _, recorder = _instrument_user_manager(user_mgt_app, 200, '{"oobLink":"https://testlink"}')
        link = auth.generate_email_verification_link('*****@*****.**', app=user_mgt_app)
        request = json.loads(recorder[0].body.decode())

        assert link == 'https://testlink'
        assert request['requestType'] == 'VERIFY_EMAIL'
        self._validate_request(request)
Ejemplo n.º 6
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
Ejemplo n.º 7
0
    def create_user(data: Dict[str, str]):
        name = data["name"]
        username = data["username"]
        email = data["email"]
        password = data["password"]
        terms_and_conditions_checked = data["terms_and_conditions_checked"]

        existing_user = UserModel.find_by_username(username)
        if existing_user:
            return {"message": "Acount already exists with this username"}, 400
        try:
            user = auth.create_user(
                email=email,
                email_verified=False,
                password=password,
                display_name=name,
                disabled=False,
            )

            link = auth.generate_email_verification_link(
                email, action_code_settings=None)
            """ To implement, send verification link usingg # send_verification_link(email,link) """

        except Exception as e:
            return {"message": str(e)}, 400

        try:
            firebase_details = auth.get_user_by_email(email)
            uid = firebase_details.uid
            firebase_email = firebase_details.email
            user = UserModel(name, uid, username, email, password,
                             terms_and_conditions_checked)
            user.save_to_db()
        except Exception as e:
            return {"message": str(e)}, 400

        return {
            "verify_link":
            link,
            "message":
            "User was created successfully. Please check your email to verify the account",
        }, 201
Ejemplo n.º 8
0
    def create(self, validated_data):
        """Create new user with encrypted password and return it"""
        print('creating user: '******'email'])
        try:
            firebase_user = auth.create_user(**validated_data)
            firebase_uid = firebase_user.uid

        except auth.EmailAlreadyExistsError:
            print('Firebase user already exists')
            raise serializers.ValidationError(
                'firebase user could not be created')

        if firebase_user:
            print('sending verification link to: ', validated_data['email'])
            link = auth.generate_email_verification_link(
                validated_data['email'])
            print(link)
            email_body_text = "Thanks for registering your account with Workbound\n" + \
                f"Please verify your email address by visiting this link: {link}"
            email_body_html = (
                "<html>\n"
                "<body>\n"
                "<p>Thanks for registering your account with Workbound<br />"
                f"Please verify your email address by visiting this link: <a href={link}>{link}</a>"
                "</p>"
                "</body>"
                "</html>")
            send_email(validated_data['email'],
                       'Workbound Email verification link', email_body_text,
                       email_body_html)

        if get_user_model().objects.filter(
                email=validated_data['email']).exists():
            raise serializers.ValidationError(
                {'error': 'Email already exists'})
        else:
            user = get_user_model().objects.create_user(**validated_data)

        user.firebase_uid = firebase_uid
        user.save()
        return user
Ejemplo n.º 9
0
    def create_user(data: Dict[str, str]):
        """Creates a new user"""
        
        name = data['name']
        email = data['email']
        password = data['password']
        role = data['role']
        
        existing_user = UserModel.find_by_email(email.lower())
        if existing_user and existing_user.firebase_id != "":
            return {"message": "User already exists"}, 400
        
        if existing_user and existing_user.firebase_id == "" and role != 2:
            return {"message": "User is invited as a moderator. Please sign up as a moderator with unique code"}, 400
        
        if role == 2:
            if "otp" in data:
                invitation = InvitesModel.find_by_mod_email(email.lower())
                if invitation:
                    if data["otp"] != invitation.unique_code:
                        return {"message": "Code is incorrect"}, 401  
                else:
                    return {"message": "Sorry! Invite is needed to be a moderator"}, 400
            else:
                return {"message": "Please send unique code"}, 400

        print("Passed")
        
        try:    
            user = auth.create_user(
                email=email,
                email_verified=False,
                password=password,
                display_name=name,
                disabled=False
                )
            
            link = auth.generate_email_verification_link(email, action_code_settings=None)
            ''' To implement, send verification link usingg # send_verification_link(email,link) '''
            
        except Exception as e:
            return {"message": str(e)}, 400
        
        try:    
            firebase_details = auth.get_user_by_email(email)
            uid = firebase_details.uid
            firebase_email = firebase_details.email
            
            ''' Existing user is a temporary moderator user '''
            if existing_user:
                existing_user.firebase_id = uid
                existing_user.name = name
                existing_user.email = firebase_email
                existing_user.save_to_db()
            else:
                user = UserModel(uid, name, firebase_email, password, role)
                user.save_to_db()
            
        except Exception as e:
            print(e)
            
        send_email_verification_message(link, email)

        return {"verify_link": link,
                "message" : "User was created successfully. Please check your email to verify the account"
                }, 201