move slack_listen to doorboy-proxy
This commit is contained in:
@@ -1,73 +0,0 @@
|
||||
import threading
|
||||
import time
|
||||
from datetime import datetime
|
||||
|
||||
import const
|
||||
from flask import Blueprint, g, request
|
||||
from pymongo import MongoClient
|
||||
|
||||
page_api = Blueprint("api", __name__)
|
||||
db = MongoClient(const.MONGO_URI).get_default_database()
|
||||
|
||||
@page_api.route("/api/slack/doorboy", methods=['POST'])
|
||||
def view_slack_doorboy():
|
||||
begin_time = time.perf_counter()
|
||||
if request.form.get("token") != const.SLACK_VERIFICATION_TOKEN:
|
||||
return "Invalid token was supplied"
|
||||
if request.form.get("channel_id") not in ("C01CWPF5H8W", "CDL9H8Q9W"):
|
||||
return "Invalid channel was supplied"
|
||||
command = request.form.get("command")
|
||||
try:
|
||||
door = {
|
||||
"/open-all-doors": "outsidedoors",
|
||||
"/open-back-door": "backdoor",
|
||||
"/open-front-door": "frontdoor",
|
||||
"/open-ground-door": "grounddoor",
|
||||
"/open-workshop-door": "workshopdoor"
|
||||
}[command]
|
||||
except KeyError:
|
||||
return "Invalid command was supplied"
|
||||
|
||||
member = None
|
||||
for user in g.users:
|
||||
if user.slack_id == request.form.get("user_id"):
|
||||
member = user
|
||||
|
||||
if door == "workshopdoor":
|
||||
access_group = "k-space:workshop"
|
||||
else:
|
||||
access_group = "k-space:floor"
|
||||
approved = access_group in member.groups
|
||||
|
||||
doors = [door]
|
||||
if door == "outsidedoors":
|
||||
doors = ["backdoor", "frontdoor", "grounddoor"]
|
||||
|
||||
status = "Permitted" if approved else "Denied"
|
||||
subject = member.display_name
|
||||
|
||||
threading.Thread(target=handle_slack_door_event, args=(doors, approved, member, door, status, subject)).start()
|
||||
|
||||
end_time = time.perf_counter()
|
||||
print(f"view_slack_doorboy done in {end_time - begin_time:.4f} seconds")
|
||||
|
||||
return_message = "Opening %s for %s" % (door, subject) if approved else "Permission denied"
|
||||
return return_message
|
||||
|
||||
def handle_slack_door_event(doors, approved, member, door, status, subject):
|
||||
begin_time = time.perf_counter()
|
||||
for d in doors:
|
||||
db.eventlog.insert_one({
|
||||
"component": "doorboy",
|
||||
"method": "slack",
|
||||
"timestamp": datetime.utcnow(),
|
||||
"door": d,
|
||||
"approved": approved,
|
||||
"user": {
|
||||
"id": member.username,
|
||||
"name": member.display_name,
|
||||
}
|
||||
})
|
||||
|
||||
end_time = time.perf_counter()
|
||||
print(f"handle_slack_door_event done in {end_time - begin_time:.4f} seconds")
|
@@ -17,5 +17,4 @@ AWS_S3_ENDPOINT_URL = os.environ["AWS_S3_ENDPOINT_URL"]
|
||||
BUCKET_NAME = os.environ["BUCKET_NAME"]
|
||||
INVENTORY_ASSETS_BASE_URL = os.environ["INVENTORY_ASSETS_BASE_URL"]
|
||||
MONGO_URI = os.environ["MONGO_URI"]
|
||||
SLACK_VERIFICATION_TOKEN = os.environ["SLACK_VERIFICATION_TOKEN"] # used to verify (deprecated) incoming requests from slack
|
||||
MACADDRESS_OUTLINK_BASEURL = os.environ["MACADDRESS_OUTLINK_BASEURL"]
|
||||
|
@@ -25,9 +25,8 @@ from wtforms import (
|
||||
import const
|
||||
from common import devenv, format_name, get_users, User
|
||||
from inventory import page_inventory
|
||||
from oidc import page_oidc, login_required, read_user
|
||||
from oidc import page_oidc, login_required
|
||||
from doorboy import page_doorboy
|
||||
from api import page_api
|
||||
|
||||
def check_foreign_key_format(item):
|
||||
owner = item.get("inventory", {}).get("owner", {})
|
||||
@@ -124,7 +123,6 @@ app = Flask(__name__)
|
||||
app.wsgi_app = ReverseProxied(app.wsgi_app)
|
||||
app.register_blueprint(page_inventory)
|
||||
app.register_blueprint(page_oidc)
|
||||
app.register_blueprint(page_api)
|
||||
app.register_blueprint(page_doorboy)
|
||||
metrics = PrometheusMetrics(app, group_by="path")
|
||||
|
||||
|
Reference in New Issue
Block a user