def profile_show(request, profile_id): """ Страница профиля пользователя :param request: :param profile_id: :return: """ current_profile = get_profile(user=request.user) profile = get_profile(profile=profile_id) if request.POST and (current_profile == profile or current_profile.user.is_superuser): form_password = FormPassword(request.POST) password = form_password['password'].value() password2 = form_password['password2'].value() message_list = check_password(username=profile.user.username, password=password, password2=password2) if message_list: for message in message_list: messages.error(request, message) else: messages.success( request, 'Пароль пользователя {0} успешно изменен.'.format(profile)) profile.user.set_password(password) profile.user.save() return redirect(reverse('profile_show', args=(profile.id, ))) context = { 'current_profile': current_profile, 'title': 'Пользователь ' + profile.__str__(), 'list_breadcrumb': ((reverse('profile_list'), 'Список пользователей'), ), 'form_password': FormPassword(), 'profile_edit': current_profile.user.is_superuser, 'profile': profile, } return render( request=request, template_name='profile/show.html', context=context, )
def get_signature(request, signature_id) -> Certificate or None: """ Получение элемента Сертификат, с проверкой прав на чтение данного элемента :param request: :param signature_id: :return: """ current_user = get_profile(user=request.user) signature = get_object_or_404(Certificate, id=signature_id) if current_user.access(list_permission=['signature_edit', ]) \ and signature.owner.organization == current_user.organization: return signature else: return None
def violation_list(request): """ Список отчетов об инцидентах :param request: :return: HttpResponse """ current_user = get_profile(user=request.user) context = { 'current_user': current_user, 'title': 'Список отчетов об инцидентах', 'list_violation': ReportViolation.objects.all(), 'violation_moderator': current_user.access(list_permission=['violation_moderator', ]), } return render(request=request, template_name='violation/list.html', context=context)
def subnet_list(request): """ Отображение списка подсетей :param request: :return: """ context = { 'current_user': get_profile(user=request.user), 'title': 'Список подсетей', 'list': Subnet.objects.all(), 'url_create': 'subnet_create', 'title_create': 'Добавить новую подсеть', 'url_edit': 'subnet_edit', 'title_edit': 'Перейти к редактированию подсети', } return render(request=request, template_name='configure/list.html', context=context)
def preset_list(request): """ Отображение списка шаблоново разрешений :param request: :return: """ context = { 'current_user': get_profile(user=request.user), 'title': 'Список шаблонов разрешений', 'list': PresetAccess.objects.filter(is_sample=True, ), 'url_create': 'preset_create', 'title_create': 'Добавить новый шаблон', 'url_edit': 'preset_edit', 'title_edit': 'Перейти к редактированию шаблона', } return render(request=request, template_name='configure/list.html', context=context)
def address_list(request): """ Отображение списка адресов :param request: :return: """ context = { 'current_user': get_profile(user=request.user), 'title': 'Список адресов', 'list': Address.objects.all(), 'url_create': 'address_create', 'title_create': 'Добавить новый адрес', 'url_edit': 'address_edit', 'title_edit': 'Перейти к редактированию адреса', } return render(request=request, template_name='configure/list.html', context=context)
def profile_show(request, profile_id): """ Отображение профиля пользователя :param request: :param profile_id: :return: """ profile = get_object_or_404(UserProfile, id=profile_id) current_user = get_profile(user=request.user) context = { 'current_user': current_user, 'profile': profile, 'title': 'Пользователь ' + profile.__str__(), 'form_password': FormChangePassword(), 'profile_edit': current_user.access(list_permission=[ 'profile_edit', ]), } if request.POST and (current_user.access(list_permission=[ 'profile_edit', ]) or current_user == profile): if 'block_user' in request.POST: profile.block() messages.warning(request, 'Пользователь {0} заблокирован.'.format(profile)) elif 'unblock_user' in request.POST: profile.unblock() messages.warning(request, 'Пользователь {0} разблокирован.'.format(profile)) elif 'change_password' in request.POST: password1 = request.POST['password1'] password2 = request.POST['password2'] message_list = check_password(profile.user.username, password1, password2) if message_list: for message in message_list: messages.error(request, message) context['show_password'] = True else: messages.success( request, 'Пароль пользователя {0} успешно сменен.'.format(profile)) profile.user.set_password(password1) profile.user.save() return render(request=request, template_name='profile/show.html', context=context)
def index(request) -> HttpResponse: """ Отображение главной страницы :param request: :return: HttpResponse """ current_profile = get_profile(user=request.user) context = { 'current_profile': current_profile, 'title': 'Главная', 'list_widget': get_list_widget(profile=current_profile), } return render( request=request, template_name='index.html', context=context, )
def profile_list(request): """ Список пользователей :param request: :return: """ current_profile = get_profile(user=request.user) context = { 'current_profile': current_profile, 'title': 'Список пользователей', 'profile_edit': current_profile.user.is_superuser, 'list_profile': UserProfile.objects.all(), } return render( request=request, template_name='profile/list.html', context=context, )
def index(request): """ Отображение главной страницы :param request: :return: HttpResponse """ current_user = get_profile(user=request.user) context = { 'current_user': current_user, 'title': 'Главная', } if current_user.access(list_permission=[ 'signature_list', ]): context['count_signature'] = get_count_signature( current_user=current_user) context['count_expires_signature'] = get_count_expires_signature( current_user=current_user) return render(request=request, template_name='index.html', context=context)
def profile_create(request): """ Создание профиля пользователя :param request: :return: """ context = { 'current_user': get_profile(user=request.user), 'title': 'Добавление нового пользователя', } if request.POST: formset = FormCreateUser(request.POST) username = formset['username'].value() password1 = formset['password'].value() password2 = formset['password2'].value() initial = { 'email': formset['email'].value(), 'username': username, 'last_name': formset['last_name'].value(), 'first_name': formset['first_name'].value(), } message_list = check_password(username, password1, password2) if formset.is_valid() and not message_list: formset.save() profile = UserProfile( user=get_object_or_404(User, username=username)) profile.save() return redirect(reverse('profile_edit', args=(profile.id, ))) else: if User.objects.filter(username=username).exists(): del initial['username'] message_list.append('Пользователь ' + username + ' уже существует.') for message in message_list: messages.error(request, message) context['form_create_user'] = FormCreateUser(initial=initial) else: context['form_create_user'] = FormCreateUser() return render(request=request, template_name='profile/create.html', context=context)
def configure_list(request): """ Отображение списка настроек :param request: :return: HttpResponse """ list_configure = { 'Профиль пользователя': { 'Список шаблонов разрешений': 'preset_list', }, 'Организации': { 'Список адресов': 'address_list', 'Список подсетей': 'subnet_list', }, } context = { 'current_user': get_profile(user=request.user), 'title': 'Список конфигураций', 'list_configure': list_configure, } return render(request=request, template_name='configure/configure_list.html', context=context)
def profile_blocked(request, profile_id): """ Функция по блокировке или разблокировки профиля пользователя в зависимости от состояния :param request: :param profile_id: :return: """ profile = get_profile(profile=profile_id) if profile.blocked: profile.unblock() messages.info( request, 'Пользователь {0} разблокирован'.format(profile), ) else: profile.block() messages.error( request, 'Пользователь {0} заблокирован'.format(profile), ) return redirect(reverse('profile_show', args=(profile_id, )))
def employer_find(request): """ Отображение результата поиска карточек нарушителей :param request: :return: """ if request.POST: form_search = FormSearchEmployer(request.POST) find = form_search['find'].value() czn = form_search['czn'].value() status = form_search['status'].value() count_employer = get_count_find_employer(find=find, czn=czn, list_status=status, ) context = { 'current_profile': get_profile(user=request.user), 'title': 'Поиск', 'per_page': settings.COUNT_LIST, 'count_employer': count_employer, 'count_page': get_count_page(count_employer=count_employer), 'form_search': form_search, 'find': find, 'czn': czn, 'status': status, } return render(request=request, template_name='employer/list.html', context=context, ) if request.GET: number_page = int(request.GET.get('page', 1)) start_count = (number_page - 1) * settings.COUNT_LIST stop_count = start_count + settings.COUNT_LIST list_employer = get_list_employer( find=request.GET.get('emp_find', None), czn=request.GET.get('emp_czn', None), list_status=request.GET.get('emp_status', None), start=start_count, stop=stop_count, ) context = { 'list_employer': list_employer, } return render(request=request, template_name='employer/slice.html', context=context, ) return redirect(reverse('index'))
def employer_widget_show(request, widget_id): """ Отображение списка карточек нарушителей в зависимости от выбранного виджкта :param request: :param widget_id: :return: """ current_profile = get_profile(user=request.user) widget = get_object_or_404(Widget, id=widget_id) if request.GET: number_page = int(request.GET.get('page', 1)) start_count = (number_page - 1) * settings.COUNT_LIST stop_count = start_count + settings.COUNT_LIST context = { 'list_employer': get_list_employer( find='', czn=current_profile.department.id if current_profile.is_allowed(['czn']) else None, list_status=WidgetStatus.objects.filter(widget__id=widget_id, checked=True, ), start=start_count, stop=stop_count, ), } return render(request=request, template_name='employer/slice.html', context=context, ) else: count_employer = get_count_employer(profile=current_profile, widget_id=widget.id) context = { 'current_profile': current_profile, 'title': widget.title, 'per_page': settings.COUNT_LIST, 'count_employer': count_employer, 'count_page': get_count_page(count_employer=count_employer), 'form_search': FormSearchEmployer( initial={ 'czn': current_profile.department.id if current_profile.is_allowed(['czn']) else None } ), } return render(request=request, template_name='employer/list.html', context=context, )
def organization_edit(request, organization_id): """ Редактирование карточки организации :param request: :param organization_id: :return: """ organization = get_object_or_404(Organization, id=organization_id) if request.POST: formset = FormOrganization(request.POST, instance=organization) if formset.is_valid(): formset.save() messages.success(request, '') else: messages.error(request, '') return redirect(reverse('organization_show', args=(organization_id, ))) else: context = { 'current_user': get_profile(user=request.user), 'title': 'Редактирование организации', 'organization': organization, 'form_organization': FormOrganization(instance=organization), 'form_address': FormAddress(), 'form_subnet': FormSubnet(), 'list_address': OrganizationAddress.objects.filter(organization=organization), 'list_subnet': OrganizationSubnet.objects.filter(organization=organization), } return render(request=request, template_name='organization/edit.html', context=context)
def organization_list(request): """ Вывод списка организаций TODO: Сделать форму поиска организаций :param request: :return: """ current_user = get_profile(user=request.user) context = { 'current_user': current_user, 'title': 'Список организаций', 'organization_list': list(Organization.objects.values('id', 'short_title').all()), 'organization_edit': current_user.access(list_permission=[ 'organization_edit', ]) } return render(request=request, template_name='organization/list.html', context=context)
def signature_file_upload(request): """ Загрузка файла электронной подписи и создание записи в базе данной :param request: :return: redirect to signature_list """ current_user = get_profile(user=request.user) if request.POST and request.FILES: file_signature = request.FILES['file_sign'] signature_new = Certificate( owner=current_user, file_name=file_signature.name, ) signature_new.file_sign.save(uuid4().hex, file_signature) if signature_new.parse_file(): if request.POST.get('status', '0') == '1': renew = request.POST.get('renew', '0') if renew != '0': signature_extended = get_object_or_404(Certificate, id=int(renew)) # TODO: сделать проверку на число signature_new.renew = signature_extended signature_extended.extended = signature_new signature_extended.save() # Статус равный 1 - Продлен change_status_signature(signature_extended, status=1, file_delete=True) signature_new.save() return redirect( reverse('signature_show', args=(signature_new.id, ))) else: signature_new.file_sign.delete() signature_new.delete() # TODO: return redirect(reverse('error')) return redirect(reverse('signature_list'))
def address_create(request): """ Создание нового адреса :param request: :return: """ if request.POST: formset = FormAddress(request.POST) if formset.is_valid(): formset.save() messages.info(request, 'Новый адрес создан.') return redirect(reverse('address_list')) else: messages.error(request, 'Ошибка при создании адреса.') else: formset = FormAddress() context = { 'current_user': get_profile(user=request.user), 'title': 'Создание адреса', 'url_breadcrumb': 'address_list', 'title_breadcrumb': 'Список адресов', 'formset': formset, } return render(request=request, template_name='configure/create.html', context=context)
def profile_edit(request, profile_id): """ Редактирование профиля пользователя :param request: :param profile_id: :return: """ profile = get_object_or_404(UserProfile, id=profile_id) if profile.user.is_superuser: return redirect(reverse('profile_show', args=(profile_id, ))) if request.POST: FormEditUser(request.POST, instance=profile.user).save() FormOrganization(request.POST, instance=profile).save() access_choice = request.POST.get('access_choice', 'not_sample') if access_choice == 'sample': # Если выбран определенный набор прав, то присваивается этот роль preset_access = request.POST.get('preset_access', None) if preset_access: preset = get_object_or_404(PresetAccess, id=preset_access) else: messages.error( request, 'Не правильно указана роль доступа пользователя {0}.'. format(profile)) return redirect(reverse('profile_edit', args=(profile_id, ))) else: # Если выбраны отдельные права, то создается новая роль с этими правами preset = PresetAccess( title=profile.user.username, is_sample=False, ) preset.save() for permission in Permission.objects.all(): access = request.POST.get(permission.name, False) if access: Access(permission=permission, preset=preset, value=True).save() old_preset = profile.preset profile.preset = preset profile.save(update_fields=[ 'preset', ]) if old_preset and not old_preset.is_sample: # Если роль была не шаблонная, то она удаляется, чтобы не накапливать бесхозные роли old_preset.delete() messages.success( request, 'Профиль пользователя {0} успешно сохранен.'.format(profile)) return redirect(reverse('profile_edit', args=(profile_id, ))) else: context = { 'current_user': get_profile(user=request.user), 'profile': profile, 'title': 'Редактирование профиля ' + profile.__str__(), 'form_edit_user': FormEditUser(instance=profile.user), 'list_access': get_list_access(preset=profile.preset), 'form_preset_access': FormPresetAccess(initial={'preset_access': profile.preset_id}), 'form_organization': FormOrganization(initial={'organization': profile.organization}), } return render(request=request, template_name='profile/edit.html', context=context)