diff --git a/api/views.py b/api/views.py index 1c43149..41930cf 100644 --- a/api/views.py +++ b/api/views.py @@ -260,8 +260,6 @@ def NCAddUser(request): @api_view(['GET'],) def getTMInfos(request, uid, secretkey): if request.method == "GET": - print("HI! asdsadassad") - return JsonResponse({"status" : "DATA " + uid + " " + secretkey}) return JsonResponse({"status" : "NO AUTH"}) @@ -287,8 +285,8 @@ def NCAddGroupFolder(request): # Groupfolder r = requests.post(settings.NEXTCLOUD_URL + "apps/agency/createagf", data=data, headers=headers) - # Standar Folder - r = requests.request("MKCOL", settings.NEXTCLOUD_URL + "remote.php/dav/files/admin/Agenturdaten_" + str(agency.pk)+ '/Standards Uploadbereich/', auth=(settings.NEXTCLOUD_USER_API, settings.NEXTCLOUD_PW_API)) + # Standard Folder + r = requests.request("MKCOL", settings.NEXTCLOUD_URL + "remote.php/dav/files/" + settings.NEXTCLOUD_USER_API + "/Agenturdaten_" + str(agency.pk)+ '/Standards Uploadbereich/', auth=(settings.NEXTCLOUD_USER_API, settings.NEXTCLOUD_PW_API)) return JsonResponse({'status' : True, 'message': 'Gruppenordner und Standard-Ordner angelegt!' + r.text}) @@ -412,10 +410,13 @@ def NCTest(request): # Setting the Users Data for logging @api_view(['POST'], ) def SetUserData(request): - user = User.objects.get(username=request.POST.get('uid')) - user.profile.nc_sid = request.POST.get('sid') - user.save() - return JsonResponse({'message' : 'A user was found in request, sid set!'}) + try: + user = User.objects.get(username=request.POST.get('uid')) + user.profile.nc_sid = request.POST.get('sid') + user.save() + return JsonResponse({'message' : 'A user was found in request, sid set!'}) + except: + return JsonResponse({'message' : 'USER NOT FOUND'}) diff --git a/users/signals.py b/users/signals.py index 72378ec..c8f8a83 100644 --- a/users/signals.py +++ b/users/signals.py @@ -187,6 +187,7 @@ def save_profile(sender, instance, **kwargs): # SIGNALS FOR GROUPS # Signal für das Ändern von Gruppenrechten +''' @receiver(signal=m2m_changed, sender=Group.permissions.through) def adjust_group_notifications_permission(instance, action, reverse, model, pk_set, using, *args, **kwargs): group_touched = AgencyGroup.objects.get(group=instance) @@ -217,10 +218,12 @@ def adjust_group_notifications_permission(instance, action, reverse, model, pk_s #channel_layer = channels.layers.get_channel_layer() #async_to_sync(channel_layer.group_send)("user_" + str(user.pk), {'type' : 'pushhandler', 'pushtext' : "pushnotification__Gruppenaktivität | Der Gruppe " + group_touched.agencygroupname + " wurden Rechte entzogen."}) - +''' # Signal, wenn ein Nutzer aus der Gruppe entfernt/hinzugefügt wird +''' @receiver(signal=m2m_changed, sender=User.groups.through) def adjust_group_notifications(instance, action, reverse, model, pk_set, using, *args, **kwargs): + if isinstance(instance, Group): group_touched = AgencyGroup.objects.get(group=instance) userid = list(pk_set)[0] @@ -275,7 +278,7 @@ def adjust_group_notifications(instance, action, reverse, model, pk_set, using, html_message=msg_html, fail_silently=True ) - +''' # SIGNALS FOR STANDARDS # DELETE @@ -284,6 +287,7 @@ def delete_standard(sender, instance, **kwargs): newNotifiyPush(2, instance, " es wurde ein neuer Agenturstandard gelöscht: ", "Agenturstandard gelöscht: ", "Standards | ", "", "") # SAVE AND UPDATE +''' @receiver(post_save, sender=Standards) def save_standard(sender, instance, **kwargs): targeturl = settings.BASE_URL + "standards/standard/" + str(instance.pk) + "/single" @@ -309,9 +313,10 @@ def save_standard(sender, instance, **kwargs): # Standard wurde aktualisiert else: newNotifiyPush(1, instance, " es wurde ein neuer Agenturstandard aktualisiert: ", "Agenturstandard aktualisiert: ", "Standards | ", "newstandard", targeturl) - +''' # SIGNAL FOR NEWS +''' @receiver(post_save, sender=News) def save_news(sender, instance, **kwargs): if(kwargs["created"]): @@ -323,9 +328,10 @@ def save_news(sender, instance, **kwargs): else: instance.agnotify = False instance.save() - +''' # SIGNALS FOR TASK +''' @receiver(signal=m2m_changed, sender=Tasks.usersfield.through) def adjust_group_notifications_task(instance, action, reverse, model, pk_set, using, *args, **kwargs): @@ -361,6 +367,7 @@ def adjust_group_notifications_task(instance, action, reverse, model, pk_set, us elif(action == 'post_add'): notificationtext = "Sie wurden der Tätigkeit " + taskname + " zugeordnet." sendMailNoti(notificationtext, user_touched) +''' @@ -384,10 +391,9 @@ def adjust_group_notifications_task(instance, action, reverse, model, pk_set, us ''' def newNotifiyPush(mode, instance, mailtext, notifytext, pushtext, notifytype, targeturl=""): usersofagency = User.objects.filter(profile__agency__pk=instance.agency.pk) - + ''' # CREATED for user in usersofagency: - # LOAD USERNOTIFICATIONS created_mail = False created_push = False @@ -476,7 +482,7 @@ def newNotifiyPush(mode, instance, mailtext, notifytext, pushtext, notifytype, t #channel_layer = channels.layers.get_channel_layer() #async_to_sync(channel_layer.group_send)("user_" + str(user.pk), {'type' : 'pushhandler', 'pushtext' : "pushnotification__" + pushtext + notifytext + instance.name}) - + ''' # DIRS @receiver(post_save, sender=DataDir) def save_dir(sender, instance, **kwargs): diff --git a/users/templates/users/dashboard.html b/users/templates/users/dashboard.html index b662fca..546cb72 100644 --- a/users/templates/users/dashboard.html +++ b/users/templates/users/dashboard.html @@ -204,6 +204,4 @@ $(document).ready(function(){ - - {% endblock content %} diff --git a/users/templates/users/nclog.html b/users/templates/users/nclog.html index a8f8dbf..d90c566 100644 --- a/users/templates/users/nclog.html +++ b/users/templates/users/nclog.html @@ -1 +1,11 @@

