def process_connection_and_finish_user(self, user, user_info): """ Delegates to helpers to process rest of User, adds Account, maps positions Return: User """ ## add LI account acct = Account() acct.owner = user acct.service = 'linkedin' acct.uniq_id = user_info['id'] if 'publicProfileUrl' in user_info: acct.public_url = user_info['publicProfileUrl'] acct.status = 'unlinked' acct.save() ## Edge case that showed up in production if 'publicProfileUrl' not in user_info: return user ## parse public page self.process_public_page_existing(user_info['publicProfileUrl'], user) ## Map Positions # match all positions to ideals for p in user.positions.all(): careerlib.match_position_to_ideals(p) # process first_ideal_position user.profile.set_first_ideal_job() return user
def add_dormant_user(self,user_info): # create dormant user account temp_username = user_info['firstName'] + user_info['lastName'] + user_info['id'] temp_username = temp_username[:30] # self.stdout.write(temp_username) user = User() user.username = temp_username user.save() # create user profile user.profile.first_name = user_info['firstName'] user.profile.last_name = user_info['lastName'] if 'headline' in user_info: user.profile.headline = user_info['headline'] user.profile.status = "dormant" user.profile.save() # add pofile picture if 'pictureUrl' in user_info: self.add_profile_pic(user,user_info['pictureUrl']) # create LinkedIn account acct = Account() acct.owner = user acct.service = 'linkedin' acct.uniq_id = user_info['id'] if 'publicProfileUrl' in user_info: acct.public_url = user_info['publicProfileUrl'] acct.status = "unlinked" acct.save() return user
def add_dormant_user(self,user_info): # compile temporary user name temp_username = user_info['firstName'] + user_info['lastName'] + user_info['id'] temp_username = temp_username[:30] # check to see if user already exists try: user = User.objects.get(username=temp_username) except ObjectDoesNotExist: # create dormant user account user = User() user.username = temp_username user.is_active = False user.save() # create user profile user.profile.first_name = user_info['firstName'] user.profile.last_name = user_info['lastName'] if 'headline' in user_info: user.profile.headline = user_info['headline'] user.profile.status = "dormant" user.profile.save() # add pofile picture if 'pictureUrl' in user_info: self.add_profile_pic(user,user_info['pictureUrl']) # create LinkedIn account acct = Account() acct.owner = user acct.service = 'linkedin' acct.uniq_id = user_info['id'] if 'publicProfileUrl' in user_info: acct.public_url = user_info['publicProfileUrl'] acct.status = "unlinked" acct.save() if self.logging: print 'Add Dormant User: '******'firstName'] + ' ' + user_info['lastName'] return user
def process_connection_and_create_user(self, user_info): """ Delegates to helpers to try and create User object. If successful, creates Account object, maps positions. Return: User || None """ ## Edge case that showed up in production if 'publicProfileUrl' not in user_info: return None ## go to purl, parse, create user, profile, return user user = self.process_public_page_full(user_info['publicProfileUrl'], user_info['id']) if user is not None: ## Add picture url from user_info b/c not crawlable if 'pictureUrl' in user_info: self.add_profile_pic(user, user_info['pictureUrl']) ## Create account acct = Account() acct.owner = user acct.service = 'linkedin' acct.uniq_id = user_info['id'] if 'publicProfileUrl' in user_info: acct.public_url = user_info['publicProfileUrl'] acct.status = "unlinked" acct.save() ## Match Positions # match all positions to ideals for p in user.positions.all(): careerlib.match_position_to_ideals(p) # process first_ideal_position user.profile.set_first_ideal_job() return user else: return None
def finish_login(request): # TODO: redirect if not not authenticated through LinkedIn already # if request.POST: if request.method == "POST": # form submitted form = FinishAuthForm(request.POST) if form.is_valid(): from accounts.models import Pref import accounts.emaillib as emaillib # grab cleaned values from form username = form.cleaned_data['username'] email = form.cleaned_data['email'] # location = form.cleaned_data['location'] # headline = form.cleaned_data['headline'] password = form.cleaned_data['password'] # fetch LI data linkedin_user_info = request.session['linkedin_user_info'] access_token = request.session['access_token'] # check to see if dormant user already exists try: print '@ accounts.finish -- checking for dormant user' user = User.objects.get(profile__status="dormant",account__uniq_id=linkedin_user_info['id']) existing = True user.profile.status = "active" user.profile.save() user.set_password(password) user.username = username user.is_active = True user.save() print "@ accounts.finish -- user already exists" except: print '@ accounts.finish -- new user' # create user user = User.objects.create_user(username,email,password) user.save() existing = False user.profile.status = "active" user.profile.save() print "@ accounts.finish -- created new user" # send welcome email welcome = emaillib.WelcomeEmail(user) welcome.send_email() # add email prefs if form.cleaned_data['notification']: pref = Pref(user=user,name="notification",value=1) pref.save() else: pref = Pref(user=user,name="notification",value=0) pref.save() # make sure using right backend request.session['_auth_user_backend'] = 'django.contrib.auth.backends.ModelBackend' # log user in user = authenticate(username=username,password=password) # make sure authentication worked if user is not None: print 'in to auth login' auth_login(request,user) else: # try logging in now with LinkedIn request.session['_auth_user_backend'] = 'prosperime.accounts.backends.LinkedinBackend' try: user = authenticate(acct_id=linkedin_user_info['id']) if user is not None: auth_login(request,user) except: # somehow authentication failed, redirect with error message messages.error(request, 'Something went wrong. Please try again.') return render_to_response('accounts/finish_login.html',{'form':form},context_instance=RequestContext(request)) # update user profile # user.profile.full_name = request.session['linkedin_user_info']['firstName'] + " " + request.session['linkedin_user_info']['lastName'] user.profile.first_name = linkedin_user_info['firstName'] user.profile.last_name = linkedin_user_info['lastName'] # user.profile.location = location # check to see if user provided a headline # if headline: # user.profile.headline = headline # else: user.profile.headline = linkedin_user_info['headline'] user.profile.save() # add pofile picture # if 'pictureUrl' in linkedin_user_info: # # _add_profile_pic(user,linkedin_user_info['pictureUrl']) # li_parser = LIProfile() # li_parser.add_profile_pic(user,linkedin_user_info['pictureUrl']) if 'pictureUrls' in linkedin_user_info: li_parser = LIProfile() li_parser.add_profile_pic(user,linkedin_user_info['pictureUrls']['values'][0]) if existing: # get existing LI account acct = Account.objects.get(owner=user,service="linkedin") else: # create LinkedIn account acct = Account() acct.owner = user acct.access_token = access_token['oauth_token'] acct.token_secret = access_token['oauth_token_secret'] acct.service = 'linkedin' acct.expires_on = datetime.now() + timedelta(seconds=int(access_token['oauth_authorization_expires_in'])) acct.uniq_id = linkedin_user_info['id'] acct.status = "active" acct.save() # finish processing LI profile profile_task = process_li_profile.delay(user.id,acct.id) # start processing connections connections_task = process_li_connections.delay(user.id,acct.id) # save task ids to session request.session['tasks'] = { 'profile': profile_task.id, 'connections': connections_task.id } #return HttpResponseRedirect('/account/success') if 'next' not in request.session: return HttpResponseRedirect('/majors/') else: return HttpResponseRedirect(request.session['next']) else: form = FinishAuthForm() return render_to_response('accounts/finish_login.html',{'form':form},context_instance=RequestContext(request))
def finish_registration_old(request): import accounts.emaillib as emaillib # get linkedin info from session linkedin_user_info = request.session['linkedin_user_info'] access_token = request.session['access_token'] # check for dormant user try: user = User.objects.get(profile__status="dormant",account__uniq_id=linkedin_user_info['id']) user.email=linkedin_user_info['emailAddress'] logger.info("activated dormant user "+linkedin_user_info['emailAddress']) existing = True except: # create user user = User.objects.create_user(linkedin_user_info['emailAddress'],linkedin_user_info['emailAddress']) logger.info("created new user "+linkedin_user_info['emailAddress']) user.save() existing = False # set user properties password = User.objects.make_random_password() user.set_password(password) user.save() # set profile status user.profile.status = "active" user.profile.first_name = linkedin_user_info['firstName'] user.profile.last_name = linkedin_user_info['lastName'] user.profile.save() user.username = linkedin_user_info['emailAddress'] user.is_active = True user.save() # send welcome email welcome = emaillib.WelcomeEmail(user) welcome.send_email() logger.info("sent welcome email to user: "******"linkedin") else: # create LinkedIn account acct = Account() acct.owner = user acct.access_token = access_token['oauth_token'] acct.token_secret = access_token['oauth_token_secret'] acct.service = 'linkedin' acct.expires_on = datetime.now() + timedelta(seconds=int(access_token['oauth_authorization_expires_in'])) acct.uniq_id = linkedin_user_info['id'] acct.status = "active" acct.save() # finish processing LI profile profile_task = process_li_profile.delay(user.id,acct.id) # start processing connections connections_task = process_li_connections.delay(user.id,acct.id) # save task ids to session request.session['tasks'] = { 'profile': profile_task.id, 'connections': connections_task.id } request.session['_auth_user_backend'] = 'prosperime.accounts.backends.LinkedinBackend' user = authenticate(acct_id=linkedin_user_info['id']) if user is not None: auth_login(request,user) if 'next' not in request.session: return HttpResponseRedirect('/majors/') else: return HttpResponseRedirect(request.session['next'])