From b0112e05b539fda61d4c0e1df4f776babbe2ad72 Mon Sep 17 00:00:00 2001 From: Philipp Rothmann Date: Sat, 23 Apr 2022 18:49:28 +0200 Subject: [PATCH] foo --- .env.sample | 6 ++++++ app/authentik/test_authentik.py | 2 +- app/event_controller.py | 22 ++++++++++++++------ app/main.py | 37 +++++++++++++++++---------------- app/settings.py | 12 +++++------ app/test_event_controller.py | 4 ++-- 6 files changed, 50 insertions(+), 33 deletions(-) create mode 100644 .env.sample diff --git a/.env.sample b/.env.sample new file mode 100644 index 0000000..166bcdd --- /dev/null +++ b/.env.sample @@ -0,0 +1,6 @@ +AUTHENTIK_BASEURL="http://localhost:9000/" +AUTHENTIK_TOKEN="foobar123" +WEKAN_BASEURL="http://localhost:3000" +WEKAN_USER="api" +WEKAN_PASSWORD="foobar123" + diff --git a/app/authentik/test_authentik.py b/app/authentik/test_authentik.py index b5c26de..c3c2463 100644 --- a/app/authentik/test_authentik.py +++ b/app/authentik/test_authentik.py @@ -21,7 +21,7 @@ def test_get_user_by_username(api: Authentik): is_active=True, attributes={} ) - u = api.get_user(u) + u = api.get_user(u) assert not u == None assert u.username == "akadmin" diff --git a/app/event_controller.py b/app/event_controller.py index 1c48b61..09eca9d 100644 --- a/app/event_controller.py +++ b/app/event_controller.py @@ -3,8 +3,7 @@ from fastapi import FastAPI from app.authentik.api import Authentik from app.authentik.models import User from app.wekan.api import Wekan -from app.settings import AuthentikSettings - +from app.settings import AuthentikSettings, WekanSettings class Authentik_Hook_Model(BaseModel): @@ -19,20 +18,31 @@ class Http_request(BaseModel): path: str method: str -authentikSettings = AuthentikSettings() -class Event_Controller: +authentikSettings = AuthentikSettings() +wekanSettings = WekanSettings() + + +class EventController: def __init__(self): + try: + self.authentik = Authentik( + authentikSettings.token, authentikSettings.baseurl) + self.wekan = Wekan(wekanSettings.baseurl, + wekanSettings.user, wekanSettings.password) + except Exception as e: + raise Exception("Failed to init Api", e) self.jobs = [] pass def register_api(self, authentik: Authentik, wekan: Wekan): - self.authentik = authentik + self.authentik = authentik self.wekan = wekan def handle_model_created_event(self, model: Authentik_Hook_Model): user: User = self.authentik.get_user_by_pk(model.pk) if not self.wekan.get_user(user.name): - self.wekan.create_user(username=user.username, email=user.email, password="") + self.wekan.create_user( + username=user.username, email=user.email, password="") return True diff --git a/app/main.py b/app/main.py index 8c22982..d1cda92 100644 --- a/app/main.py +++ b/app/main.py @@ -6,7 +6,8 @@ from fastapi import Depends, FastAPI, Request, BackgroundTasks from pydantic import BaseModel from app.authentik.api import Authentik from app.authentik.models import User -from app.event_controller import Authentik_Hook_Model, Event_Controller, Http_request +from app.event_controller import Authentik_Hook_Model, EventController, Http_request +from app.settings import AuthentikSettings from .wekan.api import Wekan import json @@ -21,26 +22,26 @@ async def root(): @app.post("/authentik/hook/") async def hook(model: Authentik_Hook_Model, http_request: Http_request, - event_controller: Event_Controller = Depends()): + ec: EventController = Depends()): logging.info(model) logging.info(http_request) if http_request.path == "/api/v3/core/users/": - event_controller.handle_model_created_event(model) + ec.handle_model_created_event(model) return 200 -# @app.get("/authentik/create_hook/") -# async def hook(request: Request): -# a = Authentik(base="http://localhost:9000/", token="foobar123") -# res = a.create_web_hook() -# logging.info(res) +@app.get("/authentik/create_hook/") +async def hook(request: Request): + a = Authentik(base="http://localhost:9000/", token="foobar123") + res = a.create_web_hook(hook_endpoint="http://172.17.0.1:8000/authentik/hook/") # docker localhost + 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 -# return e -# logging.info(user) -# return user.dict +@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 + return e + logging.info(user) + return user.dict diff --git a/app/settings.py b/app/settings.py index e3d14c6..1c31964 100644 --- a/app/settings.py +++ b/app/settings.py @@ -2,17 +2,17 @@ from pydantic import BaseSettings, Field class WekanSettings(BaseSettings): - baseurl: str - user: str - password: str - + baseurl: str = "" + user: str = "" + password: str = "" + class Config: env_file = '.env' env_prefix = 'WEKAN_' class AuthentikSettings(BaseSettings): - baseurl: str - token: str + baseurl: str = "" + token: str = "" class Config: env_file = '.env' diff --git a/app/test_event_controller.py b/app/test_event_controller.py index 81e6ebe..cd49622 100644 --- a/app/test_event_controller.py +++ b/app/test_event_controller.py @@ -1,6 +1,6 @@ from app.authentik.models import User from pytest_mock import MockerFixture -from .event_controller import Authentik_Hook_Model, Event_Controller +from .event_controller import Authentik_Hook_Model, EventController import pytest @@ -11,7 +11,7 @@ def test_handle_model_created_event(mocker: MockerFixture): authentik_mock = mocker.MagicMock() authentik_mock.get_user_by_pk.return_value = mock_user model = Authentik_Hook_Model(pk=mock_user.pk, app="authentik_core", name=mock_user.name, model_name="user") - ec = Event_Controller() + ec = EventController() ec.register_api(authentik_mock, wekan_mock) ec.handle_model_created_event(model) ec.authentik.get_user_by_pk.assert_called()