Remove models, update settings

This commit is contained in:
Christian Cueni 2022-04-04 11:46:39 +02:00
parent 95e1228269
commit 796db1e83b
9 changed files with 205 additions and 84 deletions

View File

@ -448,6 +448,21 @@ if "django_redis.cache.RedisCache" in env("VBV_DJANGO_CACHE_BACKEND", default=""
} }
} }
# OAuth/OpenId Connect
OAUTH = {
"client_name": env("OAUTH_CLIENT_NAME", default="lernetz"),
"client_id": env("OAUTH_CLIENT_ID", default=""),
"client_secret": env("OAUTH_CLIENT_SECRET", default=""),
"access_token_url": env("OAUTH_ACCESS_TOKEN_URL", default="https://sso.test.b.lernetz.host/auth/realms/vbv/protocol/openid-connect/token"),
"authorize_url": env("OAUTH_AUTHORIZE_URL", default="https://sso.test.b.lernetz.host/auth/realms/vbv/protocol/openid-connect/tokenk"),
"api_base_url": env("OAUTH_API_BASE_URL", default="https://sso.test.b.lernetz.host/auth/realms/vbv/protocol/openid-connect/"),
"local_redirect_uri": env("OAUTH_LOCAL_DIRECT_URI", default="http://localhost:8000/api/oauth/callback/"),
'client_kwargs': {
'scope': '',
}
}
if DJANGO_DEV_MODE == "development": if DJANGO_DEV_MODE == "development":
# http://whitenoise.evans.io/en/latest/django.html#using-whitenoise-in-development # http://whitenoise.evans.io/en/latest/django.html#using-whitenoise-in-development
INSTALLED_APPS = ["whitenoise.runserver_nostatic"] + INSTALLED_APPS # noqa F405 INSTALLED_APPS = ["whitenoise.runserver_nostatic"] + INSTALLED_APPS # noqa F405

View File

@ -1,3 +1,9 @@
export VBV_DATABASE_URL='postgres://vbv_lernwelt@localhost:5432/vbv_lernwelt' export VBV_DATABASE_URL='postgres://vbv_lernwelt@localhost:5432/vbv_lernwelt'
#export VBV_DJANGO_LOGGING_CONF=VBV_DJANGO_LOGGING_CONF_CONSOLE_COLOR #export VBV_DJANGO_LOGGING_CONF=VBV_DJANGO_LOGGING_CONF_CONSOLE_COLOR
export VBV_DJANGO_DEBUG=True export VBV_DJANGO_DEBUG=True
export OAUTH_CLIENT_ID=iterativ
export OAUTH_CLIENT_SECRET=abced-1234
export OAUTH_ACCESS_TOKEN_URL=https://sso.test.b.lernetz.host/auth/realms/vbv/protocol/openid-connect/token
export OAUTH_AUTHORIZE_URL=https://sso.test.b.lernetz.host/auth/realms/vbv/protocol/openid-connect/auth
export OAUTH_API_BASE_URL=https://sso.test.b.lernetz.host/auth/realms/vbv/protocol/openid-connect/
export OAUTH_LOCAL_REDIRECT_URI=http://localhost:8000/api/oauth/callback/

View File

