stuff
This commit is contained in:
parent
4e2f08a5a0
commit
09979ce792
|
|
@ -11,4 +11,6 @@ urlpatterns = [
|
||||||
path('getchatrooms/', views.getchatrooms, name='api-getchatrooms'),
|
path('getchatrooms/', views.getchatrooms, name='api-getchatrooms'),
|
||||||
path('getsinglechat/<int:pk>', views.getsinglechat, name='api-getsinglechat'),
|
path('getsinglechat/<int:pk>', views.getsinglechat, name='api-getsinglechat'),
|
||||||
path('chatnewmessage/', views.savenewchatmessage, name='api-savechatmessage'),
|
path('chatnewmessage/', views.savenewchatmessage, name='api-savechatmessage'),
|
||||||
|
# MIGRATION
|
||||||
|
path('migrateagencyusers/<int:pk>', views.migrateAgencyUsers, name="api-migrateagencyusers")
|
||||||
]
|
]
|
||||||
28
api/views.py
28
api/views.py
|
|
@ -1,6 +1,6 @@
|
||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.permissions import IsAuthenticated # <-- Here
|
#from rest_framework.permissions import IsAuthenticated # <-- Here
|
||||||
import json
|
import json
|
||||||
from standards.models import Standards
|
from standards.models import Standards
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
@ -14,36 +14,37 @@ from django.http import HttpResponseRedirect,HttpResponse, JsonResponse
|
||||||
|
|
||||||
from timemanagement.models import Absence
|
from timemanagement.models import Absence
|
||||||
|
|
||||||
|
|
||||||
class GetUserId(APIView):
|
class GetUserId(APIView):
|
||||||
permission_classes = (IsAuthenticated,) # <-- And here
|
#permission_classes = (IsAuthenticated,) # <-- And here
|
||||||
|
|
||||||
def post(self, request):
|
def post(self, request):
|
||||||
return Response({"userid" : self.request.user.pk})
|
return Response({"userid" : self.request.user.pk})
|
||||||
|
|
||||||
|
|
||||||
@api_view(['POST', ])
|
@api_view(['POST', ])
|
||||||
@permission_classes((IsAuthenticated,))
|
#@permission_classes((IsAuthenticated,))
|
||||||
def getStandardList(request):
|
def getStandardList(request):
|
||||||
standards = Standards.objects.filter(agency=request.user.profile.agency)
|
standards = Standards.objects.filter(agency=request.user.profile.agency)
|
||||||
ser = StandardsSerializer(standards, many=True)
|
ser = StandardsSerializer(standards, many=True)
|
||||||
return Response(ser.data, status=status.HTTP_200_OK)
|
return Response(ser.data, status=status.HTTP_200_OK)
|
||||||
|
|
||||||
@api_view(['POST', ])
|
@api_view(['POST', ])
|
||||||
@permission_classes((IsAuthenticated,))
|
#@permission_classes((IsAuthenticated,))
|
||||||
def getSingleStandard(request, pk):
|
def getSingleStandard(request, pk):
|
||||||
standard = Standards.objects.get(pk=int(pk))
|
standard = Standards.objects.get(pk=int(pk))
|
||||||
ser = StandardsSerializer(standard, many=False)
|
ser = StandardsSerializer(standard, many=False)
|
||||||
return Response(ser.data, status=status.HTTP_200_OK)
|
return Response(ser.data, status=status.HTTP_200_OK)
|
||||||
|
|
||||||
@api_view(['POST', ])
|
@api_view(['POST', ])
|
||||||
@permission_classes((IsAuthenticated,))
|
#@permission_classes((IsAuthenticated,))
|
||||||
def logoutByToken(request):
|
def logoutByToken(request):
|
||||||
print(request)
|
print(request)
|
||||||
request.user.auth_token.delete()
|
request.user.auth_token.delete()
|
||||||
return Response(status=status.HTTP_200_OK)
|
return Response(status=status.HTTP_200_OK)
|
||||||
|
|
||||||
@api_view(['POST', ])
|
@api_view(['POST', ])
|
||||||
@permission_classes((IsAuthenticated,))
|
#@permission_classes((IsAuthenticated,))
|
||||||
def getchatrooms(request):
|
def getchatrooms(request):
|
||||||
chatrooms = ChatRoom.objects.filter(creator=request.user) | ChatRoom.objects.filter(chatmember_single=request.user)
|
chatrooms = ChatRoom.objects.filter(creator=request.user) | ChatRoom.objects.filter(chatmember_single=request.user)
|
||||||
chatrooms_ser = ChatRoomSerializer(chatrooms, many=True)
|
chatrooms_ser = ChatRoomSerializer(chatrooms, many=True)
|
||||||
|
|
@ -51,7 +52,7 @@ def getchatrooms(request):
|
||||||
|
|
||||||
|
|
||||||
@api_view(['POST', ])
|
@api_view(['POST', ])
|
||||||
@permission_classes((IsAuthenticated,))
|
#@permission_classes((IsAuthenticated,))
|
||||||
def getsinglechat(request, pk):
|
def getsinglechat(request, pk):
|
||||||
chatroom = ChatRoom.objects.get(pk=pk)
|
chatroom = ChatRoom.objects.get(pk=pk)
|
||||||
if chatroom.creator == request.user or chatroom.chatmember_single == request.user or (request.user in chatroom.chatmembers.all()):
|
if chatroom.creator == request.user or chatroom.chatmember_single == request.user or (request.user in chatroom.chatmembers.all()):
|
||||||
|
|
@ -62,7 +63,7 @@ def getsinglechat(request, pk):
|
||||||
|
|
||||||
|
|
||||||
@api_view(['POST', ])
|
@api_view(['POST', ])
|
||||||
@permission_classes((IsAuthenticated,))
|
#@permission_classes((IsAuthenticated,))
|
||||||
def savenewchatmessage(request):
|
def savenewchatmessage(request):
|
||||||
room = ChatRoom.objects.get(pk=request.POST["room"])
|
room = ChatRoom.objects.get(pk=request.POST["room"])
|
||||||
if(request.user == room.creator or request.user == room.chatmember_single):
|
if(request.user == room.creator or request.user == room.chatmember_single):
|
||||||
|
|
@ -74,4 +75,15 @@ def savenewchatmessage(request):
|
||||||
else:
|
else:
|
||||||
return Response(status=status.HTTP_403_FORBIDDEN)
|
return Response(status=status.HTTP_403_FORBIDDEN)
|
||||||
|
|
||||||
|
# IMPORTED MODELS FOR MIGRATION
|
||||||
|
from users.models import Agency
|
||||||
|
from django.contrib.auth.models import User
|
||||||
|
|
||||||
|
@api_view(['GET', ])
|
||||||
|
def migrateAgencyUsers(request, pk):
|
||||||
|
datapackage = {}
|
||||||
|
Ag = Agency.objects.get(pk=pk)
|
||||||
|
for user in User.objects.filter(profile__agency=Ag):
|
||||||
|
if(len(user.email) > 0 and len(user.first_name) > 0 and len(user.last_name) > 0):
|
||||||
|
datapackage.update({str(user.pk) : {"userid" : user.email, "displayname" : user.first_name + " " + user.last_name}})
|
||||||
|
return JsonResponse(datapackage)
|
||||||
Binary file not shown.
|
|
@ -109,7 +109,8 @@ MIDDLEWARE = [
|
||||||
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
||||||
'django_user_agents.middleware.UserAgentMiddleware',
|
'django_user_agents.middleware.UserAgentMiddleware',
|
||||||
'simple_history.middleware.HistoryRequestMiddleware',
|
'simple_history.middleware.HistoryRequestMiddleware',
|
||||||
'auditlog.middleware.AuditlogMiddleware'
|
'auditlog.middleware.AuditlogMiddleware',
|
||||||
|
'users.middleware.oauth.OAuthMiddleware'
|
||||||
]
|
]
|
||||||
|
|
||||||
ROOT_URLCONF = 'digitaleagentur.urls'
|
ROOT_URLCONF = 'digitaleagentur.urls'
|
||||||
|
|
@ -132,15 +133,18 @@ TEMPLATES = [
|
||||||
|
|
||||||
REST_FRAMEWORK = {
|
REST_FRAMEWORK = {
|
||||||
'DEFAULT_AUTHENTICATION_CLASSES': (
|
'DEFAULT_AUTHENTICATION_CLASSES': (
|
||||||
'rest_framework.authentication.TokenAuthentication',
|
#'rest_framework.authentication.TokenAuthentication',
|
||||||
|
#'rest_framework.permissions.AllowAny',
|
||||||
),
|
),
|
||||||
'DEFAULT_PERMISSION_CLASSES': [
|
#'DEFAULT_PERMISSION_CLASSES': [
|
||||||
'rest_framework.permissions.IsAuthenticated',
|
# 'rest_framework.permissions.IsAuthenticated',
|
||||||
],
|
#],
|
||||||
}
|
}
|
||||||
|
|
||||||
#WSGI_APPLICATION = 'digitaleagentur.wsgi.application'
|
#WSGI_APPLICATION = 'digitaleagentur.wsgi.application'
|
||||||
ASGI_APPLICATION = "digitaleagentur.routing.application"
|
ASGI_APPLICATION = "digitaleagentur.routing.application"
|
||||||
|
|
||||||
|
|
||||||
CHANNEL_LAYERS = {
|
CHANNEL_LAYERS = {
|
||||||
'default': {
|
'default': {
|
||||||
'BACKEND': 'channels_redis.core.RedisChannelLayer',
|
'BACKEND': 'channels_redis.core.RedisChannelLayer',
|
||||||
|
|
@ -152,6 +156,7 @@ CHANNEL_LAYERS = {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Password validation
|
# Password validation
|
||||||
# https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators
|
# https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -36,3 +36,4 @@ xhtml2pdf==0.2.5
|
||||||
django-simple-captcha==0.5.13
|
django-simple-captcha==0.5.13
|
||||||
auditlog3==1.0.1
|
auditlog3==1.0.1
|
||||||
filetype==1.0.7
|
filetype==1.0.7
|
||||||
|
Authlib==0.15.3
|
||||||
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1,108 @@
|
||||||
|
from authlib.integrations.base_client import OAuthError
|
||||||
|
from authlib.integrations.django_client import OAuth
|
||||||
|
from authlib.oauth2.rfc6749 import OAuth2Token
|
||||||
|
from django.shortcuts import redirect
|
||||||
|
from django.utils.deprecation import MiddlewareMixin
|
||||||
|
from users.models import Agency, Profile
|
||||||
|
from django.contrib.auth.models import User
|
||||||
|
from django.contrib.auth import login
|
||||||
|
from digitaleagentur import settings
|
||||||
|
|
||||||
|
class OAuthMiddleware(MiddlewareMixin):
|
||||||
|
|
||||||
|
def __init__(self, get_response=None):
|
||||||
|
super().__init__(get_response)
|
||||||
|
self.oauth = OAuth()
|
||||||
|
|
||||||
|
def process_request(self, request):
|
||||||
|
if settings.OAUTH_URL_WHITELISTS is not None:
|
||||||
|
for w in settings.OAUTH_URL_WHITELISTS:
|
||||||
|
if request.path.startswith(w):
|
||||||
|
return self.get_response(request)
|
||||||
|
|
||||||
|
def update_token(token, refresh_token, access_token):
|
||||||
|
request.session['token'] = token
|
||||||
|
return None
|
||||||
|
|
||||||
|
# Check, if logged user is in Database - if not, create and save by SUB
|
||||||
|
def checkUserInDatabase(userdata):
|
||||||
|
# Get sub of current user
|
||||||
|
sub = userdata
|
||||||
|
activeuser = None
|
||||||
|
# Check in Database, if user exist - if not, create new user
|
||||||
|
if not User.objects.filter(username = sub).exists():
|
||||||
|
pr = Profile(user=None, agency=Agency.objects.get(pk=1))
|
||||||
|
pr.save()
|
||||||
|
print(pr)
|
||||||
|
activeuser = User.objects.create(username=sub, profile=pr)
|
||||||
|
pr.user = activeuser
|
||||||
|
pr.save()
|
||||||
|
else:
|
||||||
|
activeuser = User.objects.get(username=sub)
|
||||||
|
|
||||||
|
if activeuser is not None:
|
||||||
|
login(request, activeuser)
|
||||||
|
|
||||||
|
sso_client = self.oauth.register(
|
||||||
|
settings.OAUTH_CLIENT_NAME, overwrite=True, **settings.OAUTH_CLIENT, update_token=update_token
|
||||||
|
)
|
||||||
|
if request.path.startswith('/users/oauth/callback'):
|
||||||
|
self.clear_session(request)
|
||||||
|
request.session['token'] = sso_client.authorize_access_token(request)
|
||||||
|
if self.get_current_user(sso_client, request) is not None:
|
||||||
|
redirect_uri = request.session.pop('redirect_uri', None)
|
||||||
|
if redirect_uri is not None:
|
||||||
|
return redirect(redirect_uri)
|
||||||
|
return redirect('users-dashboard')
|
||||||
|
|
||||||
|
if request.session.get('token', None) is not None:
|
||||||
|
#current_user = self.get_current_user(sso_client, request)
|
||||||
|
current_user = request.session.get('token').get('user_id')
|
||||||
|
if current_user is not None:
|
||||||
|
checkUserInDatabase(current_user)
|
||||||
|
return self.get_response(request)
|
||||||
|
|
||||||
|
# remember redirect URI for redirecting to the original URL.
|
||||||
|
request.session['redirect_uri'] = request.path
|
||||||
|
return sso_client.authorize_redirect(request, settings.OAUTH_CLIENT['redirect_uri'])
|
||||||
|
|
||||||
|
# fetch current login user info
|
||||||
|
# 1. check if it's in cache
|
||||||
|
# 2. fetch from remote API when it's not in cache
|
||||||
|
@staticmethod
|
||||||
|
def get_current_user(sso_client, request):
|
||||||
|
token = request.session.get('token', None)
|
||||||
|
if token is None or 'access_token' not in token:
|
||||||
|
return None
|
||||||
|
|
||||||
|
if not OAuth2Token.from_dict(token).is_expired() and 'user' in request.session:
|
||||||
|
return request.session['user']
|
||||||
|
|
||||||
|
try:
|
||||||
|
res = sso_client.get(settings.OAUTH_CLIENT['userinfo_endpoint'], token=OAuth2Token(token))
|
||||||
|
if res.ok:
|
||||||
|
print("OK WE ARE HERE!")
|
||||||
|
print(res)
|
||||||
|
#request.session['user'] = res.json()
|
||||||
|
#request.session['user'] = res
|
||||||
|
return True
|
||||||
|
#return res.json()
|
||||||
|
else:
|
||||||
|
print(res)
|
||||||
|
except OAuthError as e:
|
||||||
|
print(e)
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def clear_session(request):
|
||||||
|
try:
|
||||||
|
del request.session['user']
|
||||||
|
del request.session['token']
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def __del__(self):
|
||||||
|
print('destroyed')
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -875,7 +875,7 @@ $(document).on('click', function (e) {
|
||||||
|
|
||||||
<!-- WEBSOCKETS -->
|
<!-- WEBSOCKETS -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
/*
|
||||||
$(document).ready(function(){
|
$(document).ready(function(){
|
||||||
|
|
||||||
$("#chat_alluserscontent").hide();
|
$("#chat_alluserscontent").hide();
|
||||||
|
|
@ -897,9 +897,6 @@ $(document).ready(function(){
|
||||||
//HANDLER FOR ALL PUSHNOTIFICATIONS
|
//HANDLER FOR ALL PUSHNOTIFICATIONS
|
||||||
if(e["data"].split("__")[0] == "pushnotification"){
|
if(e["data"].split("__")[0] == "pushnotification"){
|
||||||
|
|
||||||
/*
|
|
||||||
Check for Chat-Message in CHatview or invisible-Browser
|
|
||||||
*/
|
|
||||||
tempsplit = e["data"].split("__");
|
tempsplit = e["data"].split("__");
|
||||||
finalsplit = tempsplit[1].split(" ");
|
finalsplit = tempsplit[1].split(" ");
|
||||||
|
|
||||||
|
|
@ -1048,7 +1045,7 @@ $("#chatButton").click(function(){
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
*/
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
<!-- Billstatus -->
|
<!-- Billstatus -->
|
||||||
|
|
|
||||||
|
|
@ -18,17 +18,11 @@ urlpatterns = [
|
||||||
path('logout/', auth_views.LogoutView.as_view(template_name='users/logout.html'), name='users-logout'),
|
path('logout/', auth_views.LogoutView.as_view(template_name='users/logout.html'), name='users-logout'),
|
||||||
path('usersman/', permission_required('users.usermanager')(UsersManagement.as_view(template_name="users/users_management.html")), name='users-management'),
|
path('usersman/', permission_required('users.usermanager')(UsersManagement.as_view(template_name="users/users_management.html")), name='users-management'),
|
||||||
path('usersman/adduser/', permission_required('users.usermanager')(UsersCreateUser.as_view(template_name="users/users_adduser.html")), name='users-adduser'),
|
path('usersman/adduser/', permission_required('users.usermanager')(UsersCreateUser.as_view(template_name="users/users_adduser.html")), name='users-adduser'),
|
||||||
#path('usersman/profile/', views.profile, name='users-profile'),
|
|
||||||
#path('usersman/<int:pk>/', views.ProfileUpdateView, name='users-update'),
|
|
||||||
#path('usersman/<int:pk>/', permission_required('users.usermanager')(ProfileUpdateView.as_view()), name='users-update'),
|
|
||||||
path('usersman/<int:pk>/perms', permission_required('users.usermanager')(UsersPermUpdateView.as_view()), name='users-perm-update'),
|
path('usersman/<int:pk>/perms', permission_required('users.usermanager')(UsersPermUpdateView.as_view()), name='users-perm-update'),
|
||||||
path('usersman/<int:pk>/delete', permission_required('users.usermanager')(ProfileDeleteView.as_view()), name='users-delete'),
|
path('usersman/<int:pk>/delete', permission_required('users.usermanager')(ProfileDeleteView.as_view()), name='users-delete'),
|
||||||
path('usersman/gd/<int:pk>', views.getDataFromToDelUser, name="users-delete-getdata"),
|
path('usersman/gd/<int:pk>', views.getDataFromToDelUser, name="users-delete-getdata"),
|
||||||
path('userlog/<int:pk>', views.showUserLog, name="users-log"),
|
path('userlog/<int:pk>', views.showUserLog, name="users-log"),
|
||||||
#path('agencyinfo/', views.agency, name='agencyinfo'),
|
|
||||||
#path('agencyinfo/<int:pk>/', permission_required('users.agency_change')(AgencyUpdateView.as_view()), name='agency-manage'),
|
|
||||||
path('usersman/<int:pk>/prio', views.UsersPrio, name='users-prio'),
|
path('usersman/<int:pk>/prio', views.UsersPrio, name='users-prio'),
|
||||||
#path('prioupdate/', views.UsersPrioUpdate, name="users-prioupdate"),
|
|
||||||
path('areataskupdate/<int:pk>/', views.UsersAreaTaskUpdate, name="users-areataskupdate"),
|
path('areataskupdate/<int:pk>/', views.UsersAreaTaskUpdate, name="users-areataskupdate"),
|
||||||
path('globalsearch/', views.GlobalSearch, name="globalsearch"),
|
path('globalsearch/', views.GlobalSearch, name="globalsearch"),
|
||||||
path('standardrout/', views.searchStandardRouter, name="standardrouter"),
|
path('standardrout/', views.searchStandardRouter, name="standardrouter"),
|
||||||
|
|
@ -46,9 +40,9 @@ urlpatterns = [
|
||||||
path('icsall/<int:ag>', views.getICSFileAll, name="geticsall"),
|
path('icsall/<int:ag>', views.getICSFileAll, name="geticsall"),
|
||||||
path('icspublic/<slug:code>/<int:ag>', views.getICSFileEx, name="getics"),
|
path('icspublic/<slug:code>/<int:ag>', views.getICSFileEx, name="getics"),
|
||||||
path('icspublicall/<slug:code>/<int:ag>', views.getICSFileExAll, name="geticsall"),
|
path('icspublicall/<slug:code>/<int:ag>', views.getICSFileExAll, name="geticsall"),
|
||||||
path('updateuserorga/', views.UpdateUserOrga, name="update-user-orga")
|
path('updateuserorga/', views.UpdateUserOrga, name="update-user-orga"),
|
||||||
#path('recalculateabsence/<slug:code>', views.recalculateAbsence, name="recalculateabsence"),
|
# OAUTH
|
||||||
|
path('oauth/callback', views.oauthCallBack, name="oauthcallback"),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue