コード例 #1
0
 def oauth_authorized(service_provider_name):
     session_user = get_current_user()
     try:
         current_provider = providers.get_by_name(service_provider_name)
         token, secret = current_provider.get_access_tokens()
         fresh_user = get_user_by_token(current_provider, token, secret)
         if session_user is not None:
             if fresh_user.id == session_user.id:
                 flash('This provider was already linked to this account.')
             else:
                 flash('Merging accounts is not currently supported.')
         else:
             log_user_in(fresh_user)
     except ServiceProviderNotFound:
         flash('Provider not found.')
     except UserDeniedRequest:
         flash('You denied us access.')
     except UserNotFound:
         if session_user is None:
             try:
                 user = get_user_by_remote_id(current_provider, token=(token,secret))
             except UserNotFound:
                 user = create_user()
             log_user_in(user)
         add_SP_to_user_by_id(
             get_current_user().id, current_provider, token, secret)
     next_url = request.args.get('next') or url_for('show_user')
     return redirect(next_url)
コード例 #2
0
 def user_consumers_remove(consumer_id=None):
     if consumer_id is None:
         return redirect(url_for("show_user"))
     user = get_current_user()
     assert user is not None, "login_required didn't work??"
     try:
         consumer = user.accesses_from_consumers.filter(ConsumerUserAccess.id == consumer_id).one()
         db.session.delete(consumer)
         db.session.commit()
     except NoResultFound:
         flash("No consumer matching that ID.")
     return redirect(url_for("show_user"))
コード例 #3
0
 def user_providers_remove(provider_id=None):
     if provider_id is None:
         return redirect(url_for("show_user"))
     user = get_current_user()
     assert user is not None, "login_required didn't work??"
     number_of_sps = user.accesses_to_sps.count()
     if number_of_sps == 0:
         flash("You have no accounts to remove.")
         return redirect(url_for("show_user"))
     elif number_of_sps == 1:
         flash("You cannot remove your last account.")
         return redirect(url_for("show_user"))
     else:
         provider = user.accesses_to_sps.filter(UserSPAccess.id == provider_id).one()
         db.session.delete(provider)
         db.session.commit()
         return redirect(url_for("show_user"))
コード例 #4
0
ファイル: hooks.py プロジェクト: OAuthHub/OAuthHub
def _save_verifier(token, verifier, request):     # And args, kwargs
    assert all((
        isinstance(token, str),
        isinstance(verifier, dict),
        isinstance(verifier['oauth_verifier'], str),
        isinstance(verifier['oauth_token'], str),
        isinstance(verifier['resource_owner_key'], str),
        verifier['oauth_token'] == verifier['resource_owner_key'],
        isinstance(request, Request)
    )), repr((token, verifier, request))
    rt = verifier['oauth_token']
    veri = verifier['oauth_verifier']
    session_user = get_current_user()
    assert session_user is not None
    t = RequestToken.query.filter_by(token=rt).one()
    t.verifier = veri
    t.user = session_user
    db.session.add(t)
    db.session.commit()
コード例 #5
0
 def developers_apps():
     session_user = get_current_user()
     if request.method == 'GET':
         consumers = (Consumer.query
             .filter(Consumer.creator == session_user)
             .all())
         log.debug("Showing list of Consumers: {}".format(
             consumers))
         return render_template(
             'consumer_list.html',
             consumers=consumers,
             creator_repr=repr(session_user))
     elif request.method == 'POST':
         redirect_urls = [request.form['redirect-url']]
         realms = request.form['realms'].split(' ')
         name = request.form['name']
         fresh_consumer = Consumer(
             session_user,
             gen_salt(40),
             gen_salt(80),
             redirect_urls,
             realms,
             name)
         log.debug("Trying to create new Consumer: {!r}".format(
             fresh_consumer))
         try:
             db.session.add(fresh_consumer)
             db.session.commit()
             flash(
                 "You have created a new Consumer app.",
                 category='success')
             log.debug("Consumer creation success. "
                       "Now there are {} Consumers.".format(
                 Consumer.query.count()))
         except Exception:      # TODO: What Exception type?
             db.session.rollback()
             flash(
                 "Consumer app creation failed.",
                 category='fail')
         return redirect(url_for('developers_apps'))
     else:
         assert False, request.method
コード例 #6
0
    def show_user():
        user = get_current_user()
        assert user is not None, "login_required didn't work??"
        if user.accesses_to_sps.count():
            authorised_services = user.accesses_to_sps.all()
            if user.name:
                name = user.name
            else:
                for service_record in authorised_services:
                    service_name = service_record.sp_class_name
                    if service_name in providers:
                        service = providers[service_name]
                        # TODO potentially remove the service if it's not valid.
                        if not app.config.get("DEBUG"):
                            if not service.verify():
                                continue
                        name = service.name()
                        user.name = name
                        db.session.commit()
                        break

            consumers = user.accesses_from_consumers.all()
            return render_template("user.html", name=name, providers=authorised_services, consumers=consumers)
        return show_error_page("Got into show_user with user set to None or no associations with service providers.")