@ -2,8 +2,10 @@
# This file is autogenerated by pip-compile with python 3.10 # This file is autogenerated by pip-compile with python 3.10
# To update, run: # To update, run:
# #
# pip-compile --output-file=requirements-dev.txt requirements-dev.in # pip-compile requirements-dev.in
# #
anyio==3.5.0
# via watchgod
appnope==0.1.2 appnope==0.1.2
# via ipython # via ipython
argon2-cffi==21.3.0 argon2-cffi==21.3.0
@ -14,52 +16,60 @@ asgiref==3.5.0
# via # via
# django # django
# uvicorn # uvicorn
astroid==2.9.3 astroid==2.11.2
# via pylint # via pylint
asttokens==2.0.5 asttokens==2.0.5
# via stack-data # via stack-data
async-timeout==4.0.2
# via redis
attrs==21.4.0 attrs==21.4.0
# via # via
# jsonschema # jsonschema
# pytest # pytest
authlib==1.0.0
# via -r requirements.in
backcall==0.2.0 backcall==0.2.0
# via ipython # via ipython
black==22.1.0 black==22.3.0
# via # via -r requirements-dev.in
# -r requirements-dev.in
# ipython
certifi==2021.10.8 certifi==2021.10.8
# via # via
# requests # requests
# sentry-sdk # sentry-sdk
cffi==1.15.0 cffi==1.15.0
# via argon2-cffi-bindings # via
# argon2-cffi-bindings
# cryptography
cfgv==3.3.1 cfgv==3.3.1
# via pre-commit # via pre-commit
charset-normalizer==2.0.11 charset-normalizer==2.0.12
# via requests # via requests
click==8.0.3 click==8.1.1
# via # via
# black # black
# django-click # django-click
# pip-tools # pip-tools
# uvicorn # uvicorn
concurrent-log-handler==0.9.19 concurrent-log-handler==0.9.20
# via -r requirements.in # via -r requirements.in
coreapi==2.3.3 coreapi==2.3.3
# via djangorestframework-stubs # via djangorestframework-stubs
coreschema==0.0.4 coreschema==0.0.4
# via coreapi # via coreapi
coverage==6.3.1 coverage==6.3.2
# via # via
# -r requirements-dev.in # -r requirements-dev.in
# django-coverage-plugin # django-coverage-plugin
cryptography==36.0.2
# via authlib
decorator==5.1.1 decorator==5.1.1
# via # via
# ipdb # ipdb
# ipython # ipython
deprecated==1.2.13 deprecated==1.2.13
# via redis # via redis
dill==0.3.4
# via pylint
distlib==0.3.4 distlib==0.3.4
# via virtualenv # via virtualenv
dj-database-url==0.5.0 dj-database-url==0.5.0
@ -87,7 +97,7 @@ django-debug-toolbar==3.2.4
# via -r requirements-dev.in # via -r requirements-dev.in
django-extensions==3.1.5 django-extensions==3.1.5
# via -r requirements-dev.in # via -r requirements-dev.in
django-htmx==1.8.0 django-htmx==1.9.0
# via -r requirements.in # via -r requirements.in
django-ipware==4.0.2 django-ipware==4.0.2
# via -r requirements.in # via -r requirements.in
@ -97,11 +107,11 @@ django-ratelimit==3.0.1
# via -r requirements.in # via -r requirements.in
django-redis==5.2.0 django-redis==5.2.0
# via -r requirements.in # via -r requirements.in
django-stubs==1.9.0 django-stubs==1.10.1
# via # via
# -r requirements-dev.in # -r requirements-dev.in
# djangorestframework-stubs # djangorestframework-stubs
django-stubs-ext==0.3.1 django-stubs-ext==0.4.0
# via django-stubs # via django-stubs
djangorestframework==3.13.1 djangorestframework==3.13.1
# via # via
@ -109,17 +119,17 @@ djangorestframework==3.13.1
# drf-spectacular # drf-spectacular
djangorestframework-stubs==1.4.0 djangorestframework-stubs==1.4.0
# via -r requirements-dev.in # via -r requirements-dev.in
drf-spectacular==0.21.2 drf-spectacular==0.22.0
# via -r requirements.in # via -r requirements.in
environs==9.5.0 environs==9.5.0
# via -r requirements.in # via -r requirements.in
executing==0.8.2 executing==0.8.3
# via stack-data # via stack-data
factory-boy==3.2.1 factory-boy==3.2.1
# via -r requirements-dev.in # via -r requirements-dev.in
faker==12.0.0 faker==13.3.4
# via factory-boy # via factory-boy
filelock==3.4.2 filelock==3.6.0
# via virtualenv # via virtualenv
flake8==4.0.1 flake8==4.0.1
# via # via
@ -139,19 +149,21 @@ h11==0.13.0
# via uvicorn # via uvicorn
hiredis==2.0.0 hiredis==2.0.0
# via -r requirements.in # via -r requirements.in
httptools==0.3.0 httptools==0.4.0
# via uvicorn # via uvicorn
identify==2.4.7 identify==2.4.12
# via pre-commit # via pre-commit
idna==3.3 idna==3.3
# via requests # via
# anyio
# requests
inflection==0.5.1 inflection==0.5.1
# via drf-spectacular # via drf-spectacular
iniconfig==1.1.1 iniconfig==1.1.1
# via pytest # via pytest
ipdb==0.13.9 ipdb==0.13.9
# via -r requirements-dev.in # via -r requirements-dev.in
ipython==8.0.1 ipython==8.2.0
# via ipdb # via ipdb
isort==5.10.1 isort==5.10.1
# via # via
@ -161,15 +173,15 @@ itypes==1.2.0
# via coreapi # via coreapi
jedi==0.18.1 jedi==0.18.1
# via ipython # via ipython
jinja2==3.0.3 jinja2==3.1.1
# via coreschema # via coreschema
jsonschema==4.4.0 jsonschema==4.4.0
# via drf-spectacular # via drf-spectacular
lazy-object-proxy==1.7.1 lazy-object-proxy==1.7.1
# via astroid # via astroid
markupsafe==2.0.1 markupsafe==2.1.1
# via jinja2 # via jinja2
marshmallow==3.14.1 marshmallow==3.15.0
# via environs # via environs
matplotlib-inline==0.1.3 matplotlib-inline==0.1.3
# via ipython # via ipython
@ -177,7 +189,7 @@ mccabe==0.6.1
# via # via
# flake8 # flake8
# pylint # pylint
mypy==0.931 mypy==0.942
# via # via
# -r requirements-dev.in # -r requirements-dev.in
# django-stubs # django-stubs
@ -190,6 +202,7 @@ nodeenv==1.6.0
# via pre-commit # via pre-commit
packaging==21.3 packaging==21.3
# via # via
# marshmallow
# pytest # pytest
# pytest-sugar # pytest-sugar
# redis # redis
@ -203,22 +216,22 @@ pexpect==4.8.0
# via ipython # via ipython
pickleshare==0.7.5 pickleshare==0.7.5
# via ipython # via ipython
pillow==9.0.0 pillow==9.0.1
# via -r requirements.in # via -r requirements.in
pip-tools==6.4.0 pip-tools==6.5.1
# via -r requirements-dev.in # via -r requirements-dev.in
platformdirs==2.4.1 platformdirs==2.5.1
# via # via
# black # black
# pylint # pylint
# virtualenv # virtualenv
pluggy==1.0.0 pluggy==1.0.0
# via pytest # via pytest
portalocker==2.3.2 portalocker==2.4.0
# via concurrent-log-handler # via concurrent-log-handler
pre-commit==2.17.0 pre-commit==2.17.0
# via -r requirements-dev.in # via -r requirements-dev.in
prompt-toolkit==3.0.26 prompt-toolkit==3.0.28
# via ipython # via ipython
psycopg2-binary==2.9.3 psycopg2-binary==2.9.3
# via -r requirements.in # via -r requirements.in
@ -236,11 +249,11 @@ pyflakes==2.4.0
# via flake8 # via flake8
pygments==2.11.2 pygments==2.11.2
# via ipython # via ipython
pylint==2.12.2 pylint==2.13.4
# via # via
# pylint-django # pylint-django
# pylint-plugin-utils # pylint-plugin-utils
pylint-django==2.5.0 pylint-django==2.5.3
# via -r requirements-dev.in # via -r requirements-dev.in
pylint-plugin-utils==0.7 pylint-plugin-utils==0.7
# via pylint-django # via pylint-django
@ -248,7 +261,7 @@ pyparsing==3.0.7
# via packaging # via packaging
pyrsistent==0.18.1 pyrsistent==0.18.1
# via jsonschema # via jsonschema
pytest==6.2.5 pytest==7.1.1
# via # via
# -r requirements-dev.in # -r requirements-dev.in
# pytest-django # pytest-django
@ -259,15 +272,15 @@ pytest-sugar==0.9.4
# via -r requirements-dev.in # via -r requirements-dev.in
python-dateutil==2.8.2 python-dateutil==2.8.2
# via faker # via faker
python-dotenv==0.19.2 python-dotenv==0.20.0
# via # via
# environs # environs
# uvicorn # uvicorn
python-json-logger==2.0.2 python-json-logger==2.0.2
# via -r requirements.in # via -r requirements.in
python-slugify==5.0.2 python-slugify==6.1.1
# via -r requirements.in # via -r requirements.in
pytz==2021.3 pytz==2022.1
# via # via
# -r requirements.in # -r requirements.in
# django # django
@ -277,7 +290,7 @@ pyyaml==6.0
# drf-spectacular # drf-spectacular
# pre-commit # pre-commit
# uvicorn # uvicorn
redis==4.1.2 redis==4.2.1
# via # via
# -r requirements.in # -r requirements.in
# django-redis # django-redis
@ -285,7 +298,7 @@ requests==2.27.1
# via # via
# coreapi # coreapi
# djangorestframework-stubs # djangorestframework-stubs
sentry-sdk==1.5.4 sentry-sdk==1.5.8
# via -r requirements.in # via -r requirements.in
six==1.16.0 six==1.16.0
# via # via
@ -295,32 +308,34 @@ six==1.16.0
# virtualenv # virtualenv
smmap==5.0.0 smmap==5.0.0
# via gitdb # via gitdb
sniffio==1.2.0
# via anyio
sqlparse==0.4.2 sqlparse==0.4.2
# via # via
# django # django
# django-debug-toolbar # django-debug-toolbar
stack-data==0.1.4 stack-data==0.2.0
# via ipython # via ipython
structlog==21.5.0 structlog==21.5.0
# via -r requirements.in # via -r requirements.in
termcolor==1.1.0 termcolor==1.1.0
# via pytest-sugar # via pytest-sugar
testfixtures==6.18.3 testfixtures==6.18.5
# via flake8-isort # via flake8-isort
text-unidecode==1.3 text-unidecode==1.3
# via python-slugify # via python-slugify
toml==0.10.2 toml==0.10.2
# via # via
# django-stubs
# ipdb # ipdb
# pre-commit # pre-commit
# pylint tomli==2.0.1
# pytest
tomli==2.0.0
# via # via
# black # black
# django-stubs
# mypy # mypy
# pep517 # pep517
# pylint
# pytest
traitlets==5.1.1 traitlets==5.1.1
# via # via
# ipython # ipython
@ -329,11 +344,11 @@ trufflehog==2.2.1
# via -r requirements-dev.in # via -r requirements-dev.in
trufflehogregexes==0.0.7 trufflehogregexes==0.0.7
# via trufflehog # via trufflehog
types-pytz==2021.3.4 types-pytz==2021.3.6
# via django-stubs # via django-stubs
types-pyyaml==6.0.4 types-pyyaml==6.0.5
# via django-stubs # via django-stubs
typing-extensions==4.0.1 typing-extensions==4.1.1
# via # via
# django-stubs # django-stubs
# django-stubs-ext # django-stubs-ext
@ -343,33 +358,33 @@ uritemplate==4.1.1
# via # via
# coreapi # coreapi
# drf-spectacular # drf-spectacular
urllib3==1.26.8 urllib3==1.26.9
# via # via
# requests # requests
# sentry-sdk # sentry-sdk
uvicorn[standard]==0.17.1 uvicorn[standard]==0.17.6
# via -r requirements.in # via -r requirements.in
uvloop==0.16.0 uvloop==0.16.0
# via uvicorn # via uvicorn
virtualenv==20.13.0 virtualenv==20.14.0
# via pre-commit # via pre-commit
watchdog==2.1.6 watchdog==2.1.7
# via werkzeug # via werkzeug
watchgod==0.7 watchgod==0.8.1
# via # via
# -r requirements-dev.in # -r requirements-dev.in
# uvicorn # uvicorn
wcwidth==0.2.5 wcwidth==0.2.5
# via prompt-toolkit # via prompt-toolkit
websockets==10.1 websockets==10.2
# via uvicorn # via uvicorn
werkzeug[watchdog]==2.0.2 werkzeug[watchdog]==2.1.0
# via -r requirements-dev.in # via -r requirements-dev.in
wheel==0.37.1 wheel==0.37.1
# via pip-tools # via pip-tools
whitenoise==5.3.0 whitenoise==6.0.0
# via -r requirements.in # via -r requirements.in
wrapt==1.13.3 wrapt==1.14.0
# via # via
# astroid # astroid
# deprecated # deprecated

