コード例 #1
0
def attribute_list(request, pk):
    """
    Displays a form including all public :model:`rr.Attribute`
    and reasons if they are linked to :model:`rr.ServiceProvider`.

    If reason is given, links :model:`rr.Attribute` to
    :model:`rr.ServiceProvider` through
    :model:`rr.SPAttribute`.

    If reason is removed, adds end_at time for :model:`rr.SPAttribute`

    **Context**

    ``form``
        List of :model:`rr.SPAttribute`.

    ``object``
        An instance of :model:`rr.ServiceProvider`.

    **Template:**

    :template:`rr/attribute_list.html`
    """
    sp = get_service_provider(pk, request.user)
    if request.method == "POST":
        form = AttributeForm(request.POST, sp=sp, is_admin=request.user.is_superuser)
        if form.is_valid():
            _check_form(request, sp, form)
            form = AttributeForm(sp=sp, is_admin=request.user.is_superuser)
        else:
            form = AttributeForm(request.POST, sp=sp, is_admin=request.user.is_superuser)
    else:
        form = AttributeForm(sp=sp, is_admin=request.user.is_superuser)
    return render(request, "rr/attribute_list.html", {'form': form,
                                                      'object': sp})
コード例 #2
0
def usergroup_list(request, pk):
    """
    Displays a list of :model:`rr.UserGroup` linked to
    :model:`rr.ServiceProvider`.

    Includes a ModelForm for adding :model:`rr.UserGroup` to
    :model:`rr.ServiceProvider`.

    **Context**

    ``object_list``
        List of :model:`rr.UserGroup`.

    ``form``
        ModelForm for creating a :model:`rr.UserGroup`

    ``object``
        An instance of :model:`rr.ServiceProvider`.

    **Template:**

    :template:`rr/usergroup.html`
    """
    sp = get_service_provider(pk, request.user, service_type=["ldap"])
    form = UserGroupForm(sp=sp)
    if request.method == "POST":
        if "add_usergroup" in request.POST:
            form = _add_usergroup(request, sp)
        elif "remove_usergroup" in request.POST:
            _remove_usergroups(request, sp)
    contacts = UserGroup.objects.filter(sp=sp, end_at=None).order_by('name')
    return render(request, "rr/usergroup.html", {'object_list': contacts,
                                                 'form': form,
                                                 'object': sp})
コード例 #3
0
def redirecturi_list(request, pk):
    """
    Displays a list of :model:`rr.RedirectUri` linked to
    :model:`rr.ServiceProvider`.

    Includes a ModelForm for adding :model:`rr.RedirectUri` to
    :model:`rr.ServiceProvider`.

    **Context**

    ``object_list``
        List of :model:`rr.RedirectUri`.

    ``form``
        ModelForm for creating a :model:`rr.RedirectUri`

    ``object``
        An instance of :model:`rr.ServiceProvider`.

    **Template:**

    :template:`rr/redirecturi.html`
    """
    sp = get_service_provider(pk, request.user, service_type=["oidc"])
    form = RedirectUriForm(sp=sp)
    if request.method == "POST":
        if "add_redirecturi" in request.POST:
            form = _add_redirecturi(request, sp)
        elif "remove_redirecturi" in request.POST:
            _remove_redirecturis(request, sp)
    redirect_uris = RedirectUri.objects.filter(sp=sp, end_at=None).order_by('uri')
    return render(request, "rr/redirecturi.html", {'object_list': redirect_uris,
                                                   'form': form,
                                                   'object': sp})
コード例 #4
0
def statistics_list(request, pk):
    """
    Displays a list of :model:`rr.Statistics` linked to
    :model:`rr.ServiceProvider`.

    **Context**

    ``object_list``
        List of :model:`rr.Statistics`.

    ``object``
        An instance of :model:`rr.ServiceProvider`.

    **Template:**

    :template:`rr/statistics.html`
    """
    sp = get_service_provider(pk, request.user, service_type=["oidc", "saml"])
    try:
        days = int(request.GET.get('days', 31))
    except ValueError:
        days = 31
    if days == 0:
        statistics = Statistics.objects.filter(sp=sp)
    else:
        date_start = (date.today() - timedelta(days=days + 1))
        statistics = Statistics.objects.filter(sp=sp, date__gte=date_start)
    return render(request, "rr/statistics.html", {
        'object_list': statistics,
        'object': sp,
        'days': days
    })
