diff options
Diffstat (limited to 'pysite')
-rw-r--r-- | pysite/constants.py | 20 | ||||
-rw-r--r-- | pysite/tables.py | 8 | ||||
-rw-r--r-- | pysite/views/api/bot/clean.py | 45 | ||||
-rw-r--r-- | pysite/views/main/bot/cleanlog.py | 35 |
4 files changed, 108 insertions, 0 deletions
diff --git a/pysite/constants.py b/pysite/constants.py index 69c73492..d7453871 100644 --- a/pysite/constants.py +++ b/pysite/constants.py @@ -101,6 +101,26 @@ JAM_QUESTION_TYPES = [ "slider" ] +# Server role colors +ROLE_COLORS = { + "owners": "#ffa3a1", + "admins": "#e76e6c", + "moderators": "#ce3c42", + "python": "#6f9fed", + "bots": "#6f9fed", + "admin bots": "#6f9fed", + "devops": "#a1d1ff", + "helpers": "#e0b000", + "subreddit moderators": "#d897ed", + "partners": "#b66fed", + "streamers": "#833cba", + "developers": "#fcfcfc", + "muted": "#fcfcfc", + "code jam champions": "#b108b4", + "jammers": "#258639", + "contributors": "#55cc6c" +} + # CSRF CSRF = CSRFProtect() diff --git a/pysite/tables.py b/pysite/tables.py index 6eeda60e..65a4db16 100644 --- a/pysite/tables.py +++ b/pysite/tables.py @@ -16,6 +16,14 @@ TABLES = { ]) ), + "clean_logs": Table( # Logs of cleanups done by the clean bot commands + primary_key="id", + keys=sorted([ + "id", + "log_data" + ]) + ), + "hiphopify": Table( # Users in hiphop prison primary_key="user_id", keys=sorted([ diff --git a/pysite/views/api/bot/clean.py b/pysite/views/api/bot/clean.py new file mode 100644 index 00000000..f914c03c --- /dev/null +++ b/pysite/views/api/bot/clean.py @@ -0,0 +1,45 @@ +from flask import jsonify +from schema import Schema + +from pysite.base_route import APIView +from pysite.constants import ValidationTypes +from pysite.decorators import api_key, api_params +from pysite.mixins import DBMixin + +POST_SCHEMA = Schema({ + 'log_data': [ + { + "author": str, + "content": str, + "timestamp": str, + "role": str + } + ] +}) + + +class CleanView(APIView, DBMixin): + path = '/bot/clean' + name = 'bot.clean' + table_name = 'clean_logs' + + @api_key + @api_params(schema=POST_SCHEMA, validation_type=ValidationTypes.json) + def post(self, data): + """ + Receive some log_data from a bulk deletion, + and store it in the database. + + Returns an ID which can be used to get the data + from the /bot/clean_logs/<id> endpoint. + """ + + # Insert and return the id to use for GET + insert = self.db.insert( + self.table_name, + { + "log_data": data["log_data"] + } + ) + + return jsonify({"log_id": insert['generated_keys'][0]}) diff --git a/pysite/views/main/bot/cleanlog.py b/pysite/views/main/bot/cleanlog.py new file mode 100644 index 00000000..1c90dc0b --- /dev/null +++ b/pysite/views/main/bot/cleanlog.py @@ -0,0 +1,35 @@ +import logging + +from pysite.base_route import RouteView +from pysite.constants import ALL_STAFF_ROLES, ROLE_COLORS +from pysite.decorators import require_roles +from pysite.mixins import DBMixin, OAuthMixin + +log = logging.getLogger(__name__) + + +class CleanLogView(RouteView, DBMixin, OAuthMixin): + path = "/bot/clean_logs/<log_id>" + name = "bot.clean_logs" + + table_name = "clean_logs" + template = "main/bot/clean_logs.html" + + @require_roles(ALL_STAFF_ROLES) + def get(self, log_id): + """ + Get the requested clean log and spit it out + in a beautiful template. + """ + + data = self.db.get(self.table_name, log_id) + + if data is None: + return "ID could not be found in the database", 404 + + messages = data["log_data"] + + for message in messages: + message['color'] = ROLE_COLORS.get(message['role'], ROLE_COLORS['developers']) + + return self.render(self.template, messages=messages) |