48 lines
1.8 KiB
Python
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)
|