Exemple #1
0
def update_data(request):
    if request.method == "POST" and request.user.is_authenticated:
        print("entered update_data POST thing")
        oh_member = request.user.oh_member
        fetch_fitbit_data.delay(oh_member.fitbit_member.id, oh_member.fitbit_member.access_token)
        fitbit_member = oh_member.fitbit_member
        fitbit_member.last_submitted = arrow.now().format()
        fitbit_member.save()
        messages.info(request,
                      ("An update of your Fitbit data has been started! "
                       "It can take some minutes before the first data is "
                       "available. Reload this page in a while to find your "
                       "data"))
        return redirect('/dashboard')
Exemple #2
0
def complete_fitbit(request):

    code = request.GET['code']

    # Create Base64 encoded string of clientid:clientsecret for the headers for Fitbit
    # https://dev.fitbit.com/build/reference/web-api/oauth2/#access-token-request
    encode_fitbit_auth = str(settings.FITBIT_CLIENT_ID) + ":" + str(settings.FITBIT_CLIENT_SECRET)
    print(encode_fitbit_auth)
    b64header = base64.b64encode(encode_fitbit_auth.encode("UTF-8")).decode("UTF-8")
    # Add the payload of code and grant_type. Construct headers
    payload = {'code': code, 'grant_type': 'authorization_code'}
    headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': 'Basic %s' % (b64header)}
    # Make request for access token
    r = requests.post(fitbit_token_url, payload, headers=headers)
    # print(r.json())

    rjson = r.json()

    oh_id = request.user.oh_member.oh_id
    oh_user = OpenHumansMember.objects.get(oh_id=oh_id)

    # Save the user as a FitbitMember and store tokens
    try:
        fitbit_member = FitbitMember.objects.get(userid=rjson['user_id'])
        fitbit_member.access_token = rjson['access_token']
        fitbit_member.refresh_token = rjson['refresh_token']
        fitbit_member.expires_in = rjson['expires_in']
        fitbit_member.scope = rjson['scope']
        fitbit_member.token_type = rjson['token_type']
        fitbit_member.save()
    except FitbitMember.DoesNotExist:
        fitbit_member, created = FitbitMember.objects.get_or_create(
            user=oh_user,
            userid=rjson['user_id'],
            access_token=rjson['access_token'],
            refresh_token=rjson['refresh_token'],
            expires_in=rjson['expires_in'],
            scope=rjson['scope'],
            token_type=rjson['token_type'])

    # Fetch user's data from Fitbit (update the data if it already existed)
    # print(fitbit_member)
    alldata = fetch_fitbit_data.delay(fitbit_member.id, rjson['access_token'])

    context = {'oh_proj_page': settings.OH_ACTIVITY_PAGE}

    if fitbit_member:
        messages.info(request, "Your Fitbit account has been connected, and your data has been queued to be fetched from Fitbit")
        return redirect('/dashboard')

    logger.debug('Invalid code exchange. User returned to starting page.')
    messages.info(request, ("Something went wrong, please try connecting your "
                            "Fitbit account again"))
    return redirect('/dashboard')