def token_request(uri, post_data): """ This function encapsulates the code used to make the request to the (reddit) OAuth2 endpoint that is shared between obtaining the first, refreshing and revoking the token. The parameters are the endpoint URI and dictionary with the post data to be JSONified and sent with the POST request to the URI. """ request_data = urlencode(post_data).encode('utf-8') token_request = client_http_request(uri, method='POST', data=request_data) token_request.add_header('Content-Type', 'application/x-www-form-urlencoded') token_request.add_header('User-Agent', rwh.config['APP_USER_AGENT_SERVER']) authenticator = HTTPBasicAuthHandler() authenticator.add_password(realm='reddit', uri=uri, user=rwh.config['APP_ID'], passwd='') authenticated_opener = build_opener(authenticator) request_result = authenticated_opener.open(token_request) status_code = request_result.getcode() result_body = None if request_result: result_body = request_result.read().decode('utf-8') if result_body and (len(result_body.strip()) > 0): result_data = parse_json_string(result_body) else: result_data = None return result_data, status_code
def get_reddit_username(login_session): username_request = client_http_request('https://oauth.reddit.com/api/v1/me', method='GET') username_request.add_header('User-Agent', rwh.config['APP_USER_AGENT_SERVER']) username_request.add_header('Authorization', "bearer %s" % login_session.token) response = urlopen(username_request) http_status = response.getcode() response_body = response.read().decode('utf-8') if ((http_status == 200) and (len(response_body.strip()) > 0)): response_data = parse_json_string(response_body) username = response_data['name'] hash_function = sha256() hash_function.update(username.encode('utf-8')) return hash_function.hexdigest() else: return None