Add the 'new account' link in the left sidebar.
Change urls from registration to account. Fixes #719 - Legacy-Id: 3553
This commit is contained in:
parent
c370ad0ffa
commit
7207329b0b
|
@ -5,7 +5,6 @@ import hashlib
|
|||
from django import forms
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.auth.forms import PasswordResetForm
|
||||
from django.contrib.sites.models import Site
|
||||
from django.utils.translation import ugettext, ugettext_lazy as _
|
||||
|
||||
|
@ -35,10 +34,10 @@ class RegistrationForm(forms.Form):
|
|||
'today': today,
|
||||
'realm': self.realm,
|
||||
'auth': auth,
|
||||
'to_email': to_email,
|
||||
'username': to_email,
|
||||
'expire': settings.DAYS_TO_EXPIRE_REGISTRATION_LINK,
|
||||
}
|
||||
send_mail(None, to_email, from_email, subject, 'registration/register_email.txt', context)
|
||||
send_mail(None, to_email, from_email, subject, 'registration/creation_email.txt', context)
|
||||
|
||||
def clean_email(self):
|
||||
email = self.cleaned_data.get('email', '')
|
||||
|
@ -49,26 +48,29 @@ class RegistrationForm(forms.Form):
|
|||
return email
|
||||
|
||||
|
||||
class RecoverPasswordForm(PasswordResetForm):
|
||||
class RecoverPasswordForm(RegistrationForm):
|
||||
|
||||
realm = 'IETF'
|
||||
|
||||
def save(self):
|
||||
def send_email(self):
|
||||
domain = Site.objects.get_current().domain
|
||||
subject = 'Password recovery at %s' % domain
|
||||
from_email = settings.DEFAULT_FROM_EMAIL
|
||||
today = datetime.date.today().strftime('%Y%m%d')
|
||||
for user in self.users_cache:
|
||||
to_email = self.cleaned_data["email"]
|
||||
recovery_hash = hashlib.md5('%s%s%s%s%s' % (settings.SECRET_KEY, today, user.username, user.password, self.realm)).hexdigest()
|
||||
context = {'domain': domain,
|
||||
'username': user.username,
|
||||
'recovery_hash': recovery_hash,
|
||||
'today': today,
|
||||
'realm': self.realm,
|
||||
'expire': settings.DAYS_TO_EXPIRE_RECOVER_LINK,
|
||||
}
|
||||
send_mail(None, to_email, from_email, subject, 'registration/password_recovery_email.txt', context)
|
||||
to_email = self.cleaned_data["email"]
|
||||
auth = hashlib.md5('%s%s%s%s' % (settings.SECRET_KEY, today, to_email, self.realm)).hexdigest()
|
||||
context = {'domain': domain,
|
||||
'today': today,
|
||||
'realm': self.realm,
|
||||
'auth': auth,
|
||||
'username': to_email,
|
||||
'expire': settings.DAYS_TO_EXPIRE_REGISTRATION_LINK,
|
||||
}
|
||||
send_mail(None, to_email, from_email, subject, 'registration/password_reset_email.txt', context)
|
||||
|
||||
def clean_email(self):
|
||||
email = self.cleaned_data.get('email', '')
|
||||
return email
|
||||
|
||||
|
||||
class PasswordForm(forms.Form):
|
|
@ -1,11 +1,20 @@
|
|||
# Copyright The IETF Trust 2007, 2009, All Rights Reserved
|
||||
|
||||
from django.conf.urls.defaults import patterns
|
||||
from django.conf.urls.defaults import patterns, url
|
||||
from ietf.ietfauth import views
|
||||
|
||||
urlpatterns = patterns('',
|
||||
(r'^$', views.index, None, 'account_index'),
|
||||
(r'^login/$', views.ietf_login),
|
||||
(r'^loggedin/$', views.ietf_loggedin),
|
||||
(r'^profile/$', views.profile),
|
||||
# (r'^login/(?P<user>[a-z0-9.@]+)/(?P<passwd>.+)$', views.url_login),
|
||||
)
|
||||
|
||||
urlpatterns += patterns('ietf.ietfauth.views',
|
||||
url(r'^create/$', 'create_account', name='create_account'),
|
||||
url(r'^confirm/(?P<username>[\w.@+-]+)/(?P<date>[\d]+)/(?P<realm>[\w]+)/(?P<registration_hash>[a-f0-9]+)/$', 'confirm_account', name='confirm_account'),
|
||||
url(r'^reset/$', 'password_reset_view', name='password_reset'),
|
||||
url(r'^reset/confirm/(?P<username>[\w.@+-]+)/(?P<date>[\d]+)/(?P<realm>[\w]+)/(?P<reset_hash>[a-f0-9]+)/$', 'confirm_password_reset', name='confirm_password_reset'),
|
||||
url(r'^ajax/check_username/$', 'ajax_check_username', name='ajax_check_username'),
|
||||
)
|
||||
|
|
|
@ -32,15 +32,27 @@
|
|||
|
||||
# Copyright The IETF Trust 2007, All Rights Reserved
|
||||
|
||||
from django.template import RequestContext
|
||||
from django.shortcuts import render_to_response
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.http import HttpResponseRedirect, HttpResponse
|
||||
from django.contrib.auth import REDIRECT_FIELD_NAME, authenticate, login
|
||||
from django.contrib.auth.models import User
|
||||
import datetime
|
||||
import hashlib
|
||||
|
||||
from django.conf import settings
|
||||
from django.contrib.auth import REDIRECT_FIELD_NAME, authenticate, login
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.contrib.auth.models import User
|
||||
from django.http import HttpResponseRedirect, HttpResponse, Http404
|
||||
from django.shortcuts import render_to_response
|
||||
from django.template import RequestContext
|
||||
from django.utils import simplejson
|
||||
from django.utils.http import urlquote
|
||||
|
||||
from ietf.ietfauth.forms import (RegistrationForm, PasswordForm,
|
||||
RecoverPasswordForm)
|
||||
|
||||
|
||||
def index(request):
|
||||
return render_to_response('registration/index.html', context_instance=RequestContext(request))
|
||||
|
||||
|
||||
def url_login(request, user, passwd):
|
||||
user = authenticate(username=user, password=passwd)
|
||||
redirect_to = request.REQUEST.get(REDIRECT_FIELD_NAME, '')
|
||||
|
@ -48,7 +60,8 @@ def url_login(request, user, passwd):
|
|||
if user.is_active:
|
||||
login(request, user)
|
||||
return HttpResponseRedirect('/accounts/loggedin/?%s=%s' % (REDIRECT_FIELD_NAME, urlquote(redirect_to)))
|
||||
return HttpResponse("Not authenticated?", status=500)
|
||||
return HttpResponse("Not authenticated?", status=500)
|
||||
|
||||
|
||||
def ietf_login(request):
|
||||
if not request.user.is_authenticated():
|
||||
|
@ -58,6 +71,7 @@ def ietf_login(request):
|
|||
request.session.set_test_cookie()
|
||||
return HttpResponseRedirect('/accounts/loggedin/?%s=%s' % (REDIRECT_FIELD_NAME, urlquote(redirect_to)))
|
||||
|
||||
|
||||
def ietf_loggedin(request):
|
||||
if not request.session.test_cookie_worked():
|
||||
return HttpResponse("You need to enable cookies")
|
||||
|
@ -66,13 +80,14 @@ def ietf_loggedin(request):
|
|||
if not redirect_to or '//' in redirect_to or ' ' in redirect_to:
|
||||
redirect_to = settings.LOGIN_REDIRECT_URL
|
||||
return HttpResponseRedirect(redirect_to)
|
||||
|
||||
|
||||
|
||||
@login_required
|
||||
def profile(request):
|
||||
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
|
||||
from person.models import Person
|
||||
from group.models import Role
|
||||
|
||||
|
||||
roles = []
|
||||
person = None
|
||||
try:
|
||||
|
@ -80,10 +95,87 @@ def profile(request):
|
|||
roles = Role.objects.filter(email__person=person).distinct()
|
||||
except Person.DoesNotExist:
|
||||
pass
|
||||
|
||||
|
||||
return render_to_response('registration/profileREDESIGN.html',
|
||||
dict(roles=roles,
|
||||
person=person),
|
||||
context_instance=RequestContext(request))
|
||||
|
||||
|
||||
return render_to_response('registration/profile.html', context_instance=RequestContext(request))
|
||||
|
||||
|
||||
def create_account(request):
|
||||
success = False
|
||||
if request.method == 'POST':
|
||||
form = RegistrationForm(request.POST)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
success = True
|
||||
else:
|
||||
form = RegistrationForm()
|
||||
return render_to_response('registration/create.html',
|
||||
{'form': form,
|
||||
'success': success},
|
||||
context_instance=RequestContext(request))
|
||||
|
||||
|
||||
def confirm_account(request, username, date, realm, registration_hash):
|
||||
valid = hashlib.md5('%s%s%s%s' % (settings.SECRET_KEY, date, username, realm)).hexdigest() == registration_hash
|
||||
if not valid:
|
||||
raise Http404
|
||||
request_date = datetime.date(int(date[:4]), int(date[4:6]), int(date[6:]))
|
||||
if datetime.date.today() > (request_date + datetime.timedelta(days=settings.DAYS_TO_EXPIRE_REGISTRATION_LINK)):
|
||||
raise Http404
|
||||
success = False
|
||||
if request.method == 'POST':
|
||||
form = PasswordForm(request.POST, username=username)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
success = True
|
||||
else:
|
||||
form = PasswordForm(username=username)
|
||||
return render_to_response('registration/confirm.html',
|
||||
{'form': form, 'email': username, 'success': success},
|
||||
context_instance=RequestContext(request))
|
||||
|
||||
|
||||
def password_reset_view(request):
|
||||
success = False
|
||||
if request.method == 'POST':
|
||||
form = RecoverPasswordForm(request.POST)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
success = True
|
||||
else:
|
||||
form = RecoverPasswordForm()
|
||||
return render_to_response('registration/password_reset.html',
|
||||
{'form': form,
|
||||
'success': success},
|
||||
context_instance=RequestContext(request))
|
||||
|
||||
|
||||
def confirm_password_reset(request, username, date, realm, reset_hash):
|
||||
valid = hashlib.md5('%s%s%s%s' % (settings.SECRET_KEY, date, username, realm)).hexdigest() == reset_hash
|
||||
if not valid:
|
||||
raise Http404
|
||||
success = False
|
||||
if request.method == 'POST':
|
||||
form = PasswordForm(request.POST, update_user=True, username=username)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
success = True
|
||||
else:
|
||||
form = PasswordForm(username=username)
|
||||
return render_to_response('registration/change_password.html',
|
||||
{'form': form,
|
||||
'success': success,
|
||||
'username': username},
|
||||
context_instance=RequestContext(request))
|
||||
|
||||
|
||||
def ajax_check_username(request):
|
||||
username = request.GET.get('username', '')
|
||||
error = False
|
||||
if User.objects.filter(username=username).count():
|
||||
error = 'This email is already in use'
|
||||
return HttpResponse(simplejson.dumps({'error': error}), mimetype='text/plain')
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
from django.conf.urls.defaults import patterns, url
|
||||
|
||||
|
||||
urlpatterns = patterns('ietf.registration.views',
|
||||
url(r'^$', 'register_view', name='register_view'),
|
||||
url(r'^confirm/(?P<username>[\w.@+-]+)/(?P<date>[\d]+)/(?P<realm>[\w]+)/(?P<registration_hash>[a-f0-9]+)/$', 'confirm_register_view', name='confirm_register_view'),
|
||||
url(r'^password_recovery/$', 'password_recovery_view', name='password_recovery_view'),
|
||||
url(r'^password_recovery/confirm/(?P<username>[\w.@+-]+)/(?P<date>[\d]+)/(?P<realm>[\w]+)/(?P<recovery_hash>[a-f0-9]+)/$', 'confirm_password_recovery', name='confirm_password_recovery'),
|
||||
url(r'^ajax/check_username/$', 'ajax_check_username', name='ajax_check_username'),
|
||||
)
|
|
@ -1,91 +0,0 @@
|
|||
import datetime
|
||||
import hashlib
|
||||
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.models import User
|
||||
from django.http import HttpResponse, Http404
|
||||
from django.shortcuts import get_object_or_404, render_to_response
|
||||
from django.template import RequestContext
|
||||
from django.utils import simplejson
|
||||
from django.utils.translation import ugettext as _
|
||||
|
||||
from ietf.registration.forms import (RegistrationForm, PasswordForm,
|
||||
RecoverPasswordForm)
|
||||
|
||||
|
||||
def register_view(request):
|
||||
success = False
|
||||
if request.method == 'POST':
|
||||
form = RegistrationForm(request.POST)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
success = True
|
||||
else:
|
||||
form = RegistrationForm()
|
||||
return render_to_response('registration/register.html',
|
||||
{'form': form,
|
||||
'success': success},
|
||||
context_instance=RequestContext(request))
|
||||
|
||||
|
||||
def confirm_register_view(request, username, date, realm, registration_hash):
|
||||
valid = hashlib.md5('%s%s%s%s' % (settings.SECRET_KEY, date, username, realm)).hexdigest() == registration_hash
|
||||
if not valid:
|
||||
raise Http404
|
||||
request_date = datetime.date(int(date[:4]), int(date[4:6]), int(date[6:]))
|
||||
if datetime.date.today() > (request_date + datetime.timedelta(days=settings.DAYS_TO_EXPIRE_REGISTRATION_LINK)):
|
||||
raise Http404
|
||||
success = False
|
||||
if request.method == 'POST':
|
||||
form = PasswordForm(request.POST, username=username)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
success = True
|
||||
else:
|
||||
form = PasswordForm(username=username)
|
||||
return render_to_response('registration/confirm_register.html',
|
||||
{'form': form, 'email': username, 'success': success},
|
||||
context_instance=RequestContext(request))
|
||||
|
||||
|
||||
def password_recovery_view(request):
|
||||
success = False
|
||||
if request.method == 'POST':
|
||||
form = RecoverPasswordForm(request.POST)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
success = True
|
||||
else:
|
||||
form = RecoverPasswordForm()
|
||||
return render_to_response('registration/password_recovery.html',
|
||||
{'form': form,
|
||||
'success': success},
|
||||
context_instance=RequestContext(request))
|
||||
|
||||
|
||||
def confirm_password_recovery(request, username, date, realm, recovery_hash):
|
||||
user = get_object_or_404(User, username=username)
|
||||
valid = hashlib.md5('%s%s%s%s%s' % (settings.SECRET_KEY, date, user.username, user.password, realm)).hexdigest() == recovery_hash
|
||||
if not valid:
|
||||
raise Http404
|
||||
success = False
|
||||
if request.method == 'POST':
|
||||
form = PasswordForm(request.POST, update_user=True, username=user.username)
|
||||
if form.is_valid():
|
||||
user = form.save()
|
||||
success = True
|
||||
else:
|
||||
form = PasswordForm(username=user.username)
|
||||
return render_to_response('registration/change_password.html',
|
||||
{'form': form,
|
||||
'success': success,
|
||||
'username': user.username},
|
||||
context_instance=RequestContext(request))
|
||||
|
||||
|
||||
def ajax_check_username(request):
|
||||
username = request.GET.get('username', '')
|
||||
error = False
|
||||
if User.objects.filter(username=username).count():
|
||||
error = _('This email is already in use')
|
||||
return HttpResponse(simplejson.dumps({'error': error}), mimetype='text/plain')
|
|
@ -35,6 +35,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
{% load wg_menu %}
|
||||
{% load ietf_filters community_tags %}
|
||||
<ul>
|
||||
<li class="sect first">Accounts</li>
|
||||
<li><a href="{% url account_index %}">New Account</a></li>
|
||||
{% if user|in_group:"Area_Director" %}
|
||||
<li class="sect first">AD Dashboard</li>
|
||||
<li><a href="{% url doc_search_by_ad name=user.get_profile.person.full_name_as_key %}">My Documents</a></li>
|
||||
|
|
|
@ -6,16 +6,16 @@
|
|||
<div id="confirm_register_page">
|
||||
<h1>Confirm registration</h1>
|
||||
{% if success %}
|
||||
<p>Your email {{ email }} has been registered using the password you have select.</p>
|
||||
<p>Your account with login name '{{ email }}' has been created, using the password you have select.</p>
|
||||
<p>Now you can <a href="{% url ietfauth.views.ietf_login %}">sign in</a></p>
|
||||
{% else %}
|
||||
<p>Hello, the registration for {{ email }} is almost complete. Please, select a password.</p>
|
||||
<p>In order to complete the setup of your account with login name '{{ email }}', please, set a password:</p>
|
||||
<form action="" method="POST">
|
||||
<table class="register-form">
|
||||
{{ form }}
|
||||
</table>
|
||||
<div class="submit_row">
|
||||
<input type="submit" value="Register" />
|
||||
<input type="submit" value="Set Password" />
|
||||
</div>
|
||||
</form>
|
||||
{% endif %}
|
|
@ -1,6 +1,6 @@
|
|||
{% extends "registration/base.html" %}
|
||||
|
||||
{% block title %}Register{% endblock %}
|
||||
{% block title %}Account Creation{% endblock %}
|
||||
|
||||
{% block scripts %}
|
||||
{{ block.super }}
|
||||
|
@ -35,23 +35,30 @@
|
|||
|
||||
{% block content %}
|
||||
<div id="register_page">
|
||||
<h1>Register</h1>
|
||||
<h1>Account Creation</h1>
|
||||
{% if success %}
|
||||
<p>Your registration request has been received successfully. We have sent you an email with instructions on how to finish the registration process.</p>
|
||||
<p>Thank you.</p>
|
||||
<p>Your account creation request has been received successfully. <br />
|
||||
We have sent you an email with instructions on how to complete the process.</p>
|
||||
<p>Best regards,
|
||||
<br />
|
||||
<br />
|
||||
<blockquote>
|
||||
The datatracker login manager service<br />
|
||||
(for the IETF Secretariat)
|
||||
</p>
|
||||
{% else %}
|
||||
<form action="" method="POST">
|
||||
<p>Please enter your email addres in order to register a new account.</p>
|
||||
<p>Please enter your email addres in order to create a new account.</p>
|
||||
<table class="register-form">
|
||||
{{ form }}
|
||||
</table>
|
||||
<div class="submit_row">
|
||||
<input type="hidden" id="check_user_name_url" value="{% url ajax_check_username %}" />
|
||||
<input type="submit" value="Register" />
|
||||
<input type="submit" value="Submit" />
|
||||
</div>
|
||||
</form>
|
||||
<p class="recover_password_description">
|
||||
I'm already registered but I forgot my password. <a href="{% url password_recovery_view %}">Please, help me recover my password.</a>
|
||||
I'm already registered but I forgot my password. <a href="{% url password_reset %}">Please, help me recover my password.</a>
|
||||
</p>
|
||||
{% endif %}
|
||||
</div>
|
|
@ -2,7 +2,7 @@ Hello,
|
|||
|
||||
In order to complete your registration on {{ domain }}, please follow this link or copy it and paste it in your web browser:
|
||||
|
||||
http://{{ domain }}{% url confirm_register_view to_email today realm auth %}
|
||||
http://{{ domain }}{% url confirm_account username today realm auth %}
|
||||
|
||||
This link will expire in {{ expire }} days.
|
||||
|
23
ietf/templates/registration/index.html
Normal file
23
ietf/templates/registration/index.html
Normal file
|
@ -0,0 +1,23 @@
|
|||
{% extends "registration/base.html" %}
|
||||
|
||||
{% block title %}Account Management{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div id="account_index">
|
||||
<h1>Account Management</h1>
|
||||
|
||||
<p>
|
||||
<b>You can:</b>
|
||||
<ul>
|
||||
{% if user.username %}
|
||||
<li><a href="/accounts/profile/">See your profile</a></li>
|
||||
{% else %}
|
||||
<li><a href="/accounts/login/">Sign in</a></li>
|
||||
{% endif %}
|
||||
<li><a href="/accounts/create/">Request an account</a></li>
|
||||
<li><a href="/accounts/reset/">Request a password reset </a></li>
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,22 +0,0 @@
|
|||
{% extends "registration/base.html" %}
|
||||
|
||||
{% block title %}Password recovery{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div id="register_page">
|
||||
<h1>Password recovery</h1>
|
||||
{% if success %}
|
||||
<p>Your password recovery request has been received successfully. We have sent you an email with instructions on how to change your password.</p>
|
||||
<p>Thank you.</p>
|
||||
{% else %}
|
||||
<form action="" method="POST">
|
||||
<table class="register-form">
|
||||
{{ form }}
|
||||
</table>
|
||||
<div class="submit_row">
|
||||
<input type="submit" value="Recover my password" />
|
||||
</div>
|
||||
</form>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,13 +0,0 @@
|
|||
Hello,
|
||||
|
||||
We have received a password recovery request at {{ domain }}. In order to change the password for the user with username {{ username }} please follow or paste and copy in your browser the follwoing link:
|
||||
|
||||
http://{{ domain }}{% url confirm_password_recovery username today realm recovery_hash %}
|
||||
|
||||
This link will expire in {{ expire }} days.
|
||||
|
||||
If you didn't request a password recovery you can ignore this email, your credentials have been left untouched.
|
||||
|
||||
Best,
|
||||
|
||||
Your {{ domain }} team.
|
30
ietf/templates/registration/password_reset.html
Normal file
30
ietf/templates/registration/password_reset.html
Normal file
|
@ -0,0 +1,30 @@
|
|||
{% extends "registration/base.html" %}
|
||||
|
||||
{% block title %}Password Reset Request{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div id="register_page">
|
||||
<h1>Password Reset Request</h1>
|
||||
{% if success %}
|
||||
<p>Your password reset request has been received successfully. <br />
|
||||
We have sent you an email with instructions on how to set a new password.</p>
|
||||
<p>Best regards,
|
||||
<br />
|
||||
<br />
|
||||
<blockquote>
|
||||
The datatracker login manager service<br />
|
||||
(for the IETF Secretariat)
|
||||
</blockquote>
|
||||
</p>
|
||||
{% else %}
|
||||
<form action="" method="POST">
|
||||
<table class="register-form">
|
||||
{{ form }}
|
||||
</table>
|
||||
<div class="submit_row">
|
||||
<input type="submit" value="Request password reset" />
|
||||
</div>
|
||||
</form>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endblock %}
|
20
ietf/templates/registration/password_reset_email.txt
Normal file
20
ietf/templates/registration/password_reset_email.txt
Normal file
|
@ -0,0 +1,20 @@
|
|||
{% autoescape off %}
|
||||
Hello,
|
||||
|
||||
We have received a password reset request for {{ username }}
|
||||
at {{ domain }}. In order to change the password for the
|
||||
{{ username }} account, please go to the following link and
|
||||
follow the instructions there:
|
||||
|
||||
http://{{ domain }}{% url confirm_password_reset username today realm auth %}
|
||||
|
||||
This link will expire in {{ expire }} days.
|
||||
|
||||
If you have not request a password reset you can ignore this email, your
|
||||
credentials have been left untouched.
|
||||
|
||||
Best regards,
|
||||
|
||||
The datatracker login manager service
|
||||
(for the IETF Secretariat)
|
||||
{% endautoescape %}
|
|
@ -58,7 +58,6 @@ urlpatterns = patterns('',
|
|||
(r'^accounts/', include('ietf.ietfauth.urls')),
|
||||
(r'^doc/', include('ietf.idrfc.urls')),
|
||||
(r'^wg/', include('ietf.wginfo.urls')),
|
||||
(r'^registration/', include('ietf.registration.urls')),
|
||||
(r'^community/', include('ietf.community.urls')),
|
||||
|
||||
(r'^$', 'ietf.idrfc.views.main'),
|
||||
|
|
Loading…
Reference in a new issue