{{error}}

+ + \ No newline at end of file diff --git a/users/views.py b/users/views.py index bceb769..7dd5288 100644 --- a/users/views.py +++ b/users/views.py @@ -46,7 +46,7 @@ import base64 import filetype from django.db.models.signals import m2m_changed from django.contrib.auth.models import User, Group -from users.signals import adjust_group_notifications_permission +#from users.signals import adjust_group_notifications_permission from django.core.exceptions import ObjectDoesNotExist from digitaleagentur.utils import * from digitaleagentur.timemanagement_utils import * @@ -82,15 +82,143 @@ from django.contrib.auth import login, logout from django.core.mail import send_mail from django.views.generic import TemplateView +def get_random_number(length = 6): + result_str = ''.join(random.choice("0123456789") for i in range(length)) + return result_str + +def create_group_id(agencygroupname, agency): + newgroupid = "" + pregroupstr = "agencymaingroupid_" + if(agencygroupname == "Mitarbeiter"): + newgroupid = pregroupstr + str(agency.pk) + # NORMAL GROUOPS + elif(agencygroupname == "Administratoren"): + newgroupid = pregroupstr + str(agency.pk) + "_defaultadmingroup" + elif(agencygroupname == "Notfallhilfe"): + newgroupid = pregroupstr + str(agency.pk) + "_recover" + else: + newgroupid = pregroupstr + str(agency.pk) + "_subgroup_" + get_random_number() + + return newgroupid + +def createNewAgencyByNC(request, uid): + print("CREATE NEW AGENCY") + # Creating Agency and prepare basic-Structure + email = uid + agency = Agency() + agency.name = email + "'s Agentur" + agency.vve = "" + agency.save() + pr=Profile() + pr.agency=agency + + # Create new User + try: + print("CREATE NEW USER IN DJANGO") + user=User.objects.create_user(email, email, randomString(30)) + + except: + print("PREDICTED EXCEPT - CONTINUE") + user = User.objects.get(username=email) + user.first_name = email + user.last_name = email + user.usernotification = UserNotification() + #user.usertime = UserTime() + pr.user=user + pr.save() + user.profile = pr + user.save() + print("USER DONE") + request.user = user + + # Creating all Standard-Django-Stuff + toUpdate(request) + loadPreStructure(agency) + + # Creating all NC-Stuff + # Agency-Groupfolder and Standard-Folder + data = { + "gid" : "agencymaingroupid_" + str(agency.pk), + "aid" : str(agency.pk), + "newagency" : True + } + + print("CREATING GROUPFOLDER") + r = requests.post(settings.NEXTCLOUD_URL + "ocs/v2.php/apps/da_agency/api/v1/creategf?format=json", auth=(settings.NEXTCLOUD_USER_API, settings.NEXTCLOUD_PW_API), data=data) + print(r.text) + + + print("CREATING GROUPS IN NC FROM DJANGO") + groups = AgencyGroup.objects.filter(agency=agency) + for g in groups: + newgroupid = create_group_id(g.agencygroupname, agency) + headers = { + 'Accept' : 'application/json', + 'Access-Control-Allow-Headers' : 'OCS-APIRequest', + 'OCS-APIRequest' : 'true' + } + data = { + "groupid" : newgroupid + } + print("CREATE GROUP " + g.agencygroupname) + r = requests.post(settings.NEXTCLOUD_URL + "ocs/v1.php/cloud/groups", data=data, headers=headers, auth=(settings.NEXTCLOUD_USER_API, settings.NEXTCLOUD_PW_API)) + print(r.text) + + r_status = json.loads(r.text) + if(r_status['ocs']['meta']['statuscode'] == 100): + # Group created, save new group id in Django + g.nc_name = newgroupid + g.save() + + # Group created, set display name in NC + data = { + "name": g.agencygroupname, + "id" : newgroupid + } + print("GROUP OK - CHANGE DISPLAY NAME") + r = requests.post(settings.NEXTCLOUD_URL + "ocs/v2.php/apps/da_agency/api/v1/renameagg?format=json", auth=(settings.NEXTCLOUD_USER_API, settings.NEXTCLOUD_PW_API), data=data) + print(r.text) + + # Add current user to all Groups! + print("ADDING CURRENT USER TO ALL GROUPS") + headers = { + 'Accept' : 'application/json', + 'Access-Control-Allow-Headers' : 'OCS-APIRequest', + 'OCS-APIRequest' : 'true' + } + data_nc = { + "groupid" : g.nc_name, + } + r = requests.post(settings.NEXTCLOUD_URL + "/ocs/v1.php/cloud/users/" + user.username + "/groups",headers=headers, auth=(settings.NEXTCLOUD_USER_API, settings.NEXTCLOUD_PW_API), data=data_nc) + print(r.text) + + print("CREATING STANDARDFOLDER") + r_2 = requests.request("MKCOL", settings.NEXTCLOUD_URL + "remote.php/dav/files/" + user.username + "/Agenturdaten/Standards Uploadbereich", auth=(settings.NEXTCLOUD_USER_API, settings.NEXTCLOUD_PW_API)) + print(r_2.text) + + print("DONE! Redirecting to nclogin") + #return redirect(settings.NEXTCLOUD_URL) + #return redirect('nclog', uid) + + + # Entry-Point for NC def ncLogin(request, uid): logout(request) print(uid) - user = User.objects.get(username=uid) - if(getNCLoggedUserBySession(user.profile.nc_sid) == uid): - login(request, user) - return redirect('users-dashboard') - return render(request, 'users/nclog.html',{'error' : "Bereite daten vor...bitte die Seite neu laden!"}) + try: + user = User.objects.get(username=uid) + if(getNCLoggedUserBySession(user.profile.nc_sid) == uid): + login(request, user) + return redirect('users-dashboard') + return render(request, 'users/nclog.html',{'error' : "Die Agenturdaten wurden aktualisiert. Bitte melden Sie sich ab und wieder an. Sollten Sie diese Meldung weiterhin sehen, kontaktieren Sie den Support."}) + except: + print("NO USER FOUND - NEW AGENCY REGISTRATION!") + try: + createNewAgencyByNC(request, uid) + except: + return render(request, 'users/nclog.html',{'error' : "Die Agenturdaten wurden aktualisiert. Bitte melden Sie sich ab und wieder an. Sollten Sie diese Meldung weiterhin sehen, kontaktieren Sie den Support."}) + return render(request, 'users/nclog.html',{'error' : "Die Agenturdaten wurden aktualisiert. Bitte melden Sie sich ab und wieder an. Sollten Sie diese Meldung weiterhin sehen, kontaktieren Sie den Support."}) def getICSFile(request, ag): if 'HTTP_AUTHORIZATION' in request.META: @@ -377,6 +505,14 @@ def toUpdate(request): temgroup_verwaltung_ag = AgencyGroup(savefordel=True, is_admin=True, group=temgroup_verwaltung, agency=request.user.profile.agency, agencygroupname="Administratoren") temgroup_verwaltung_ag.save() + temgroup_Notfallhilfe = Group(name=str(request.user.profile.agency.pk) + "_" + randomString(8)) + temgroup_Notfallhilfe.save() + temgroup_Notfallhilfe_ag = AgencyGroup(savefordel=True, group=temgroup_Notfallhilfe, agency=request.user.profile.agency, agencygroupname="Notfallhilfe") + temgroup_Notfallhilfe_ag.save() + + recoverdirmanagingperm = Permission.objects.get(codename='recoverdirmanager') + temgroup_Notfallhilfe_ag.group.permissions.add(recoverdirmanagingperm) + #print("default groups created...adding users...") users_of_agency = User.objects.filter(profile__agency__pk=request.user.profile.agency.pk) for user in users_of_agency: @@ -411,7 +547,7 @@ def toUpdate(request): #print("recoverdirgroup added and perms set") # CHECK FOR ALL POSSIBLE RIGHTS ON ADMINGROUP - m2m_changed.disconnect(adjust_group_notifications_permission, sender=Group.permissions.through) + #m2m_changed.disconnect(adjust_group_notifications_permission, sender=Group.permissions.through) ag_admingroup = list(AgencyGroup.objects.filter(agency=request.user.profile.agency, is_admin=True))[0] perms = AgencyGroup._meta.permissions @@ -420,7 +556,7 @@ def toUpdate(request): ag_admingroup.group.permissions.add(tempperm) - + ''' # INITIAL ROOT DIR rootdir = DataDir.objects.filter(is_root=True, agency__pk=request.user.profile.agency.pk) @@ -456,7 +592,7 @@ def toUpdate(request): #print("AGENCY DEF STANDARD DIR - FILESMODULE READY") pass - + ''' # CHANGE RIGHTS ORGNAIZER admingroups = AgencyGroup.objects.filter(is_admin=True) for a in admingroups: @@ -464,7 +600,7 @@ def toUpdate(request): a.group.permissions.add(Permission.objects.get(codename="agencynetwork")) - m2m_changed.connect(adjust_group_notifications_permission, sender=Group.permissions.through) + #m2m_changed.connect(adjust_group_notifications_permission, sender=Group.permissions.through) # USER TIME MODEL usersofagency = User.objects.filter(profile__agency=request.user.profile.agency)