Merge branch 'main' into nmb/user-invitations

This commit is contained in:
Neil Martinsen-Burrell 2023-03-23 14:49:04 -05:00
commit c12aa1dd75
No known key found for this signature in database
GPG key ID: 6A3C818CC10D0184
5 changed files with 53 additions and 26 deletions

View file

@ -1,34 +1,24 @@
# .gov Product Strategy
Purpose: Clarify our focus for developing a new .gov TLD system and align it to the needs of its users, CISA's mission and standards, and the vision for the .gov program.
# .Gov product strategy
Purpose: Clarify our focus for developing a new .gov TLD system and align it to the needs of our users, CISA's mission and standards, and the vision for the .gov program.
## Product Vision
# .Gov mission statement
CISA intends to create a modern, user-centered, responsive web application to enable .gov registrants to manage their domains registration lifecycle, DNS settings, and useful supporting services. The registrar should be the central .gov hub for CISA, supporting registrant management and tracking technical performance indicators for the TLD. For CISA and registrants, the registrar should help generate insights into the security of an organizations internet-accessible systems.
.gov helps U.S.-based government organizations gain public trust by making .gov a well-known, reliable, and secure space online.
## Product vision
## Primary, Secondary, Tertiary Users
### Primary:
* US-based government organizations and publicly-controlled entities who use or should use the registrar
* _NOTE: Segmenting our audience is a separate conversation and so this intentionally broad as placeholder_
* CISA .gov administrators
CISA intends to create a modern, user-centered, responsive web application to enable .gov registrants to manage their domains registration lifecycle, DNS settings, and useful supporting services. The registrar should be the central .gov hub for CISA, supporting registrant management, and tracking technical performance indicators for the TLD. For CISA and registrants, the registrar should help generate insights into the security of an organizations internet-accessible systems.
## Problem statements
U.S.-based government organizations and publicly controlled entities lack a clear, usable, and efficient way to apply for, register, and manage .gov domains and related infrastructure to build public trust in their online services and communications.
## Problem Statements
U.S.-based government organizations and publicly controlled entities lack a clear, usable, and efficient way to apply, register, and a .gov domain and related infrastructure in order to build public trust of their website and communications.
CISA lacks a scalable, efficient, and secure method of managing the .gov TLD program that helps government agencies to build public trust in their online services and communications.
CISA lacks a scalable, efficient, and secure method of managing the outreach and operations of .gov TLD program in order to facilitate government agencies building public trust of their website and communications.
## Short-term Success for .gov
* A production-ready, modern .gov registrar that can replace the current system with improved user experience and operational efficiency
* Built in the open
* Meeting accessibility and testing standards
* A plan for developing capacity within the CISA organization going forward
## Long-term Success for .gov
* Increase the number of governments, currently on non-.gov TLDs, to .gov
* Develop services to support “the security, privacy, reliability, accessibility, and speed of registered .gov internet domains” (DOTGOV ACT)
* Sustainable long-term skills and capacity to scale up the program
## Risks
_To be prioritized and posted_
## Objective and key results for .gov
| **Objective** | **Key result** |
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **Growth and use:** Regular growth in the overall number of .gov domains registered, with clear increases in election orgs, major metro areas, and state legislatures/courts | - Raw count of registered .gov domains increases <br /> - Number of YoY applications per month increases <br /> - Percent of 100 most populous cities, counties, etc. (per Census data) using .gov domains increases |
| **Data:** The program maintains authoritative contacts at, metadata about, and hostname information for all registered .gov domains, and is able to track that .gov domains are actually used | - Time-to-generate internal reports decreases <br /> - Results of periodic data quality audit show improvements month-over-month |
| **User satisfaction:** Getting a .gov domain is as easy and intuitive as possible | - Completion rate of form improves <br /> - Time from domain request to approval decreases <br /> - Number of domains requiring analyst data changes decreases |
| **Program reputation and experience:** The .gov program is viewed as trustworthy and responsive | - Response time for inquiries decreases <br /> - Resolution time decreases <br /> - Rate of repeat issues for tickets decreases <br /> - Number of SLTT organizations in CoP increases |

View file

@ -1 +1,2 @@
from .application_wizard import *
from .domain import DomainAddUserForm

View file

@ -0,0 +1,21 @@
"""Forms for domain management."""
from django import forms
from registrar.models import User
class DomainAddUserForm(forms.Form):
"""Form for adding a user to a domain."""
email = forms.EmailField(label="Email")
def clean_email(self):
requested_email = self.cleaned_data["email"]
try:
User.objects.get(email=requested_email)
except User.DoesNotExist:
# TODO: send an invitation email to a non-existent user
raise forms.ValidationError("That user does not exist in this system.")
return requested_email

View file

@ -14,12 +14,18 @@ from .utility import DomainPermission
class DomainView(DomainPermission, DetailView):
"""Domain detail overview page."""
model = Domain
template_name = "domain_detail.html"
context_object_name = "domain"
class DomainUsersView(DomainPermission, DetailView):
"""User management page in the domain details."""
model = Domain
template_name = "domain_users.html"
context_object_name = "domain"
@ -33,6 +39,13 @@ class DomainAddUserForm(DomainPermission, forms.Form):
class DomainAddUserView(DomainPermission, FormMixin, DetailView):
"""Inside of a domain's user management, a form for adding users.
Multiple inheritance is used here for permissions, form handling, and
details of the individual domain.
"""
template_name = "domain_add_user.html"
model = Domain
form_class = DomainAddUserForm

View file

@ -49,6 +49,8 @@
10038 OUTOFSCOPE http://app:8080/public/css/.*
10038 OUTOFSCOPE http://app:8080/public/js/.*
10038 OUTOFSCOPE http://app:8080/(robots.txt|sitemap.xml|TODO|edit/)
10038 OUTOFSCOPE http://app:8080/users
10038 OUTOFSCOPE http://app:8080/users/add
# This URL always returns 404, so include it as well.
10038 OUTOFSCOPE http://app:8080/todo
# OIDC isn't configured in the test environment and DEBUG=True so this gives a 500 without CSP headers