event controller

This commit is contained in:
Philipp Rothmann 2022-03-06 15:51:27 +01:00
parent 8fb2a4f7b7
commit b92ea36a94
4 changed files with 42 additions and 16 deletions

8
app/event_controller.py Normal file
View file

@ -0,0 +1,8 @@
class Event_Controller:
def __init__(self):
pass
def handle_model_created_event(self, model):
pass

View file

@ -2,55 +2,67 @@ import logging
import structlog
from unicodedata import name
from urllib.error import HTTPError
from fastapi import FastAPI, Request
from fastapi import Depends, FastAPI, Request
from pydantic import BaseModel
from app.authentik.api import Authentik
from app.authentik.models import User
from app.event_controller import Event_Controller
from .wekan.api import Wekan
import json
logging = structlog.get_logger()
class Hook_Model(BaseModel):
class Authentik_Hook_Model(BaseModel):
pk: str
app: str
name: str
model_name: str
class Http_request(BaseModel):
args: dict
path: str
method: str
app = FastAPI()
@app.get("/")
async def root():
return {'message': 'Hello World'}
@app.post("/authentik/hook/")
async def hook(model: Hook_Model, http_request: Http_request):
async def hook(model: Authentik_Hook_Model,
http_request: Http_request,
event_controller: Event_Controller = Depends(Event_Controller)):
# print(await request.body())
logging.info(model)
logging.info(http_request)
if http_request.path == "/api/v3/core/users/":
event_controller.handle_model_created_event(model)
return 200
# model_created = json.loads(r['body'].split("model_created: ")[1])["model"]
# hook wekan.create_user(model_created["pk"])
@app.get("/authentik/create_hook/")
async def hook(request: Request):
a = Authentik(base="http://localhost:9000/", token="foobar123")
res = a.create_web_hook()
res = a.create_web_hook()
logging.info(res)
@app.get("/authentik/users/create_demo_user/")
async def create_demo_user(request: Request):
a = Authentik(base="http://localhost:9000/", token="foobar123")
try:
user = a.create_user(User(username="demo", name="dmeo", email="foo@example.org"))
except Exception as e: # TODO
user = a.create_user(
User(username="demo", name="dmeo", email="foo@example.org"))
except Exception as e: # TODO
return e
logging.info(user)
return user.dict
return user.dict

View file

@ -8,4 +8,3 @@ class Settings(BaseSettings):
class Config:
env_file = '.env'
nc

View file

@ -2,7 +2,7 @@ from fastapi.testclient import TestClient
from app.wekan.api import Wekan
from .main import app
from .main import Authentik_Hook_Model, app
client = TestClient(app)
@ -24,16 +24,23 @@ def test_hook():
assert response.status_code == 422
# mock = mocker.patch('app.wekan.api.Wekan.create_user',
# return_value='fake user')
# print(mock.mock_calls)
#
def test_hook_model_created(mocker):
mock = mocker.patch('app.wekan.api.Wekan.create_user',
return_value='fake user')
print(mock.mock_calls)
mock = mocker.patch("app.event_controller.Event_Controller.handle_model_created_event")
d = """
{"model": {"pk": 5, "app": "authentik_core", "name": "asd", "model_name": "user"}, "http_request": {"args": {}, "path": "/api/v3/core/users/", "method": "POST"}}
"""
response = client.post("/authentik/hook/", data=d, )
assert response.status_code == 200
# assert len(mock.mock_calls) > 0
# kall = mock.call_args
# assert kall.args[0] == "18"
# assert str(response.text) == 'fake user'
assert len(mock.mock_calls) > 0
kall = mock.call_args
assert type(kall.args[0]) == Authentik_Hook_Model
model: Authentik_Hook_Model = kall.args[0]
assert model.pk == "5"
assert model.app == "authentik_core"
assert model.name == "asd"
assert model.model_name == "user"