def __init__(self, subreddit, refresh_token, spamcruncher=None, un=None, users_tracked=False, botbans=False): self.imgur = ImgurClient(credentials.get_token("IMGUR_CLIENT_ID", 'credentials'), credentials.get_token("IMGUR_CLIENT_SECRET", 'credentials')) self.users_tracked = users_tracked self.subreddit = subreddit self.un = un self.refresh_token = refresh_token self.spamcruncher = spamcruncher self.botbans = botbans self.r = praw.Reddit(user_agent="Snoohelper 0.1 by /u/Santi871", client_id=REDDIT_APP_ID, client_secret=REDDIT_APP_SECRET, refresh_token=self.refresh_token)
def create_dummy_command_request(command): dummy_request = { 'user_name': 'Santi871', 'team_domain': 'snoohelpertesting', 'team_id': get_token("team_id", "SnooHelper Testing", "teams_test.ini"), 'command': command, 'text': 'santi871', 'channel_name': '#general', 'response_url': get_token("webhook_url", "SnooHelper Testing", "teams_test.ini"), 'token': 'abc123' } return snoohelper.utils.slack.SlackRequest(form=dummy_request)
def create_app(teams_controller, handler): new_app = Flask(__name__, template_folder='../webapp/templates') SSLify(new_app) new_app.config['CONTROLLER'] = teams_controller new_app.config['HANDLER'] = handler new_app.config['WTF_CSRF_ENABLED'] = True new_app.config['SECRET_KEY'] = get_token("SECRET_KEY", "credentials") reddits = dict() cur_bot = dict() @new_app.route("/slack/oauthcallback", methods=['POST', 'GET']) def slack_oauth_callback(): form = ModulesSelectForm() slack_teams_controller = new_app.config['CONTROLLER'] if not form.validate_on_submit(): # Handle Slack auth and redirect to modules selection data = { 'client_id': SLACK_APP_ID, 'client_secret': SLACK_APP_SECRET, 'code': request.args.get('code') } response = requests.post('https://slack.com/api/oauth.access', params=data) response_json = response.json() cur_bot[ response_json['team_name']] = slack_teams_controller.teams.get( response_json['team_name'], None) slack_teams_controller.add_team(response_json) response = make_response( render_template('modules_select.html', title='Modules Select', form=form)) response.set_cookie('slack_team_name', response_json['team_name']) return response else: # Handle modules selection and redirect to Reddit auth form_data = form.modules_select.data team_name = request.cookies.get('slack_team_name') scopes, modules = snoohelper.utils.reddit.get_scopes(form_data) slack_teams_controller.teams[team_name].set("modules", modules) slack_teams_controller.teams[team_name].set("scopes", scopes) state = ''.join( random.SystemRandom().choice(string.ascii_uppercase + string.digits) for _ in range(8)) r = praw.Reddit( user_agent= "Snoohelper 0.3 by /u/Santi871 - authorization module", client_id=REDDIT_APP_ID, client_secret=REDDIT_APP_SECRET, redirect_uri=REDDIT_REDIRECT_URI) reddits[state] = r url = r.auth.url(scopes, state, 'permanent') response = make_response(redirect(url, code=302)) return response @new_app.route('/reddit/oauthcallback', methods=['POST', 'GET']) def reddit_oauth_callback(): form = SubredditSelectForm() slack_teams_controller = new_app.config['CONTROLLER'] if request.method == 'GET': # Handle Reddit auth and show subreddit selection template code = request.args.get('code', None) state = request.args.get('state', None) r = reddits[state] team_name = request.cookies.get('slack_team_name') if code is not None: while True: try: refresh_token = r.auth.authorize(code) slack_teams_controller.teams[team_name].set( "reddit_refresh_token", refresh_token) break # catch oauth errors except requests.exceptions.ConnectionError: print("Connection error") time.sleep(0.5) continue choices = [ (subreddit.display_name, subreddit.display_name) for subreddit in r.user.moderator_subreddits(limit=None) ] form.subreddit_select.choices = choices reddits.pop(state, None) return render_template('subreddit_select.html', title='Select Subreddit', form=form) elif request.method == 'POST': # Finish up with Reddit auth and start bot subreddit = form.subreddit_select.data team_name = request.cookies.get('slack_team_name', None) if team_name is None: return "There was an error processing your request, please try again." slack_teams_controller.remove_team(team_name) slack_teams_controller.teams[team_name].set("subreddit", subreddit) slack_teams_controller.add_bot(team_name) return "Successfully added Slack team and linked to subreddit. Enjoy!" @new_app.route('/slack/commands', methods=['POST']) def command(): requests_handler = new_app.config['HANDLER'] slack_request = utils.slack.SlackRequest(request, SLACK_COMMANDS_TOKEN) if slack_request.is_valid: response = requests_handler.handle_command(slack_request) return Response(response=response.get_json(), mimetype="application/json") else: return "Invalid request token." @new_app.route('/slack/action-endpoint', methods=['POST']) def button_response(): requests_handler = new_app.config['HANDLER'] slack_request = utils.slack.SlackRequest(request, SLACK_COMMANDS_TOKEN) if slack_request.is_valid: response = requests_handler.handle_button(slack_request) if response is None: return Response(status=200) return Response(response=response.get_json(), mimetype="application/json") else: return "Invalid request token." return new_app
import random import string import time import praw import requests from flask import Flask, request, Response, redirect, render_template, make_response from flask_sslify import SSLify import snoohelper.utils as utils from snoohelper.utils.credentials import get_token import snoohelper.utils.slack import snoohelper.utils.reddit from .form import SubredditSelectForm, ModulesSelectForm SLACK_APP_ID = get_token("SLACK_APP_ID", "credentials") SLACK_APP_SECRET = get_token("SLACK_APP_SECRET", "credentials") SLACK_COMMANDS_TOKEN = get_token("SLACK_COMMANDS_TOKEN", "credentials") REDDIT_APP_ID = get_token("REDDIT_APP_ID", "credentials") REDDIT_APP_SECRET = get_token("REDDIT_APP_SECRET", "credentials") REDDIT_REDIRECT_URI = get_token("REDDIT_REDIRECT_URI", "credentials") def create_app(teams_controller, handler): new_app = Flask(__name__, template_folder='../webapp/templates') SSLify(new_app) new_app.config['CONTROLLER'] = teams_controller new_app.config['HANDLER'] = handler new_app.config['WTF_CSRF_ENABLED'] = True new_app.config['SECRET_KEY'] = get_token("SECRET_KEY", "credentials") reddits = dict()
from snoohelper.utils.teams import SlackTeamsController from snoohelper.webapp.requests_handler import RequestsHandler from snoohelper.webapp.webapp import create_app from snoohelper.utils.credentials import get_token if __name__ == '__main__': context = ('santihub.crt', 'santihub.key') testing = get_token("testing", "credentials", is_bool=True) if not testing: controller = SlackTeamsController("teams.ini", 'snoohelper_master.db') else: controller = SlackTeamsController("teams_test.ini", 'snoohelper_test.db') handler = RequestsHandler(controller) app = create_app(controller, handler) app.run(host='0.0.0.0', port=5023, ssl_context=context, threaded=True)
import os import matplotlib.pyplot as plt import numpy as np import praw import prawcore.exceptions from imgurpython import ImgurClient from retrying import retry from wordcloud import WordCloud, STOPWORDS import imgurpython.helpers.error from snoohelper.database.models import UserModel from snoohelper.utils import credentials import snoohelper.utils as utils import snoohelper.utils.slack REDDIT_APP_ID = credentials.get_token("REDDIT_APP_ID", "credentials") REDDIT_APP_SECRET = credentials.get_token("REDDIT_APP_SECRET", "credentials") REDDIT_REDIRECT_URI = credentials.get_token("REDDIT_REDIRECT_URI", "credentials") class SummaryGenerator: """Module that generates user summaries. Requires 'read' and 'history' permissions.""" def __init__(self, subreddit, refresh_token, spamcruncher=None, un=None, users_tracked=False, botbans=False): self.imgur = ImgurClient(credentials.get_token("IMGUR_CLIENT_ID", 'credentials'), credentials.get_token("IMGUR_CLIENT_SECRET", 'credentials')) self.users_tracked = users_tracked self.subreddit = subreddit self.un = un