This commit is contained in:
Manuel Hude 2021-03-20 15:58:02 +01:00
parent 259fa19a87
commit 764a0c232c
5 changed files with 21988 additions and 27 deletions

View File

@ -17,12 +17,12 @@ from django.conf.urls import url
from django.contrib import admin from django.contrib import admin
from django.urls import path from django.urls import path
from rest_framework.routers import DefaultRouter from rest_framework.routers import DefaultRouter
from app_be.views.rest_api import *
from app_be.views.rest_api import TestApiClass
urlpatterns = [ urlpatterns = [
path('admin/', admin.site.urls), path('admin/', admin.site.urls),
url(r'^test/', TestApiClass.test_api), url(r'^test/', TestApiClass.test_api),
url(r'^api/login', LoginClass.login),
] ]
router = DefaultRouter() router = DefaultRouter()

View File

@ -3,6 +3,9 @@ import logging
from django.http import JsonResponse from django.http import JsonResponse
from rest_framework.decorators import api_view from rest_framework.decorators import api_view
from oauthlib import openid
from py_jwt_validator import PyJwtValidator, PyJwtException
import requests
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -13,3 +16,44 @@ class TestApiClass:
def test_api(request): def test_api(request):
logger.debug('Test api call: {}'.format(request)) logger.debug('Test api call: {}'.format(request))
return JsonResponse({'Result': 'success'}, safe=False) return JsonResponse({'Result': 'success'}, safe=False)
class LoginClass:
@staticmethod
@api_view(['GET'])
def login(request:requests.Request):
logger.debug('Validating request: {}'.format(request))
print(request.headers)
print(request.data)
bearer = request.headers['Authorization']
jwt = bearer.split()[1]
print(jwt)
try:
PyJwtValidator(jwt)
except PyJwtException as e:
print(f"Exception caught. Error: {e}")
return JsonResponse({},status=401)
return JsonResponse({'Result': 'success'}, safe=False, status=200)
def pretty_print_POST(req):
"""
At this point it is completely built and ready
to be fired; it is "prepared".
However pay attention at the formatting used in
this function because it is programmed to be pretty
printed and may differ from the actual request.
"""
print('{}\n{}\r\n{}\r\n\r\n{}'.format(
'-----------START-----------',
req.method + ' ' + req.url,
'\r\n'.join('{}: {}'.format(k, v) for k, v in req.headers.items()),
req.body,
))

View File

@ -17,6 +17,8 @@ setup(
'channels==3.0.1', 'channels==3.0.1',
'channels_redis==3.2.0', 'channels_redis==3.2.0',
'whitenoise==5.2.0', 'whitenoise==5.2.0',
'oauth2==1.1.1',
'oauthlib==3.1.0',
], ],
license='BSD License', # example license license='BSD License', # example license
description='DESCRIPTION' description='DESCRIPTION'

21959
frontend/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -40,7 +40,7 @@ export class LoginComponent implements OnInit {
'Accept': '*/*', 'Accept': '*/*',
'Access-Control-Allow-Origin': '*' 'Access-Control-Allow-Origin': '*'
}; };
this.http.get('https://waecm-sso.inso.tuwien.ac.at/auth/realms/waecm/protocol/openid-connect/logout' + return this.http.get('https://waecm-sso.inso.tuwien.ac.at/auth/realms/waecm/protocol/openid-connect/logout' +
'?id_token_hint=' + this.id_token + '&\n' + '?id_token_hint=' + this.id_token + '&\n' +
'post_logout_redirect_uri=https://localhost:4200/&\n' + 'post_logout_redirect_uri=https://localhost:4200/&\n' +
'state=' + this.state, 'state=' + this.state,
@ -53,9 +53,9 @@ export class LoginComponent implements OnInit {
gotoBackend() { gotoBackend() {
const headerDict = { const headerDict = {
'Authorization': 'Bearer ' + this.id_token 'Authorization': 'Bearer ' + this.id_token,
}; };
this.http.get('https://localhost:8000/api/login', return this.http.get('http://localhost:8000/api/login',
{ {
headers: new HttpHeaders(headerDict) headers: new HttpHeaders(headerDict)
}) })