View File

@ -1,3 +1,4 @@
Authlib
pytz # https://github.com/stub42/pytz pytz # https://github.com/stub42/pytz
python-slugify # https://github.com/un33k/python-slugify python-slugify # https://github.com/un33k/python-slugify
Pillow # https://github.com/python-pillow/Pillow Pillow # https://github.com/python-pillow/Pillow

View File

@ -2,8 +2,10 @@
# This file is autogenerated by pip-compile with python 3.10 # This file is autogenerated by pip-compile with python 3.10
# To update, run: # To update, run:
# #
# pip-compile --output-file=requirements.txt requirements.in # pip-compile requirements.in
# #
anyio==3.5.0
# via watchgod
argon2-cffi==21.3.0 argon2-cffi==21.3.0
# via -r requirements.in # via -r requirements.in
argon2-cffi-bindings==21.2.0 argon2-cffi-bindings==21.2.0
@ -12,18 +14,26 @@ asgiref==3.5.0
# via # via
# django # django
# uvicorn # uvicorn
async-timeout==4.0.2
# via redis
attrs==21.4.0 attrs==21.4.0
# via jsonschema # via jsonschema
authlib==1.0.0
# via -r requirements.in
certifi==2021.10.8 certifi==2021.10.8
# via sentry-sdk # via sentry-sdk
cffi==1.15.0 cffi==1.15.0
# via argon2-cffi-bindings # via
click==8.0.3 # argon2-cffi-bindings
# cryptography
click==8.1.1
# via # via
# django-click # django-click
# uvicorn # uvicorn
concurrent-log-handler==0.9.19 concurrent-log-handler==0.9.20
# via -r requirements.in # via -r requirements.in
cryptography==36.0.2
# via authlib
deprecated==1.2.13 deprecated==1.2.13
# via redis # via redis
dj-database-url==0.5.0 dj-database-url==0.5.0
@ -41,7 +51,7 @@ django-click==2.3.0
# via -r requirements.in # via -r requirements.in
django-cors-headers==3.11.0 django-cors-headers==3.11.0
# via -r requirements.in # via -r requirements.in
django-htmx==1.8.0 django-htmx==1.9.0
# via -r requirements.in # via -r requirements.in
django-ipware==4.0.2 django-ipware==4.0.2
# via -r requirements.in # via -r requirements.in
@ -55,7 +65,7 @@ djangorestframework==3.13.1
# via # via
# -r requirements.in # -r requirements.in
# drf-spectacular # drf-spectacular
drf-spectacular==0.21.2 drf-spectacular==0.22.0
# via -r requirements.in # via -r requirements.in
environs==9.5.0 environs==9.5.0
# via -r requirements.in # via -r requirements.in
@ -65,19 +75,23 @@ h11==0.13.0
# via uvicorn # via uvicorn
hiredis==2.0.0 hiredis==2.0.0
# via -r requirements.in # via -r requirements.in
httptools==0.3.0 httptools==0.4.0
# via uvicorn # via uvicorn
idna==3.3
# via anyio
inflection==0.5.1 inflection==0.5.1
# via drf-spectacular # via drf-spectacular
jsonschema==4.4.0 jsonschema==4.4.0
# via drf-spectacular # via drf-spectacular
marshmallow==3.14.1 marshmallow==3.15.0
# via environs # via environs
packaging==21.3 packaging==21.3
# via redis # via
pillow==9.0.0 # marshmallow
# redis
pillow==9.0.1
# via -r requirements.in # via -r requirements.in
portalocker==2.3.2 portalocker==2.4.0
# via concurrent-log-handler # via concurrent-log-handler
psycopg2-binary==2.9.3 psycopg2-binary==2.9.3
# via -r requirements.in # via -r requirements.in
@ -87,15 +101,15 @@ pyparsing==3.0.7
# via packaging # via packaging
pyrsistent==0.18.1 pyrsistent==0.18.1
# via jsonschema # via jsonschema
python-dotenv==0.19.2 python-dotenv==0.20.0
# via # via
# environs # environs
# uvicorn # uvicorn
python-json-logger==2.0.2 python-json-logger==2.0.2
# via -r requirements.in # via -r requirements.in
python-slugify==5.0.2 python-slugify==6.1.1
# via -r requirements.in # via -r requirements.in
pytz==2021.3 pytz==2022.1
# via # via
# -r requirements.in # -r requirements.in
# django # django
@ -104,12 +118,14 @@ pyyaml==6.0
# via # via
# drf-spectacular # drf-spectacular
# uvicorn # uvicorn
redis==4.1.2 redis==4.2.1
# via # via
# -r requirements.in # -r requirements.in
# django-redis # django-redis
sentry-sdk==1.5.4 sentry-sdk==1.5.8
# via -r requirements.in # via -r requirements.in
sniffio==1.2.0
# via anyio
sqlparse==0.4.2 sqlparse==0.4.2
# via django # via django
structlog==21.5.0 structlog==21.5.0
@ -118,19 +134,19 @@ text-unidecode==1.3
# via python-slugify # via python-slugify
uritemplate==4.1.1 uritemplate==4.1.1
# via drf-spectacular # via drf-spectacular
urllib3==1.26.8 urllib3==1.26.9
# via sentry-sdk # via sentry-sdk
uvicorn[standard]==0.17.1 uvicorn[standard]==0.17.6
# via -r requirements.in # via -r requirements.in
uvloop==0.16.0 uvloop==0.16.0
# via uvicorn # via uvicorn
watchgod==0.7 watchgod==0.8.1
# via uvicorn # via uvicorn
websockets==10.1 websockets==10.2
# via uvicorn # via uvicorn
whitenoise==5.3.0 whitenoise==6.0.0
# via -r requirements.in # via -r requirements.in
wrapt==1.13.3 wrapt==1.14.0
# via deprecated # via deprecated
# The following packages are considered to be unsafe in a requirements file: # The following packages are considered to be unsafe in a requirements file:

