|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- from django.http import HttpResponseRedirect, HttpResponse
- from django.shortcuts import render, get_object_or_404
- from health_view.models import License, FolderInfo, Permission, FolderPart
- from django.contrib.auth.models import User
- from django.views import generic
- from datetime import datetime
- from health_view.crypto_functions import *
- from health_view.forms import CreateLicenseForm
- from django.contrib.auth.decorators import login_required
-
-
- def index(request):
- """View function for home page of site."""
- num_licenses = License.objects.all().count()
- num_user = User.objects.all().count()
- context = {
- 'num_licenses': num_licenses,
- 'num_user': num_user,
- }
- return render(request, 'index.html', context=context)
-
-
- class FolderInfoID(generic.ListView):
- model = FolderInfo
-
- def get_queryset(self):
- return FolderInfo.objects.get(patient=self.request.user)
-
-
- class LicenseViewGiven(generic.ListView):
- model = License
-
- def get_queryset(self):
- return License.objects.filter(patient=self.request.user).order_by('patient')
-
-
- class LicenseViewOwn(generic.ListView):
- model = License
-
- def get_queryset(self):
- return License.objects.filter(justified=self.request.user).order_by('patient')
-
-
- @login_required
- def get_license_details(request, pk):
- model = License
- if "own" in request.get_full_path():
- if not License.objects.filter(pk=pk, justified=request.user).exists():
- return HttpResponseRedirect('/')
- license = get_object_or_404(License, pk=pk, justified=request.user)
- if "given" in request.get_full_path():
- if not License.objects.filter(pk=pk, patient=request.user).exists():
- return HttpResponseRedirect('/')
- license = get_object_or_404(License, pk=pk, patient=request.user)
- exp_date = license.exp_date
- permission = license.permissions.all().values_list()
- permission_string = ""
- for perm in permission:
- permission_string += perm[2]
- permission_string += ", "
- folderparts_string = ""
- folderparts = license.folder_parts.all().values_list()
- for e in folderparts:
- folderparts_string += e[2]
- folderparts_string += ", "
- key = license.patient.folderinfo.content_key
- sig = license.signature
- key_split = (key[0:64], key[64:128], key[128:192], key[192:256])
- sig_split = (sig[0:64], sig[64:128], sig[128:192], sig[192:256])
- license_creator = license.license_creator
- patient = license.patient
- justified = license.justified
- if "own" in request.get_full_path():
- license_string = str(patient) + "&" + str(justified) + "&" + str(license_creator.username) + "&" + str(exp_date.replace(" ", ",") ) + "&" + get_string_byanser(permission) + "&" + get_string_byanser(folderparts) + "&" + sig + "&" + key
- server_sign = sign(license_string, priv_key_own)
- serversign_split = (server_sign[0:64], server_sign[64:128], server_sign[128:192])
- else:
- serversign_split=0
- context = {
- 'patient': patient,
- 'justified': justified,
- 'license_creator': license_creator,
- 'exp_date': exp_date,
- 'permission': permission_string[:-2],
- 'folderparts': folderparts_string[:-2],
- 'content_key': key,
- 'signature': sig_split,
- 'serversign': serversign_split,
- 'key_split': key_split}
- return render(request, 'health_view/license_detail.html', context)
-
-
- def get_string_byrequest(index_list, model_call):
- objectstring = ""
- for i in index_list:
- objectstring += str(model_call.objects.get(id=i))
- objectstring += ","
- return objectstring[:-1]
-
-
- def check_expiration_date(license):
- exp_date = license.exp_date
- datetime_object = ""
- for fmt in ('%d/%m/%Y %H:%M', '%d-%m-%Y %H:%M', '%d/%m/%Y'):
- try:
- datetime_object = datetime.strptime(exp_date, fmt)
- except ValueError:
- pass
- try:
- return datetime.now() < datetime_object
- except Exception:
- return False
-
-
- def get_string_byanser(model_call):
- objectstring = ""
- for i in model_call:
- objectstring += str(i[2])
- objectstring += ","
- print(objectstring)
- return objectstring[:-1]
-
-
- @login_required
- def create_license(request, fid):
- model = License
- user = get_object_or_404(User, id=fid)
- if request.method == 'POST':
- post = request.POST.copy() # to make it mutable
- pubkey = request.user.folderinfo.pub_key
- patient = User.objects.get(id=post['patient'])
- justified = User.objects.get(id=post['justified'])
- license_creator = request.user
- exp_date = post['exp_date']
- permission_ground = request.POST.getlist("permissions")
- folderparts_ground = request.POST.getlist("folder_parts")
- permission = get_string_byrequest(permission_ground, Permission)
- folderparts = get_string_byrequest(folderparts_ground, FolderPart)
- signature_string = str(patient) + "&" + str(justified) + "&" + str(license_creator.username) + "&" + str(exp_date.replace(" ", ",")) + "&" + permission + "&" + folderparts
- signature = post['signature']
- new_folder = False
- if not verify(signature_string, signature, pubkey):
- form = CreateLicenseForm(request.user)
- context = {'form': form}
- return render(request, 'health_view/create_license.html', context)
- if request.user.folderinfo.content_key == "no_key":
- request.user.folderinfo.content_key = make_encrypted_key_content_server()
- request.user.folderinfo.save()
- new_folder = True
- new_license = License(patient=patient, justified=justified, exp_date=exp_date, license_creator=license_creator, signature=signature)
- new_license.save()
- for e in permission_ground:
- new_license.permissions.add(Permission.objects.get(id=e))
- for i in folderparts_ground:
- new_license.folder_parts.add(FolderPart.objects.get(id=i))
- new_license.save()
- request.POST = post
- key = request.user.folderinfo.content_key
- key_split = (key[0:64], key[64:128], key[128:192], key[192:256])
- sig_split = (signature[0:64], signature[64:128], signature[128:192], signature[192:256])
- license_string = signature_string + "&" + new_license.signature + "&" + key
- serversign = sign(license_string, priv_key_own)
- serversign_split = (serversign[0:64], serversign[64:128], serversign[128:192])
- context = {
- 'patient': patient,
- 'justified': justified,
- 'license_creator': license_creator,
- 'exp_date': exp_date,
- 'permission': permission,
- 'folderparts': folderparts,
- 'content_key': key,
- 'signature': sig_split,
- 'key_split': key_split,
- 'serversign': serversign_split,
- 'new_folder': new_folder}
- return render(request, 'health_view/license_detail.html', context)
- else:
- form = CreateLicenseForm(request.user)
- context = {'form': form}
- return render(request, 'health_view/create_license.html', context)
-
|