예제 #1
0
파일: views.py 프로젝트: joinc/Watch
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,
    )
예제 #2
0
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
예제 #3
0
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)
예제 #4
0
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)
예제 #5
0
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)
예제 #6
0
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)
예제 #7
0
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)
예제 #8
0
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,
    )
예제 #9
0
파일: views.py 프로젝트: joinc/Watch
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,
    )
예제 #10
0
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)
예제 #11
0
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)
예제 #12
0
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)
예제 #13
0
파일: views.py 프로젝트: joinc/Watch
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, )))
예제 #14
0
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'))
예제 #15
0
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, )
예제 #16
0
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)
예제 #17
0
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)
예제 #18
0
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'))
예제 #19
0
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)
예제 #20
0
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)