View File

@ -0,0 +1,29 @@
from authlib.integrations.django_client import OAuth
from django.conf import settings
# # https://docs.authlib.org/en/latest/client/frameworks.html#frameworks-clients
# def fetch_token(_name, request):
# try:
# token = OAuth2Token.objects.get(
# user=request.user
# )
# return token.to_token()
# except (OAuth2Token.DoesNotExist, TypeError):
# return None
# oauth = OAuth(fetch_token=fetch_token)
oauth = OAuth()
oauth.register(
name=settings.OAUTH["client_name"],
client_id=settings.OAUTH["client_id"],
client_secret=settings.OAUTH["client_secret"],
request_token_url=None,
request_token_params=None,
access_token_url=settings.OAUTH["access_token_url"],
access_token_params=None,
authorize_url=settings.OAUTH["authorize_url"],
authorize_params=None,
api_base_url=settings.OAUTH["api_base_url"],
client_kwargs=settings.OAUTH["client_kwargs"]
)

View File

@ -1,3 +0,0 @@
from django.db import models
# Create your models here.

View File

@ -0,0 +1,14 @@
from django.urls import path
from django.conf.urls import url, include
from rest_framework.routers import DefaultRouter
from . import views
router = DefaultRouter()
app_name = 'sso'
urlpatterns = [
path(r'^login/', views.login, name='login'),
path(r'^callback/', views.authorize, name='authorize'),
url(r"^sso/", include(router.urls)),
]

View File

@ -1,3 +1,31 @@
from django.shortcuts import render import logging
from authlib.integrations.base_client import OAuthError
from django.conf import settings
from django.shortcuts import redirect
from sentry_sdk import capture_exception
from django.contrib.auth import login as dj_login
# Create your views here. from vbv_lernwelt.sso.client import oauth
logger = logging.getLogger(__name__)
OAUTH_REDIRECT = 'oauth-redirect'
def login(request):
hep_oauth_client = oauth.create_client('hep')
redirect_uri = settings.OAUTH_LOCAL_REDIRECT_URI
return hep_oauth_client.authorize_redirect(request, redirect_uri)
def authorize(request):
try:
logger.debug(request)
except OAuthError as e:
logger.warning(f'OAuth error: {e}')
if not settings.DEBUG:
capture_exception(e)
return redirect(f'/{OAUTH_REDIRECT}?state=someerror')
return redirect(f'/{OAUTH_REDIRECT}?state=success')