def edit_key(request, code): """ Edit data and save it in database. :param request: object, POST (user_salt, ssh_key_pub, ssh_key_privat, description) :param code: models.SSHStore.id :return: Http404 or redirect to views.profile() or "SSHKeyStoreApp/edit_key.html" with form, code """ data = SSHStore.objects.filter(user_link=request.user.id).filter(id=code).values('user_salt', 'ssh_key_pub', 'ssh_key_privat', 'description') if not data: raise Http404("Key error") if request.method == "POST": form = ProfileAddEditForm(request.POST) if form.is_valid(): user_salt = form.cleaned_data['user_salt'] ssh_key_pub = form.cleaned_data['ssh_key_pub'] ssh_key_privat = form.cleaned_data['ssh_key_privat'] description = form.cleaned_data['description'] value_pub = signing.dumps((ssh_key_pub,), key=settings.SECRET_KEY, salt=user_salt) value_private = signing.dumps((ssh_key_privat,), key=settings.SECRET_KEY, salt=user_salt) store = SSHStore.objects.filter(user_link=request.user.id).filter(id=code)[0] store.user_salt = user_salt store.ssh_key_pub = value_pub store.ssh_key_privat = value_private store.description = description store.save() return HttpResponseRedirect(reverse('profile:user')) else: data = forming_data(data) form = ProfileAddEditForm(data[0]) return render(request, "SSHKeyStoreApp/edit_key.html", {'form': form, 'code': code})
def pdf_file(request): """ Generate ssh key into pdf :param request: :return: keys.pdf """ data = SSHStore.objects.filter(user_link=request.user.id).values('user_salt', 'ssh_key_pub', 'ssh_key_privat', 'description', 'was_added', 'last_changes') data = forming_data(data) response = create_pdf(data) return response
def profile(request): """ User profile page. :param request: object :return: 'SSHKeyStoreApp/profile.html', contacts (current user SSHKeys) """ data = SSHStore.objects.filter(user_link=request.user.id).values('id', 'user_salt', 'ssh_key_pub', 'ssh_key_privat', 'description', 'was_added', 'last_changes') data = forming_data(data) paginator = Paginator(data, 3) page = request.GET.get('page') try: contacts = paginator.page(page) except PageNotAnInteger: # If page is not an integer, deliver first page. contacts = paginator.page(1) except EmptyPage: # If page is out of range (e.g. 9999), deliver last page of results. contacts = paginator.page(paginator.num_pages) return render(request, 'SSHKeyStoreApp/profile.html', {'contacts': contacts})