示例#1
0
    def dispatch_request(self, *args, **kwargs):
        resp = kwargs['data']
        access_token = resp['access_token']
        session['access_token'] = access_token, ''

        from urllib2 import Request, urlopen, URLError
        import json
        headers = {'Authorization': 'OAuth ' + access_token}
        req = Request('https://www.googleapis.com/oauth2/v1/userinfo', None,
                      headers)
        try:
            res = urlopen(req)
        except URLError:
            return req.read()  #TODO: Handle this

        data = json.loads(res.read())
        service_account = get_service_account(name=data['email'],
                                              service=USER.GOOGLE)
        next_url = request.args.get('next') or url_for('users.login')

        if g.user:
            if service_account:
                connect_service_account_to_user(g.user, service_account)
            else:
                service_account = create_service_account(
                    name=data['email'],
                    oauth_token=access_token,
                    service=USER.GOOGLE)
                connect_service_account_to_user(g.user, service_account)
            session['session_token'] = create_session(service_account)
            flash(
                USER.ASSOCIATION_COMPLETE %
                (USER.AUTH_SERVICE[USER.GOOGLE], data['email']), 'success')
            next_url = url_for('users.home')
        else:
            if service_account is not None:
                user = get_user(service_account=service_account)
                if user is not None:
                    # create session
                    session['session_token'] = create_session(service_account)
                    flash(u'Welcome %s %s' % (user.first_name, user.last_name))
                else:
                    # Service account exists, but no user.
                    session['session_token'] = create_session(service_account)
                    flash(
                        u'Welcome back, %s. Please consider becoming a member.'
                        % service_account.name)
            else:
                service_account = create_service_account(
                    name=data['email'],
                    oauth_token=access_token,
                    service=USER.GOOGLE)
                session['session_token'] = create_session(service_account)
                flash(u'Your %s ID %s has been saved.' %
                      (USER.AUTH_SERVICE[USER.GOOGLE], data['email']))
            if resp is None:
                flash(USER.LOGIN_DENIED)
        return redirect(next_url)
示例#2
0
 def dispatch_request(self, *args, **kwargs):
     form = RegisterForm(request.form)
     if request.method == "POST":
         if form.validate_on_submit():
             test_service_account = get_service_account(
                 name=form.email.data)
             if test_service_account is not None:
                 service = USER.AUTH_SERVICE[test_service_account.service]
                 flash(
                     'This %s email address already exists. Please use it to log '
                     'in.' % service)
                 return redirect(url_for('users.login_email'))
             if not app.config['USER_REGISTRATION_REQUIRE_ACTIVATION']:
                 # require activation
                 status = USER.ACTIVE
             else:
                 status = USER.NEW
             user = create_user(first_name=form.first_name.data,
                                last_name=form.last_name.data,
                                email=form.email.data,
                                phone=form.phone.data,
                                status=status)
             service_account = create_service_account(
                 name=form.email.data,
                 password=generate_password_hash(form.password.data),
                 service=USER.LOCAL)
             if app.config['USER_REGISTRATION_EMAIL']:
                 # TODO: send an email
                 pass
             flash(USER.REGISTRATION_SUCCESSFUL, 'success')
             return redirect(url_for('users.login_email'))
         else:
             print "NOT VALIDATED"
             print form.errors
     return render_template(self.template_name, form=form)
示例#3
0
    def dispatch_request(self, *args, **kwargs):
        resp = kwargs['data']
        service_account = get_service_account(name=resp['screen_name'],
                                              service=USER.TWITTER)
        next_url = request.args.get('next') or url_for('users.login')

        if g.user:
            if service_account:
                connect_service_account_to_user(g.user, service_account)
            else:
                service_account = create_service_account(
                    name=resp['screen_name'],
                    oauth_token=resp['oauth_token'],
                    oauth_secret=resp['oauth_token_secret'],
                    service=USER.TWITTER)
                connect_service_account_to_user(g.user, service_account)
            session['session_token'] = create_session(service_account)
            flash(
                USER.ASSOCIATION_COMPLETE %
                (USER.AUTH_SERVICE[USER.TWITTER], resp['screen_name']),
                'success')
            next_url = url_for('users.home')
        else:
            if service_account is not None:
                user = get_user(service_account=service_account)
                if user is not None:
                    session['session_token'] = create_session(service_account)
                    flash(u'Welcome %s %s' % (user.first_name, user.last_name))
                else:
                    session['session_token'] = create_session(service_account)
                    flash(
                        u'Welcome back, %s. Please consider becoming a member.'
                        % service_account.name)
            else:
                service_account = create_service_account(
                    name=resp['screen_name'],
                    oauth_token=resp['oauth_token'],
                    oauth_secret=resp['oauth_token_secret'],
                    service=USER.TWITTER)
                session['session_token'] = create_session(service_account)
                flash(u'Your %s ID %s has been saved.' %
                      (USER.AUTH_SERVICE[USER.TWITTER], resp['screen_name']))
            if resp is None:
                flash(USER.LOGIN_DENIED)
        return redirect(next_url)