コード例 #5
0
def _remove_admins(request, sp):
    removed_self = False
    for key, value in request.POST.dict().items():
        if value == "on":
            admin = User.objects.get(pk=key)
            logger.info("Admin {admin} removed from {sp} by {user}"
                        .format(admin=admin, sp=sp, user=request.user))
            messages.add_message(request, messages.INFO,
                                 _('Admin removed: ') + admin.username)
            sp.admins.remove(admin)
            if not get_service_provider(sp.pk, request.user, service_type=None, raise_404=False):
                removed_self = True
    return removed_self
コード例 #6
0
def _remove_admin_groups(request, sp):
    removed_self = False
    for key, value in request.POST.dict().items():
        if value == "on":
            group = Group.objects.get(pk=key)
            logger.info("Admin group {group} removed from {sp} by {user}"
                        .format(group=group.name, sp=sp, user=request.user))
            messages.add_message(request, messages.INFO,
                                 _('Admin group removed: ') + group.name)
            sp.admin_groups.remove(group)
            if not get_service_provider(sp.pk, request.user, service_type=None, raise_404=False):
                removed_self = True
    return removed_self
コード例 #7
0
def admin_list(request, pk):
    """
    Displays a lists of :model:`auth.User` and :model:`rr.Keystore`
    linked to :model:`rr.ServiceProvider`.

    **Context**

    ``object_list``
        List of :model:`rr.Keystore`.

    ``form``
        Form for sending an invitation

    ``object``
        An instance of :model:`rr.ServiceProvider`.

    **Template:**

    :template:`rr/admin.html`
    """
    sp = get_service_provider(pk, request.user)
    form = SPAdminForm(superuser=request.user.is_superuser)
    admin_group_form = SPAdminGroupForm()
    subject = None
    message = None
    error = None
    if request.method == "POST":
        if "add_invite" in request.POST:
            form, subject, message, error = _create_invite(request, sp, True)
        elif "show_message" in request.POST:
            form, subject, message, error = _create_invite(request, sp, False)
        elif "remove_invite" in request.POST:
            _remove_invites(request, sp)
        elif "remove_admin" in request.POST:
            remove_self = _remove_admins(request, sp)
            if remove_self:
                return HttpResponseRedirect(reverse('serviceprovider-list'))
        elif "add_admin_group" in request.POST:
            admin_group_form = _add_admin_group(request, sp)
        elif "remove_admin_groups" in request.POST:
            remove_self = _remove_admin_groups(request, sp)
            if remove_self:
                return HttpResponseRedirect(reverse('serviceprovider-list'))
    invites = Keystore.objects.filter(sp=sp)
    return render(request, "rr/spadmin.html", {'object_list': invites,
                                               'form': form,
                                               'admin_group_form': admin_group_form,
                                               'object': sp,
                                               'subject': subject,
                                               'message': message,
                                               'error': error})
コード例 #8
0
def testuser_list(request, pk):
    """
    Displays a list of :model:`rr.TestUser` linked to
    :model:`rr.ServiceProvider`.

    Includes a ModelForm for adding :model:`rr.TestUser` to
    :model:`rr.ServiceProvider`.

    **Context**

    ``object_list``
        List of :model:`rr.TestUser`.

    ``object_list_external``
        List of :model:`rr.TestUser`.

    ``form``
        ModelForm for creating a :model:`rr.TestUser`

    ``object``
        An instance of :model:`rr.ServiceProvider`.

    **Template:**

    :template:`rr/testuser.html`
    """
    sp = get_service_provider(pk, request.user, service_type=["oidc", "saml"])
    form = TestUserForm(sp=sp, admin=request.user)
    if request.method == "POST":
        if "add_testuser" in request.POST:
            form = _add_testuser(request, sp)
        elif "remove_testuser" in request.POST:
            _remove_testusers(request, sp)
        elif "remove_testuser_external" in request.POST:
            _remove_external_testusers(request, sp)
    testusers = TestUser.objects.filter(sp=sp, end_at=None)
    testusers_external = TestUser.objects.filter(valid_for=sp).exclude(sp=sp)
    return render(
        request, "rr/testuser.html", {
            'object_list': testusers,
            'object_list_external': testusers_external,
            'form': form,
            'object': sp
        })
