from datetime import timedelta from random import randint import requests from django.conf import settings from django.utils import timezone 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 = timezone.now() request.session['withings_access_token_expiry'] = (now + timedelta(seconds=response_data['body']['expires_in'])).isoformat() request.session['withings_refresh_token_expiry'] = (now + timedelta(days=365)).isoformat()