Example #1
0
def update_dbmi_user(request, **profile):
    logger.debug("Update DBMI user")

    # Get the JWT
    email = authn.get_jwt_email(request, verify=False)

    # Get their profile first
    reg_profile = get_dbmi_user(request=request, email=email)
    if not reg_profile:

        # Ensure email is in their profile
        if "email" not in profile:
            profile["email"] = email

        # Create the profile
        return create_dbmi_user(request, **profile)

    else:
        # Build the URL (needs trailing slash)
        url = furl(dbmi_settings.REG_URL)
        url.path.segments.extend(["api", "register", reg_profile["id"], ""])

        response = requests.put(url.url,
                                headers=authn.dbmi_http_headers(request),
                                data=json.dumps(profile))
        if not response.ok:
            logger.error("Update user response: {}".format(response.content))

        return response.json()
Example #2
0
def check_email_confirmation(request):
    logger.debug("Checking email confirmation")

    # Build the URL (needs trailing slash)
    url = furl(dbmi_settings.REG_URL)
    url.path.segments.extend(["api", "register", ""])
    url.query.params.add("email", authn.get_jwt_email(request, verify=False))

    # Make the call
    response = requests.get(url.url, headers=authn.dbmi_http_headers(request))
    if not response.ok:
        logger.error("Confirmation email response: {}".format(
            response.content))
        return None

    try:
        # Parse the profile for the status
        email_status = response.json()["results"][0]["email_confirmed"]
        logger.debug("Email confirmation status: {}".format(email_status))

        return email_status

    except (KeyError, IndexError) as e:
        logger.error("Failed parsing profile: {}".format(e))

    return None
Example #3
0
def create_dbmi_user(request, **profile):
    logger.debug("Creating DBMI user")

    # Get the JWT
    email = authn.get_jwt_email(request, verify=False)

    # Update kwargs
    profile["email"] = email

    # Build the URL (needs trailing slash)
    url = furl(dbmi_settings.REG_URL)
    url.path.segments.extend(["api", "register", ""])

    response = requests.post(url.url,
                             headers=authn.dbmi_http_headers(request),
                             data=json.dumps(profile))
    if not response.ok:
        logger.error("Create user response: {}".format(response.content))

    return response.json()
Example #4
0
def send_email_confirmation(request,
                            success_url,
                            title=None,
                            icon=None,
                            subject=None):
    logger.debug("Sending confirmation email")

    # Build the URL (needs trailing slash)
    url = furl(dbmi_settings.REG_URL)
    url.path.segments.extend(
        ["api", "register", "send_confirmation_email", ""])

    # Add extra data to define look and feel of email, if passed
    branding = {}
    if title:
        branding["title"] = title
    if icon:
        branding["icon"] = icon
    if subject:
        branding["subject"] = subject

    # Set data for request
    data = {
        "success_url": success_url,
    }

    # Check for branding
    if branding:
        data["branding"] = base64.b64encode(
            json.dumps(branding).encode()).decode()

    # Make the call
    response = requests.post(url.url,
                             headers=authn.dbmi_http_headers(request),
                             data=json.dumps(data))
    if not response.ok:
        logger.error("Confirmation email response: {}".format(
            response.content))

    return response.ok
Example #5
0
def get_dbmi_user(request, email=None):
    logger.debug("Get DBMI user")

    # Get the JWT
    if not email:
        email = authn.get_jwt_email(request, verify=False)

    # Build the URL (needs trailing slash)
    url = furl(dbmi_settings.REG_URL)
    url.path.segments.extend(["api", "register", ""])

    # Add email
    url.query.params.add("email", email)

    # Requests for profiles are limited to the profile for the requesting user
    response = requests.get(url.url, headers=authn.dbmi_http_headers(request))
    if not response.ok:
        logger.error("Get user response: {}".format(response.content))

    # Return the profile
    profiles = response.json()["results"]
    return next(iter(profiles), None)