""" LinkedIn Authentication """ from oauthclient import client from django.core.urlresolvers import reverse from django.http import HttpResponseRedirect from helios_auth import utils from xml.etree import ElementTree import logging from django.conf import settings API_KEY = settings.LINKEDIN_API_KEY API_SECRET = settings.LINKEDIN_API_SECRET # some parameters to indicate that status updating is possible STATUS_UPDATES = False STATUS_UPDATE_WORDING_TEMPLATE = "Tweet %s" OAUTH_PARAMS = { 'root_url' : 'https://api.linkedin.com/uas', 'request_token_path' : '/oauth/requestToken', 'authorize_path' : '/oauth/authorize', 'authenticate_path' : '/oauth/authenticate', 'access_token_path': '/oauth/accessToken' } def _get_new_client(token=None, token_secret=None): if token: return client.LoginOAuthClient(API_KEY, API_SECRET, OAUTH_PARAMS, token, token_secret) else: return client.LoginOAuthClient(API_KEY, API_SECRET, OAUTH_PARAMS) def _get_client_by_token(token): return _get_new_client(token['oauth_token'], token['oauth_token_secret']) def get_auth_url(request, redirect_url): client = _get_new_client() try: tok = client.get_request_token() except: return None request.session['request_token'] = tok url = client.get_authenticate_url(tok['oauth_token']) return url def get_user_info_after_auth(request): tok = request.session['request_token'] login_client = _get_client_by_token(tok) access_token = login_client.get_access_token(verifier = request.GET.get('oauth_verifier', None)) request.session['access_token'] = access_token user_info_xml = ElementTree.fromstring(login_client.oauth_request('http://api.linkedin.com/v1/people/~:(id,first-name,last-name)', args={}, method='GET')) user_id = user_info_xml.findtext('id') first_name = user_info_xml.findtext('first-name') last_name = user_info_xml.findtext('last-name') return {'type': 'linkedin', 'user_id' : user_id, 'name': "%s %s" % (first_name, last_name), 'info': {}, 'token': access_token} def user_needs_intervention(user_id, user_info, token): """ check to see if user is following the users we need """ return None def _get_client_by_request(request): access_token = request.session['access_token'] return _get_client_by_token(access_token) def update_status(user_id, user_info, token, message): """ post a message to the auth system's update stream, e.g. twitter stream """ return #twitter_client = _get_client_by_token(token) #result = twitter_client.oauth_request('http://api.twitter.com/1/statuses/update.json', args={'status': message}, method='POST') def send_message(user_id, user_name, user_info, subject, body): pass def send_notification(user_id, user_info, message): pass # # Election Creation # def can_create_election(user_id, user_info): return True