-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.py
64 lines (47 loc) · 1.74 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
"""
BSidesTLV Slack Bot
* Moderator: Evaluates messages and attachments against moderatecontent.com API
* CTFd: Announces new solves
"""
import os
import sys
import logging
import redis
import json_logging
from slack import WebClient
from dotenv import load_dotenv
from flask import Flask
from flask_cors import CORS
from slackeventsapi import SlackEventAdapter
from ctfd import CTFd
load_dotenv()
PORT = int(os.getenv('PORT', '3000'))
DEBUG = os.getenv('DEBUG')
LOG_LEVEL = os.getenv('LOG_LEVEL', 'DEBUG')
REPLACE_TEXT = os.getenv('REPLACE_TEXT', '***')
BAD_MESSAGE_POST = 'Your message `{:s}` was removed because it had bad words.'
REDIS_URL = os.getenv('REDIS_URL')
SLACK_BOT_TOKEN = os.getenv('SLACK_BOT_TOKEN')
SLACK_ADMIN_TOKEN = os.getenv('SLACK_ADMIN_TOKEN')
SLACK_SIGNING_SECRET = os.getenv('SLACK_SIGNING_SECRET')
MODERATE_CONTENT_KEY = os.getenv('MODERATE_CONTENT_KEY')
logging.basicConfig(level=LOG_LEVEL)
logger = logging.getLogger(__name__)
json_logging.config_root_logger()
app = Flask('slackmoderator')
json_logging.init_flask(enable_json=True)
if not DEBUG:
json_logging.init_request_instrument(app)
with app.app_context():
REQUIRED_KEYS = [REDIS_URL, SLACK_SIGNING_SECRET, MODERATE_CONTENT_KEY, SLACK_BOT_TOKEN]
if not all(REQUIRED_KEYS):
logger.critical('%s must be set.', REQUIRED_KEYS)
sys.exit(1)
slack_client = WebClient(SLACK_BOT_TOKEN)
slack_admin_client = WebClient(SLACK_ADMIN_TOKEN)
slack_events_adapter = SlackEventAdapter(SLACK_SIGNING_SECRET, "/", server=app)
r = redis.Redis().from_url(REDIS_URL)
CORS(app)
ctfd = CTFd(app, base_url='https://ctf20.bsidestlv.com/api/v1/', redis=r, slack_client=slack_client)
if __name__ == '__main__':
app.run(port=PORT, debug=DEBUG)