def JanrainAuth(self, *args): token = self.params.token url = 'https://rpxnow.com/api/v2/auth_info' args = { 'format': 'json', 'apiKey': '4a593fc2715670ab6a03b40653054858ffdc34a2', 'token': token } r = urlfetch.fetch( url=url, payload=urllib.urlencode(args), method=urlfetch.POST, headers={'Content-Type': 'application/x-www-form-urlencoded'}) json = simplejson.loads(r.content) if json['stat'] == 'ok': person = Person.gql( "WHERE UserName= :u AND AuthenticationType= :auth", u=json['profile']['preferredUsername'], auth=json['profile']['providerName']).get() if not person: name = json['profile'].has_key( 'givenName') and json['profile']['givenName'] or '' surname = json['profile'].has_key('familyName') and json[ 'profile']['name']['familyName'] or '' display = json['profile'].has_key( 'displayName') and json['profile']['displayName'] or '' email = json['profile'].has_key( 'email') and json['profile']['email'] or None photo = json['profile'].has_key( 'photo') and json['profile']['photo'] or None if not name and not surname and display: arr = display.split(' ') name = arr[0] surname = len(arr) > 1 and arr[1] or '' person = Person.CreateNew( uname=json['profile']['preferredUsername'], name=name, surname=surname, email=email, password='******', public=True, notify=True, authType=json['profile']['providerName'], photoUrl=photo, _autoSave=True) self.login_user2(person) self.status = 'Welcome ' + person.UserName if self.params.redirect_url: self.redirect(self.params.redirect_url) else: self.redirect('/') else: self.status = 'Not Valid Login' self.respond()