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})
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})
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})
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 })
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
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
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})
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 })
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 })
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 })
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 })