コード例 #9
0
def metadata(request, pk):
    """
    Displays a metadata for :model:`rr.ServiceProvider`.

    **Context**

    ``object``
        An instance of :model:`rr.ServiceProvider`.

    ``metadata``
        Metadata for a :model:`rr.ServiceProvider`.

    **Template:**

    :template:`rr/metadata.html`
    """
    sp = get_service_provider(pk, request.user, service_type=["oidc", "saml"])
    if request.GET.get('validated', '') in ("false", "False"):
        validated = False
    else:
        validated = True
    metadata = None
    if sp:
        if sp.service_type == "saml":
            tree = saml_metadata_generator(sp=sp, validated=validated)
            if tree is not None:
                metadata = etree.tostring(tree,
                                          pretty_print=True,
                                          encoding='UTF-8').replace(
                                              b'xmlns:xmlns',
                                              b'xmlns').decode()
        elif sp.service_type == "oidc":
            metadata = oidc_metadata_generator(
                sp=sp, validated=validated, client_secret_encryption="masked")
            metadata = json.dumps(metadata, indent=4, sort_keys=True)
        else:
            raise Http404("Service provider does not exist")

    return render(request, "rr/metadata.html", {
        'object': sp,
        'metadata': metadata,
        'validated': validated
    })
コード例 #10
0
def contact_list(request, pk):
    """
    Displays a list of :model:`rr.Contact` linked to
    :model:`rr.ServiceProvider`.

    Includes a ModelForm for adding :model:`rr.Contact` to
    :model:`rr.ServiceProvider`.

    **Context**

    ``object_list``
        List of :model:`rr.Contact`.

    ``form``
        ModelForm for creating a :model:`rr.Contact`

    ``object``
        An instance of :model:`rr.ServiceProvider`.

    **Template:**

    :template:`rr/contact.html`
    """
    sp = get_service_provider(pk, request.user)
    form = ContactForm(sp=sp)
    if request.method == "POST":
        if "add_contact" in request.POST:
            form = _add_contact(request, sp)
        elif "remove_contact" in request.POST:
            _remove_contacts(request, sp)
    contacts = Contact.objects.filter(sp=sp, end_at=None)
    return render(request, "rr/contact.html", {
        'object_list': contacts,
        'form': form,
        'object': sp
    })
コード例 #11
0
def certificate_list(request, pk):
    """
    Displays a list of :model:`rr.Certificate` linked to
    :model:`rr.ServiceProvider`.

    Includes a form for adding :model:`rr.Certificate` to
    :model:`rr.ServiceProvider`.

    **Context**

    ``object_list``
        List of :model:`rr.Certificate`.

    ``form``
        Text form for adding a certificate.

    ``object``
        An instance of :model:`rr.ServiceProvider`.

    **Template:**

    :template:`rr/certificate.html`
    """
    sp = get_service_provider(pk, request.user, service_type=["saml"])
    form = CertificateForm(sp=sp)
    if request.method == "POST":
        if "add_cert" in request.POST:
            form = _add_certificate(request, sp)
        elif "remove_certificate" in request.POST:
            _remove_certificates(request, sp)
    certificates = Certificate.objects.filter(sp=sp, end_at=None)
    return render(request, "rr/certificate.html", {
        'object_list': certificates,
        'form': form,
        'object': sp
    })