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
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
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'))