예제 #1
0
    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()