Exemple #1
0
def options():
    form = SettingsForm()

    if form.validate_on_submit():

        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")
            form.populate_obj(bridge.t_settings)

        else:
            bridge = Bridge()
            settings = TSettings()
            form.populate_obj(settings)

        bridge.enabled = form.enabled.data
        # bridge.t_settings = settings
        bridge.updated = datetime.now()
        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'])

        if not bridge.mastodon_host:
            flash(
                f"There was a problem connecting to {session['mastodon']['host']}"
            )
            return redirect(url_for('index'))

        catch_up_twitter(bridge)
        catch_up_mastodon(bridge)

        app.logger.debug("Saving new settings")

        flash("Settings Saved.")
        db.session.commit()
    else:
        for e in form.errors.items():
            flash(e[1][0])
        return redirect(url_for('index'))

    return redirect(url_for('index'))
Exemple #2
0
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
Exemple #3
0
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
Exemple #4
0
Fichier : app.py Projet : SamR1/moa
def options():
    form = SettingsForm()

    if form.validate_on_submit():

        settings = Settings()

        form.populate_obj(settings)

        bridge_found = False

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

        if bridge:
            bridge_found = True
            app.logger.debug("Existing settings found")
        else:
            bridge = Bridge()

        bridge.enabled = form.enabled.data
        bridge.settings = settings
        bridge.updated = datetime.now()
        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'])

        if not bridge.mastodon_host:
            flash(
                f"There was a problem connecting to {session['mastodon']['host']}"
            )
            return redirect(url_for('index'))

        # get twitter ID
        twitter_api = twitter.Api(
            consumer_key=app.config['TWITTER_CONSUMER_KEY'],
            consumer_secret=app.config['TWITTER_CONSUMER_SECRET'],
            access_token_key=session['twitter']['oauth_token'],
            access_token_secret=session['twitter']['oauth_token_secret'],
            tweet_mode='extended'  # Allow tweets longer than 140 raw characters
        )

        if bridge.twitter_last_id == 0:
            tl = twitter_api.GetUserTimeline()
            if len(tl) > 0:
                bridge.twitter_last_id = tl[0].id
            else:
                bridge.twitter_last_id = 0

        if bridge.mastodon_last_id == 0:

            # get mastodon ID
            api = mastodon_api(session['mastodon']['host'],
                               access_code=session['mastodon']['access_code'])

            bridge.mastodon_account_id = api.account_verify_credentials()["id"]

            try:
                statuses = api.account_statuses(bridge.mastodon_account_id)
                if len(statuses) > 0:
                    bridge.mastodon_last_id = statuses[0]["id"]
                else:
                    bridge.mastodon_last_id = 0

            except MastodonAPIError:
                bridge.mastodon_last_id = 0

        app.logger.debug("Saving new settings")

        flash("Settings Saved.")
        db.session.commit()
    else:
        for e in form.errors.items():
            flash(e[1][0])
        return redirect(url_for('index'))

    return redirect(url_for('index'))
Exemple #5
0
Fichier : app.py Projet : SamR1/moa
def mastodon_oauthorized():
    authorization_code = request.args.get('code')
    app.logger.info(f"Authorization code {authorization_code}")

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

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

        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)

        access_code = api.log_in(code=authorization_code,
                                 scopes=["read", "write"],
                                 redirect_uri=url_for("mastodon_oauthorized",
                                                      _external=True))

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

        api.access_code = access_code

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

        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 = False
            bridge.settings = Settings()
            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)
            db.session.commit()

            if app.config.get('MAIL_SERVER', None):
                body = render_template('new_user_email.txt.j2', bridge=bridge)
                msg = Message(subject="New moa.party user",
                              body=body,
                              sender=app.config.get('MAIL_FROM', None),
                              recipients=app.config.get('MAIL_TO', None))

                try:
                    mail.send(msg)

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

    return redirect(url_for('index'))
Exemple #6
0
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'))