ba-thesis/app/withings/api.py

48 lines
1.8 KiB
Python

from datetime import datetime, timedelta
from random import randint
import requests
from django.conf import settings
from urllib.parse import urlencode
def fetch_withings_tokens(authorization_code, redirect_uri):
token_url_base = "https://wbsapi.withings.net/v2/oauth2"
token_url_params = {
'action': 'requesttoken',
'client_id': settings.WITHINGS_CONFIG['CLIENT_ID'],
'client_secret': settings.WITHINGS_CONFIG['CLIENT_SECRET'],
'grant_type': 'authorization_code',
'code': authorization_code,
'redirect_uri': redirect_uri
}
token_url = f"{token_url_base}?{urlencode(token_url_params)}"
response = requests.get(token_url)
response.raise_for_status()
return response.json()
def mock_fetch_withings_tokens(authorization_code, redirect_uri):
response = {
"status": 0,
"body": {
"userid": f"{randint(1, 5000)}",
"access_token": "a075f8c14fb8df40b08ebc8508533dc332a6910a",
"refresh_token": "f631236f02b991810feb774765b6ae8e6c6839ca",
"expires_in": 10800,
"scope": "user.info,user.metrics",
"csrf_token": "PACnnxwHTaBQOzF7bQqwFUUotIuvtzSM",
"token_type": "Bearer"
}
}
return response
def save_tokens_to_session(request, response_data):
request.session['withings_userid'] = response_data['body']['userid']
request.session['withings_access_token'] = response_data['body']['access_token']
request.session['withings_refresh_token'] = response_data['body']['refresh_token']
now = datetime.now()
request.session['withings_access_token_expiry'] = now + timedelta(seconds=response_data['body']['expires_in'])
request.session['withings_refresh_token_expiry'] = now + timedelta(days=365)