示例#1
0
文件: app.py 项目: uetchy/moa
def get_or_create_bridge(bridge_id=None):

    if bridge_id:
        bridge = db.session.query(Bridge).filter_by(id=bridge_id).first()

    else:
        bridge = Bridge()
        bridge.enabled = True
        bridge.t_settings = TSettings()

        db.session.add(bridge.t_settings)
        db.session.add(bridge)
        db.session.commit()

        session['bridge_id'] = bridge.id

    return bridge
示例#2
0
文件: app.py 项目: imfht/flaskapps
def get_or_create_bridge(bridge_id=None):
    if bridge_id:
        bridge = db.session.query(Bridge).filter_by(id=bridge_id).first()
        if not bridge.md:
            bridge.md = BridgeMetadata()

    else:
        bridge = Bridge()
        bridge.enabled = True
        bridge.t_settings = TSettings()
        bridge.md = BridgeMetadata()
        bridge.md.worker_id = random.randint(1, app.config['WORKER_JOBS'])
        bridge.updated = datetime.now()
        db.session.add(bridge.t_settings)
        db.session.add(bridge)
        db.session.commit()

        session['bridge_id'] = bridge.id

    return bridge
示例#3
0
文件: app.py 项目: distantorigin/moa
def mastodon_oauthorized():
    authorization_code = request.args.get('code')

    if authorization_code is None:
        flash('You denied the request to sign in to Mastodon.')
    else:

        host = session.get('mastodon_host', None)

        app.logger.info(f"Authorization code {authorization_code} for {host}")

        if not host:
            flash(
                'There was an error. Please ensure you allow this site to use cookies.'
            )
            return redirect(url_for('index'))

        session.pop('mastodon_host', None)

        api = mastodon_api(host)

        try:
            access_code = api.log_in(code=authorization_code,
                                     scopes=["read", "write"],
                                     redirect_uri=url_for(
                                         "mastodon_oauthorized",
                                         _external=True))
        except MastodonIllegalArgumentError as e:

            flash(
                f"There was a problem connecting to the mastodon server. The error was {e}"
            )
            return redirect(url_for('index'))

        # app.logger.info(f"Access code {access_code}")

        api.access_code = access_code

        try:
            session['mastodon'] = {
                'host': host,
                'access_code': access_code,
                'username': api.account_verify_credentials()["username"]
            }

        except MastodonUnauthorizedError as e:
            flash(
                f"There was a problem connecting to the mastodon server. The error was {e}"
            )
            return redirect(url_for('index'))

        bridge = db.session.query(Bridge).filter_by(
            mastodon_user=session['mastodon']['username'],
            twitter_handle=session['twitter']['screen_name'],
        ).first()

        if bridge:
            app.logger.debug("Existing settings found")
        else:

            bridge = Bridge()
            bridge.enabled = True
            bridge.t_settings = TSettings()
            bridge.twitter_oauth_token = session['twitter']['oauth_token']
            bridge.twitter_oauth_secret = session['twitter'][
                'oauth_token_secret']
            bridge.twitter_handle = session['twitter']['screen_name']
            bridge.mastodon_access_code = session['mastodon']['access_code']
            bridge.mastodon_user = session['mastodon']['username']
            bridge.mastodon_host = get_or_create_host(
                session['mastodon']['host'])

            db.session.add(bridge.t_settings)
            db.session.add(bridge)
            db.session.commit()

            catch_up_mastodon(bridge)
            catch_up_twitter(bridge)

            if app.config.get('MAIL_SERVER', None):

                # Fetch twitter follower count
                twitter_api = twitter.Api(
                    consumer_key=app.config['TWITTER_CONSUMER_KEY'],
                    consumer_secret=app.config['TWITTER_CONSUMER_SECRET'],
                    access_token_key=bridge.twitter_oauth_token,
                    access_token_secret=bridge.twitter_oauth_secret)
                follower_list = twitter_api.GetFollowerIDs()
                follower_count = len(follower_list)

                body = render_template('new_user_email.txt.j2',
                                       bridge=bridge,
                                       follower_count=follower_count)
                msg = Message(subject="New moa.party user",
                              body=body,
                              recipients=[app.config.get('MAIL_TO', None)])

                try:
                    mail.send(msg)

                except Exception as e:
                    app.logger.error(e)

    return redirect(url_for('index'))