Esempio n. 1
0
def register_admin(request: Request, ) -> Response:
    """
    Register new admin.
    :param request: contains email and password with admin token in header.
    :return: response whether request is successful.
    """

    token_from_request = request.META.get("HTTP_AUTHORIZATION",
                                          "").split("Bearer ")[-1]

    try:
        token = AccessToken(token_from_request)
        profile = Profile.objects.get(user_id=token["id"])
        if profile.role != Admin:
            raise PermissionError
    except (TokenError, PermissionError):
        return Response(
            data={
                "message": "Invalid credentials.",
            },
            status=HTTP_401_UNAUTHORIZED,
        )

    email: str = request.data.get("email")
    email = BaseUserManager.normalize_email(email).lower()
    password: str = request.data.get("password")

    if not email or not password:
        return Response(
            data={"message": "No email or password provided."},
            status=HTTP_400_BAD_REQUEST,
        )

    if Profile.exists(email):
        return Response(
            data={"message": "User with such email already exists."},
            status=HTTP_400_BAD_REQUEST,
        )

    Profile.register(
        email=email,
        password=password,
        role=Admin,
        is_active=True,
    )

    return Response(
        data={
            "message": "Admin created successfully.",
        },
        status=HTTP_201_CREATED,
    )
Esempio n. 2
0
def register_user(request: Request, ) -> Response:
    """
    Register new user.
    :param request: contains e-mail and password.
    :return: response whether request is successful.
    """

    email: str = request.data.get("email")
    email = BaseUserManager.normalize_email(email).lower()
    phone_number: str = request.data.get("phone_number", "")
    password: str = request.data.get("password")

    if not email or not password:
        return Response(
            data={"message": "No email or password provided."},
            status=HTTP_400_BAD_REQUEST,
        )

    if Profile.exists(email):
        return Response(
            data={"message": "User with such email already exists."},
            status=HTTP_400_BAD_REQUEST,
        )

    user = Profile.register(
        email=email,
        password=password,
    )

    queue = get_according_notification_queue(
        prefix="sms" if phone_number else "email", )

    body = make_confirmation_message(
        view=confirm_registration,
        confirmation_token=RefreshToken.for_user(user),
    )

    message_queue_provider.send_confirmation(
        queue=queue,
        recipient=phone_number if phone_number else email,
        subject="Registration confirmation",
        body=body,
    )

    device = "phone" if phone_number else "email address"

    return Response(
        data={
            "message":
            f"User created successfully, "
            f"check your {device} for confirmation link.",
        },
        status=HTTP_200_OK,
    )
Esempio n. 3
0
def profile_register_email(request, email):
    subscriber_uuid = request.headers['Subscriber-Uuid']
    # Assumption: for 1 subscriber, there's only 1 zone subscription for 1 day
    profile = Profile.register(subscriber_uuid=subscriber_uuid, email=email)
    validation_url = BASE_VALIDATION + profile.key_validation
    msg = "Profile Register OK"
    tmp = {
        "id": profile.id,
        "ts": profile.ts,
        "subscriber_uuid": profile.subscriber_uuid,
        "email": profile.email,
        "validation_url": validation_url,
        "validated": profile.validated
    }
    return generate_dict_response_ok(request, msg, [tmp])