chore: Use URL resolver in more places (#4104)

* chore: Use URL resolver more

* Use settings.IDTRACKER_BASE_URL

* More fixes

* Use URL resolver for things under /accounts

* Use URL resolver for things under /stream

* Use URL resolver for things under /iesg

* Use URL resolver for things under /meeting

* Fix bugs

* Use URL resolver for things under /help

* Use URL resolver for things under /ipr

* More changes

* Revert vnu.jar

* Fix typos

* Address review comments by @rjsparks

Co-authored-by: Robert Sparks <rjsparks@nostrum.com>
This commit is contained in:
Lars Eggert 2022-06-22 22:10:16 +03:00 committed by GitHub
parent 4f34c0478e
commit c09fd9dad2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
61 changed files with 219 additions and 221 deletions

View file

@ -169,16 +169,14 @@ def doc_canonical_name(name):
return ""
def link_charter_doc_match1(match):
def link_charter_doc_match(match):
if not doc_canonical_name(match[0]):
return match[0]
return f'<a href="/doc/{match[1][:-1]}/{match[2]}/">{match[0]}</a>'
def link_charter_doc_match2(match):
if not doc_canonical_name(match[0]):
return match[0]
return f'<a href="/doc/{match[1][:-1]}/{match[2]}/">{match[0]}</a>'
url = urlreverse(
"ietf.doc.views_doc.document_main",
kwargs=dict(name=match[1][:-1], rev=match[2]),
)
return f'<a href="{url}">{match[0]}</a>'
def link_non_charter_doc_match(match):
@ -187,20 +185,26 @@ def link_non_charter_doc_match(match):
if not cname:
return match[0]
if name == cname:
return f'<a href="/doc/{cname}/">{match[0]}</a>'
url = urlreverse("ietf.doc.views_doc.document_main", kwargs=dict(name=cname))
return f'<a href="{url}">{match[0]}</a>'
# if we get here, the name probably has a version number and/or extension at the end
rev_split = re.search(r"^(" + re.escape(cname) + r")-(\d{2,})", name)
if rev_split:
name = rev_split.group(1)
else:
return f'<a href="/doc/{cname}/">{match[0]}</a>'
url = urlreverse("ietf.doc.views_doc.document_main", kwargs=dict(name=cname))
return f'<a href="{url}">{match[0]}</a>'
cname = doc_canonical_name(name)
if not cname:
return match[0]
if name == cname:
return f'<a href="/doc/{cname}/{rev_split.group(2)}/">{match[0]}</a>'
url = urlreverse(
"ietf.doc.views_doc.document_main",
kwargs=dict(name=cname, rev=rev_split.group(2)),
)
return f'<a href="{url}">{match[0]}</a>'
# if we get here, we can't linkify
return match[0]
@ -211,44 +215,33 @@ def link_other_doc_match(match):
rev = match[3]
if not doc_canonical_name(doc + rev):
return match[0]
return f'<a href="/doc/{doc}{rev}/">{match[1]}</a>'
url = urlreverse("ietf.doc.views_doc.document_main", kwargs=dict(name=doc + rev))
return f'<a href="{url}">{match[1]}</a>'
@register.filter(name="urlize_ietf_docs", is_safe=True, needs_autoescape=True)
def urlize_ietf_docs(string, autoescape=None):
"""
Make occurrences of RFC NNNN and draft-foo-bar links to /doc/.
Make occurrences of RFC NNNN and draft-foo-bar links to the doc pages.
"""
if autoescape and not isinstance(string, SafeData):
if "<" in string:
string = escape(string)
else:
string = mark_safe(string)
exp1 = r"\b(?<![/\-:=#])(charter-(?:[\d\w\.+]+-)*)(\d{2}-\d{2})(\.(?:txt|ps|pdf|html))?\b"
exp2 = r"\b(?<![/\-:=#])(charter-(?:[\d\w\.+]+-)*)(\d{2})(\.(?:txt|ps|pdf|html))?\b"
if re.search(exp1, string):
string = re.sub(
exp1,
link_charter_doc_match1,
string,
flags=re.IGNORECASE | re.ASCII,
)
elif re.search(exp2, string):
string = re.sub(
exp2,
link_charter_doc_match2,
string,
flags=re.IGNORECASE | re.ASCII,
)
string = re.sub(
r"\b(?<![/\-:=#])(charter-(?:[\d\w\.+]+-)*)(\d{2}(?:-\d{2}))(\.(?:txt|ps|pdf|html))?\b",
link_charter_doc_match,
string,
flags=re.IGNORECASE | re.ASCII,
)
string = re.sub(
r"\b(?<![/\-:=#])((?:draft-|bofreq-|conflict-review-|status-change-)[\d\w\.+-]+(?![-@]))",
# r"\b(?<![/\-:=#])(((?:draft-|bofreq-|conflict-review-|status-change-)(?:[\d\w\.+]+-)*)([\d\w\.+]+?)(\.(?:txt|ps|pdf|html))?)\b(?![-@])",
link_non_charter_doc_match,
string,
flags=re.IGNORECASE | re.ASCII,
)
string = re.sub(
# r"\b((RFC|BCP|STD|FYI|(?:draft-|bofreq-|conflict-review-|status-change-|charter-)[-\d\w.+]+)\s*0*(\d+))\b",
r"\b(?<![/\-:=#])((RFC|BCP|STD|FYI)\s*0*(\d+))\b",
link_other_doc_match,
string,

View file

@ -1887,7 +1887,7 @@ class DocTestCase(TestCase):
self.assertEqual(entry['year'], str(draft.pub_date().year))
self.assertEqual(entry['month'], draft.pub_date().strftime('%b').lower())
self.assertEqual(entry['day'], str(draft.pub_date().day))
self.assertEqual(entry['url'], f'https://datatracker.ietf.org/doc/html/{docname}')
self.assertEqual(entry['url'], settings.IDTRACKER_BASE_URL + urlreverse("ietf.doc.views_doc.document_main", kwargs=dict(name=draft.name, rev=draft.rev)))
#
self.assertNotIn('doi', entry)

View file

@ -322,7 +322,7 @@ This test section has some text.
self.assertContains(r,'Fill in the details below. Keep items in the order they appear here.',status_code=200)
r = self.client.post(url, dict(title='default',
bofreq_submission='enter',
bofreq_content=render_to_string('doc/bofreq/bofreq_template.md',{})))
bofreq_content=render_to_string('doc/bofreq/bofreq_template.md',{'settings': settings})))
self.assertContains(r, 'The example content may not be saved.', status_code=200)
file = NamedTemporaryFile(delete=False,mode="w+",encoding='utf-8')
file.write('some stuff')

View file

@ -5,6 +5,7 @@ import debug # pyflakes:ignore
import io
from django import forms
from django.conf import settings
from django.contrib.auth.decorators import login_required
from django.shortcuts import get_object_or_404, redirect, render
from django.template.loader import render_to_string
@ -57,7 +58,7 @@ class BofreqUploadForm(forms.Form):
if submission_method == "enter":
if require_field("bofreq_content"):
content = self.cleaned_data["bofreq_content"].replace("\r", "")
default_content = render_to_string('doc/bofreq/bofreq_template.md',{})
default_content = render_to_string('doc/bofreq/bofreq_template.md', {'settings': settings})
if content==default_content:
raise forms.ValidationError('The example content may not be saved. Edit it as instructed to document this BOF request.')
elif submission_method == "upload":
@ -178,7 +179,7 @@ def new_bof_request(request):
return redirect('ietf.doc.views_doc.document_main', name=bofreq.name)
else:
init = {'bofreq_content':escape(render_to_string('doc/bofreq/bofreq_template.md',{})),
init = {'bofreq_content':escape(render_to_string('doc/bofreq/bofreq_template.md',{'settings': settings})),
'bofreq_submission':'enter',
}
form = NewBofreqForm(request.user.person, initial=init)
@ -346,4 +347,4 @@ def change_state(request, name, option=None):
doc=bofreq,
login=login,
help_url=urlreverse('ietf.doc.views_help.state_help', kwargs=dict(type="bofreq")),
))
))

View file

@ -547,7 +547,7 @@ def index_all_drafts(request):
names.sort(key=lambda t: t[1])
names = ['<a href="/doc/' + n + '/">' + n +'</a>'
names = [f'<a href=\"{urlreverse("ietf.doc.views_doc.document_main", kwargs=dict(name=n))}\">{n}</a>'
for n, __ in names if n not in names_to_skip]
categories.append((state,

View file

@ -744,11 +744,11 @@ def login(request, extra_context=None):
logout(request)
response = render(request, 'registration/missing_person.html')
if require_consent:
messages.warning(request, mark_safe('''
messages.warning(request, mark_safe(f'''
You have personal information associated with your account which is not
derived from draft submissions or other ietf work, namely: %s. Please go
to your <a href="/accounts/profile">account profile</a> and review your
to your <a href="{urlreverse("ietf.ietfauth.views.profile")}">account profile</a> and review your
personal information, then scoll to the bottom and check the 'confirm'
checkbox and submit the form, in order to to indicate that that the
provided personal information may be used and displayed within the IETF

View file

@ -14,7 +14,7 @@
</td>
<td class="text-end">
<br>
<span class="login">{% if user|has_role:"Secretariat" %}Secretariat {% endif %}Logged in: <a href="/accounts/profile/">{{ user }}</a> | <a rel="nofollow" href="/accounts/logout/">Log out</a></span>
<span class="login">{% if user|has_role:"Secretariat" %}Secretariat {% endif %}Logged in: <a href="{% url 'ietf.ietfauth.views.profile' %}">{{ user }}</a> | <a rel="nofollow" href="{% url 'django.contrib.auth.views.logout' %}">Log out</a></span>
</td>
</tr>
</tbody>
@ -36,4 +36,4 @@
<a href="https://www.amsl.com/"><img src="{% static 'secr/images/ams_logo.png' %}" alt="AMS" class="text-end p-3" ></a>
</div>
</div>
{% endblock %}
{% endblock %}

View file

@ -14,7 +14,7 @@
</td>
<td class="text-end">
<br>
<span class="login">{% if user|has_role:"Secretariat" %}Secretariat {% endif %}Logged in: <a href="/accounts/profile/">{{ user }}</a> | <a rel="nofollow" href="/accounts/logout/">Log out</a></span>
<span class="login">{% if user|has_role:"Secretariat" %}Secretariat {% endif %}Logged in: <a href="{% url 'ietf.ietfauth.views.profile' %}">{{ user }}</a> | <a rel="nofollow" href="{% url 'django.contrib.auth.views.logout' %}">Log out</a></span>
</td>
</tr>
</tbody>
@ -36,4 +36,4 @@
<a href="https://www.amsl.com/"><img src="{% static 'secr/images/ams_logo.png' %}" alt="AMS" class="text-end p-3" ></a>
</div>
</div>
{% endblock %}
{% endblock %}

View file

@ -1,3 +1,3 @@
<ul>
<li><a href="https://datatracker.ietf.org/meeting/{{ meeting.number }}/agenda.txt" target="_blank">View Agenda</a>.</li>
<li><a href="{% url 'ietf.meeting.views.agenda' num=meeting.number ext='.txt' %}" target="_blank">View Agenda</a>.</li>
</ul>

View file

@ -13,7 +13,7 @@
{% for meeting in meetings %}
<tr class="{% cycle 'row1' 'row2' %}">
<td class="text-start text-nowrap">{{ meeting.date }}</td>
<td><a href="https://datatracker.ietf.org/wg/{{ meeting.group.acronym }}">{{ meeting.group.acronym }}</a></td>
<td><a href="{% url 'ietf.group.views.group_home' acronym=meeting.group.acronym %}">{{ meeting.group.acronym }}</a></td>
{% if meeting.schedule %}
<td class="text-center"><a href="{{ meeting.schedule.get_absolute_url }}">Agenda</a></td>
{% else %}
@ -33,4 +33,4 @@
{% endfor %}
</table>
{% endblock %}
{% endblock %}

View file

@ -12,7 +12,7 @@
{% endblock %}
{% block content %}
<p>&raquo; <a href="/meeting/requests">View list of timeslot requests</a></p>
<p>&raquo; <a href="{% url 'ietf.meeting.views.meeting_requests' %}">View list of timeslot requests</a></p>
<div class="module interim-container">
<h2>Sessions - Status</h2>
@ -27,4 +27,4 @@
</div> <!-- module -->
{% endblock %}
{% endblock %}

View file

@ -16,7 +16,7 @@
{% endblock %}
{% block content %}
<p>&raquo; <a href="/meeting/requests">View list of timeslot requests</a></p>
<p>&raquo; <a href="{% url 'ietf.meeting.views.meeting_requests' %}">View list of timeslot requests</a></p>
<div class="module interim-container">
<h2>
Sessions Request Tool: IETF {{ meeting.number }}

View file

@ -5,7 +5,7 @@ submitted by {{ requester }}.
The third session requires your approval.
To approve the session go to the session request view here:
https://datatracker.ietf.org{% url "ietf.secr.sreq.views.view" acronym=group.acronym %}
{{ settings.IDTRACKER_BASE_URL }}{% url "ietf.secr.sreq.views.view" acronym=group.acronym %}
and click "Approve Third Session".
Regards,

View file

@ -7,6 +7,6 @@
{{ form.date.label_tag }} {{ form.date }}&nbsp;&nbsp;<button type="submit" name="submit" value="Select">Select</button>
</form>
<br>
<a href="/admin/iesg/telechatdate/" target="_blank">Add a new Telechat Date</a>
<a href="{% url 'admin:iesg_telechatdate_changelist' %}" target="_blank">Add a new Telechat Date</a>
</div>
{% endblock %}

View file

@ -14,8 +14,8 @@
{% endfor %}
</ul>
<br>
<a href="/admin/iesg/telechatagendaitem/" target="_blank">Add a new Management Issue</a>
<a href="{% url 'admin:iesg_telechatagendaitem_changelist' %}" target="_blank">Add a new Management Issue</a>
</div>
{% endblock %}
{% endblock %}

View file

@ -515,9 +515,6 @@ CORS_URLS_REGEX = r'^(/api/.*|.*\.json|.*/json/?)$'
# Setting for django_referrer_policy.middleware.ReferrerPolicyMiddleware
REFERRER_POLICY = 'strict-origin-when-cross-origin'
# Content security policy configuration (django-csp)
CSP_DEFAULT_SRC = ("'self'", "'unsafe-inline'", "data: https://datatracker.ietf.org/ https://www.ietf.org/ https://analytics.ietf.org/")
# django.middleware.security.SecurityMiddleware
SECURE_BROWSER_XSS_FILTER = True
SECURE_CONTENT_TYPE_NOSNIFF = True
@ -541,6 +538,9 @@ RFCDIFF_BASE_URL = "https://www.ietf.org/rfcdiff"
IDNITS_BASE_URL = "https://www.ietf.org/tools/idnits"
XML2RFC_BASE_URL = "https://xml2rfc.tools.ietf.org/experimental.html"
# Content security policy configuration (django-csp)
CSP_DEFAULT_SRC = ("'self'", "'unsafe-inline'", f"data: {IDTRACKER_BASE_URL} https://www.ietf.org/ https://analytics.ietf.org/")
# The name of the method to use to invoke the test suite
TEST_RUNNER = 'ietf.utils.test_runner.IetfTestRunner'
@ -1010,7 +1010,7 @@ BIBXML_BASE_PATH = '/a/ietfdata/derived/bibxml'
TZDATA_ICS_PATH = BASE_DIR + '/../vzic/zoneinfo/'
SECR_BLUE_SHEET_PATH = '/a/www/ietf-datatracker/documents/blue_sheet.rtf'
SECR_BLUE_SHEET_URL = '//datatracker.ietf.org/documents/blue_sheet.rtf'
SECR_BLUE_SHEET_URL = IDTRACKER_BASE_URL + '/documents/blue_sheet.rtf'
SECR_INTERIM_LISTING_DIR = '/a/www/www6/meeting/interim'
SECR_MAX_UPLOAD_SIZE = 40960000
SECR_PROCEEDINGS_DIR = '/a/www/www6s/proceedings/'
@ -1265,4 +1265,4 @@ if SERVER_MODE != 'production':
CSRF_COOKIE_SAMESITE = 'Lax'
SESSION_COOKIE_SECURE = False
SESSION_COOKIE_SAMESITE = 'Lax'

View file

@ -15,6 +15,9 @@ from ietf.settings import TEST_CODE_COVERAGE_CHECKER, BASE_DIR, PHOTOS_DIRNAME
import debug # pyflakes:ignore
debug.debug = True
# Use a different hostname, to catch hardcoded values
IDTRACKER_BASE_URL = "https://sqlitetest.ietf.org"
# Workaround to avoid spending minutes stepping through the migrations in
# every test run. The result of this is to use the 'syncdb' way of creating
# the test database instead of doing it through the migrations. Taken from

View file

@ -15,10 +15,10 @@
</p>
<ul>
<li>
<a href="/accounts/login/">Attempt to login again</a>
<a href="{% url 'ietf.ietfauth.views.login' %}">Attempt to login again</a>
</li>
<li>
<a href="/accounts/reset/">Request a password reset</a>
<a href="{% url 'ietf.ietfauth.views.password_reset' %}">Request a password reset</a>
</li>
</ul>
<p class="mb-0">

View file

@ -25,7 +25,7 @@
</p>
<p>
The API top endpoint is at
<a href="https://datatracker.ietf.org/api/v1/">https://datatracker.ietf.org/api/v1/</a>.
<a href="{{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.api.views.top_level' %}">{{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.api.views.top_level' %}</a>.
The top
endpoint lists inferior endpoints, and thus permits some autodiscovery,
but there's really no substitute for looking at the actual ORM model classes.
@ -34,7 +34,7 @@
</p>
<ul>
<li>
<a href="https://datatracker.ietf.org/api/v1/group/group/">https://datatracker.ietf.org/api/v1/group/group/</a>
<a href="{{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.api.views.top_level' %}/group/group/">{{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.api.views.top_level' %}/group/group/</a>
</li>
<li>
<a href="https://github.com/ietf-tools/datatracker/blob/main/ietf/group/models.py">
@ -49,7 +49,7 @@
<h3 id="framework-documents">Framework API: Documents</h3>
<p>
Documents are listed at
<a href="https://datatracker.ietf.org/api/v1/doc/document/">/api/v1/doc/document/</a>.
<a href="{{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.api.views.top_level' %}/doc/document/">{% url 'ietf.api.views.top_level' %}/doc/document/</a>.
</p>
<p>
In general, individual database objects are represented in the API with a path
@ -61,8 +61,8 @@
URL:
</p>
<p>
<a href="https://datatracker.ietf.org/api/v1/doc/document/draft-ietf-eppext-keyrelay/">
https://datatracker.ietf.org/api/v1/doc/document/draft-ietf-eppext-keyrelay/
<a href="{{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.api.views.top_level' %}/doc/document/draft-ietf-eppext-keyrelay/">
{{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.api.views.top_level' %}/doc/document/draft-ietf-eppext-keyrelay/
</a>
</p>
<p>
@ -71,7 +71,7 @@
and a list with one element:
</p>
<p>
<a href="https://datatracker.ietf.org/api/v1/doc/document/?name=draft-ietf-eppext-keyrelay">
<a href="{{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.api.views.top_level' %}/doc/document/?name=draft-ietf-eppext-keyrelay">
api/v1/doc/document/?name=draft-ietf-eppext-keyrelay
</a>
</p>
@ -82,13 +82,13 @@
<ul>
<li>
If a document has an rfc-editor state, you can select for it by asking for, e.g.,
<a href="https://datatracker.ietf.org/api/v1/doc/document/?limit=0&amp;name__contains=-v6ops-&amp;states__type__slug__in=draft-rfceditor">
<a href="{{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.api.views.top_level' %}/doc/document/?limit=0&amp;name__contains=-v6ops-&amp;states__type__slug__in=draft-rfceditor">
v6ops documents which match <code>states__type__slug__in=draft-rfceditor</code>
</a>
</li>
<li>
If a document has an IESG state, you can select for it by asking for, e.g.,
<a href="https://datatracker.ietf.org/api/v1/doc/document/?name__contains=-v6ops&amp;states__type__slug__in=draft-iesg">
<a href="{{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.api.views.top_level' %}/doc/document/?name__contains=-v6ops&amp;states__type__slug__in=draft-iesg">
v6ops documents which match <code>states__type__slug__in=draft-iesg</code>
</a>
</li>
@ -110,22 +110,22 @@
You could either fetch and remember the different state groups of interest to you
with queries like
<pre>
$ curl 'https://datatracker.ietf.org/api/v1/doc/state/?format=json&amp;limit=0&amp;type__slug__in=draft-rfceditor'
$ curl 'https://datatracker.ietf.org/api/v1/doc/state/?format=json&amp;limit=0&amp;type__slug__in=draft-iesg'
$ curl 'https://datatracker.ietf.org/api/v1/doc/state/?format=json&amp;limit=0&amp;type__slug__in=draft-stream-ietf'
$ curl '{{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.api.views.top_level' %}/doc/state/?format=json&amp;limit=0&amp;type__slug__in=draft-rfceditor'
$ curl '{{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.api.views.top_level' %}/doc/state/?format=json&amp;limit=0&amp;type__slug__in=draft-iesg'
$ curl '{{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.api.views.top_level' %}/doc/state/?format=json&amp;limit=0&amp;type__slug__in=draft-stream-ietf'
</pre>
and then match the listed "resource_uri" of the results to the states listed for each
document when you ask for
<pre>
$ curl 'https://datatracker.ietf.org/api/v1/doc/document/?limit=0&amp;name__contains=-v6ops-'
$ curl '{{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.api.views.top_level' %}/doc/document/?limit=0&amp;name__contains=-v6ops-'
</pre>
</li>
<li>
Or alternatively you could do a series of queries asking for matches to the RFC Editor
state first, then the IESG state, then the Stream state, and exclude earlier hits:
<pre>
$ curl 'https://datatracker.ietf.org/api/v1/doc/document/?limit=0&amp;name__contains=-v6ops-&amp;states__type__slug__in=draft-rfceditor' ...
$ curl 'https://datatracker.ietf.org/api/v1/doc/document/?limit=0&amp;name__contains=-v6ops-&amp;states__type__slug__in=draft-iesg' ...
$ curl '{{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.api.views.top_level' %}/doc/document/?limit=0&amp;name__contains=-v6ops-&amp;states__type__slug__in=draft-rfceditor' ...
$ curl '{{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.api.views.top_level' %}/doc/document/?limit=0&amp;name__contains=-v6ops-&amp;states__type__slug__in=draft-iesg' ...
</pre>
etc.
</li>
@ -180,7 +180,7 @@ $ curl 'https://datatracker.ietf.org/api/v1/doc/document/?limit=0&amp;name__cont
Here is an example:
</p>
<pre>
$ curl -S -F "apikey=AwAAABVR3D5GHkVMhspKSxBCVknGMmqikNIhT85kSnghjaV_pYy26WV92mm-jpdi" -F "doc=draft-ietf-lamps-eai-addresses" -F "position=noobj" -F "comment=Comment text" https://datatracker.ietf.org/api/iesg/position
$ curl -S -F "apikey=AwAAABVR3D5GHkVMhspKSxBCVknGMmqikNIhT85kSnghjaV_pYy26WV92mm-jpdi" -F "doc=draft-ietf-lamps-eai-addresses" -F "position=noobj" -F "comment=Comment text" {{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.doc.views_ballot.api_set_position' %}
Done
</pre>
<h2 id="session-video-url-api">Set Session Video URL</h2>
@ -221,7 +221,7 @@ $ curl -S -F "apikey=AwAAABVR3D5GHkVMhspKSxBCVknGMmqikNIhT85kSnghjaV_pYy26WV92mm
Here is an example:
</p>
<pre>
$ curl -S -F "apikey=DgAAAMLSi3coaE5TjrRs518xO8eBRlCmFF3eQcC8_SjUTtRGLGiJh7-1SYPT5WiS" -F "meeting=101" -F "group=mptcp" -F "item=1" -F "url=https://foo.example/beer/mptcp" https://datatracker.ietf.org/api/meeting/session/video/url
$ curl -S -F "apikey=DgAAAMLSi3coaE5TjrRs518xO8eBRlCmFF3eQcC8_SjUTtRGLGiJh7-1SYPT5WiS" -F "meeting=101" -F "group=mptcp" -F "item=1" -F "url=https://foo.example/beer/mptcp" {{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.meeting.views.api_set_session_video_url' %}
Done
</pre>
<h2 id="openid-connect">OpenID Connect</h2>
@ -230,7 +230,7 @@ $ curl -S -F "apikey=DgAAAMLSi3coaE5TjrRs518xO8eBRlCmFF3eQcC8_SjUTtRGLGiJh7-1SYP
<a href="https://openid.net/connect/">OpenID Connect</a>,
but
not dynamic registration. The OpenID Connect Issuer is
<code> {{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.api.urls.oidc_issuer' %} </code>
<code>{{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.api.urls.oidc_issuer' %}</code>
</p>
<h2 id="datatracker-version">Datatracker Version</h2>
<p>

View file

@ -47,7 +47,7 @@
{% if not user.is_authenticated %}
<a class="d-none d-sm-block mx-5 btn {% if server_mode and server_mode == "production" %} btn-warning {% else %} btn-info {% endif %}"
rel="nofollow"
href="/accounts/login/?next={{ request.get_full_path|removesuffix:"accounts/logout/"|urlencode }}">
href="{% url 'ietf.ietfauth.views.login' %}?next={{ request.get_full_path|removesuffix:'accounts/logout/'|urlencode }}">
Sign
in
</a>

View file

@ -9,7 +9,7 @@
<link rel="icon"
sizes="16x16"
href="{% if server_mode and server_mode == 'production' %}{% static 'ietf/images/ietf-logo-nor-16.png' %}{% else %}{% static 'ietf/images/ietf-logo-nor-16-dev.png' %}{% endif %}">
<link rel="manifest" href="/site.webmanifest">
<link rel="manifest" href="{% url 'site.webmanifest' %}">
<link rel="mask-icon"
href="{% static 'ietf/images/ietf-logo-nor-mask.svg' %}"
color="{% if server_mode and server_mode == 'production' %}#ffffff{% else %}#ffc4c4{% endif %}">

View file

@ -236,19 +236,19 @@
{% endif %}
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
href="/meeting/agenda/">
href="{% url 'ietf.meeting.views.agenda' %}">
Agenda
</a>
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
href="/meeting/materials/">
href="{% url 'ietf.meeting.views.materials' %}">
Materials
</a>
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
href="/meeting/floor-plan/">
href="{% url 'ietf.meeting.views.floor_plan' %}">
Floor plan
</a>
</li>
@ -266,13 +266,13 @@
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
href="/secr/sreq/">
href="{% url 'ietf.secr.sreq.views.main' %}">
Request a session
</a>
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
href="/meeting/requests">
href="{% url 'ietf.meeting.views.meeting_requests' %}">
Session requests
</a>
</li>
@ -287,7 +287,7 @@
{% endif %}
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
href="/meeting/upcoming">
href="{% url 'ietf.meeting.views.upcoming' %}">
Upcoming meetings
</a>
</li>
@ -302,7 +302,7 @@
{% endif %}
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
href="/meeting/past">
href="{% url 'ietf.meeting.views.past' %}">
Past meetings
</a>
</li>
@ -334,19 +334,19 @@
{% endif %}
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
href="/ipr/">
href="{% url 'ietf.ipr.views.showlist' %}">
IPR disclosures
</a>
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
href="/liaison/">
href="{% url 'ietf.liaisons.views.liaison_list' %}">
Liaison statements
</a>
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
href="/iesg/agenda/">
href="{% url 'ietf.iesg.views.agenda' %}">
IESG agenda
</a>
</li>
@ -358,7 +358,7 @@
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
href="/doc/downref/">
href="{% url 'ietf.doc.views_downref.downref_registry' %}">
Downref registry
</a>
</li>
@ -392,13 +392,13 @@
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
href="/group/edu/materials/">
href="{% url "ietf.group.views.materials" acronym='edu' %}">
Tutorials
</a>
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %}text-wrap link-primary{% endif %}"
href="/api/">
href="{% url 'ietf.api.views.api_help' %}">
API Help
</a>
</li>
@ -426,4 +426,4 @@
{% endif %}
{% if flavor == 'top' %}
{% include "base/menu_user.html" %}
{% endif %}
{% endif %}

View file

@ -20,11 +20,12 @@
<span class="fw-bolder">User</span>
</li>
{% endif %}
{% if request.get_full_path == "/accounts/logout/" %}
{% url 'django.contrib.auth.views.logout' as logout_url %}
{% if request.get_full_path == logout_url %}
<li>
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
rel="nofollow"
href="/accounts/login {% if "/accounts/logout/" not in request.get_full_path %} /?next={{ request.get_full_path|urlencode }}{% endif %}">
href="{% url 'ietf.ietfauth.views.login' %}{% if logout_url not in request.get_full_path %}/?next={{ request.get_full_path|urlencode }}{% endif %}">
Sign in
</a>
</li>
@ -33,33 +34,33 @@
<li>
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
rel="nofollow"
href="/accounts/logout/">
href="{% url 'django.contrib.auth.views.logout' %}">
Sign out
</a>
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
rel="nofollow"
href="/accounts/profile/">
href="{% url 'ietf.ietfauth.views.profile' %}">
Account info
</a>
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
href="/person/{{ user.person.name|urlencode }}">
href="{% url 'ietf.person.views.profile' email_or_name=user.person.name %}">
Public profile page
</a>
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
href="{% url "ietf.cookies.views.preferences" %}"
href="{% url 'ietf.cookies.views.preferences' %}"
rel="nofollow">
Preferences
</a>
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
href="{% url "ietf.ietfauth.views.apikey_index" %}"
href="{% url 'ietf.ietfauth.views.apikey_index' %}"
rel="nofollow">
API keys
</a>
@ -67,14 +68,14 @@
<li>
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
rel="nofollow"
href="/accounts/password/">
href="{% url 'ietf.ietfauth.views.change_password' %}">
Change password
</a>
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
rel="nofollow"
href="/accounts/username/">
href="{% url 'ietf.ietfauth.views.change_username' %}">
Change username
</a>
</li>
@ -82,20 +83,20 @@
<li>
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
rel="nofollow"
href="/accounts/login/?next={{ request.get_full_path|urlencode }}">
href="{% url 'ietf.ietfauth.views.login' %}/?next={{ request.get_full_path|urlencode }}">
Sign in
</a>
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
rel="nofollow"
href="/accounts/reset/">
href="{% url 'ietf.ietfauth.views.password_reset' %}">
Password reset
</a>
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
href="{% url "ietf.cookies.views.preferences" %}"
href="{% url 'ietf.cookies.views.preferences' %}"
rel="nofollow">
Preferences
</a>
@ -111,7 +112,7 @@
{% if not request.user.is_authenticated %}
<li>
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
href="{% url "ietf.ietfauth.views.create_account" %}">
href="{% url 'ietf.ietfauth.views.create_account' %}">
New account
</a>
</li>
@ -119,7 +120,7 @@
{% if user|has_role:"Reviewer" %}
<li>
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
href="{% url "ietf.ietfauth.views.review_overview" %}">
href="{% url 'ietf.ietfauth.views.review_overview' %}">
My reviews
</a>
</li>
@ -135,25 +136,25 @@
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
href="{% url "ietf.iesg.views.agenda_documents" %}">
href="{% url 'ietf.iesg.views.agenda_documents' %}">
Next telechat
</a>
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
href="{% url "ietf.iesg.views.discusses" %}">
href="{% url 'ietf.iesg.views.discusses' %}">
Discusses
</a>
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
href="{% url "ietf.iesg.views.milestones_needing_review" %}">
href="{% url 'ietf.iesg.views.milestones_needing_review' %}">
Milestone review
</a>
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
href="{% url "ietf.doc.views_search.drafts_in_last_call" %}">
href="{% url 'ietf.doc.views_search.drafts_in_last_call' %}">
Last Call docs
</a>
</li>
@ -165,31 +166,31 @@
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
href="/admin/iesg/telechatdate/">
href="{% url 'admin:iesg_telechatdate_changelist' %}">
Telechat dates
</a>
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
href="/admin/iesg/telechatagendaitem/">
href="{% url 'admin:iesg_telechatagendaitem_changelist' %}">
Management items
</a>
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
href="{% url "ietf.iesg.views.milestones_needing_review" %}">
href="{% url 'ietf.iesg.views.milestones_needing_review' %}">
Milestones
</a>
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
href="{% url "ietf.sync.views.discrepancies" %}">
href="{% url 'ietf.sync.views.discrepancies' %}">
Sync discrepancies
</a>
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
href="{% url "ietf.ietfauth.views.add_account_whitelist" %}">
href="{% url 'ietf.ietfauth.views.add_account_whitelist' %}">
Account whitelist
</a>
</li>
@ -204,7 +205,7 @@
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
href="{% url "ietf.sync.views.discrepancies" %}">
href="{% url 'ietf.sync.views.discrepancies' %}">
Sync discrepancies
</a>
</li>
@ -219,9 +220,9 @@
</li>
<li>
<a class="dropdown-item {% if flavor != 'top' %} text-wrap link-primary{% endif %}"
href="{% url "ietf.sync.views.discrepancies" %}">
href="{% url 'ietf.sync.views.discrepancies' %}">
Sync discrepancies
</a>
</li>
{% endif %}
{% if flavor == "top" %}</ul></li>{% endif %}
{% if flavor == "top" %}</ul></li>{% endif %}

View file

@ -61,7 +61,7 @@
Conveniently track individual documents in your personal list with the track icon
<i class="bi bi-bookmark"></i>
in
<a href="/doc/search/">search results</a>.
<a href="{% url 'ietf.doc.views_search.search' %}">search results</a>.
</p>
<p>
You can also add documents here:

View file

@ -4,7 +4,7 @@ Hello,
This is a notification from the {{ clist.long_name }}.
Document: {{ event.doc }},
https://datatracker.ietf.org/doc/{{ event.doc.name }}/
{{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.doc.views_doc.document_main' name=event.doc.name %}
Change by {{ event.by }} on {{ event.time }}:

View file

@ -21,42 +21,42 @@
{% if new_enough == '7' %}
active
{% endif %}"
href="/accounts/settings/new_enough/7">
href="{% url 'ietf.cookies.views.new_enough' days=7 %}">
7 days
</a>
<a class="btn btn-outline-primary
{% if new_enough == '14' %}
active
{% endif %}"
href="/accounts/settings/new_enough/14">
href="{% url 'ietf.cookies.views.new_enough' days=14 %}">
14 days
</a>
<a class="btn btn-outline-primary
{% if new_enough == '21' %}
active
{% endif %}"
href="/accounts/settings/new_enough/21">
href="{% url 'ietf.cookies.views.new_enough' days=21 %}">
21 days
</a>
<a class="btn btn-outline-primary
{% if new_enough == '30' %}
active
{% endif %}"
href="/accounts/settings/new_enough/30">
href="{% url 'ietf.cookies.views.new_enough' days=30 %}">
30 days
</a>
<a class="btn btn-outline-primary
{% if new_enough == '60' %}
active
{% endif %}"
href="/accounts/settings/new_enough/60">
href="{% url 'ietf.cookies.views.new_enough' days=60 %}">
60 days
</a>
<a class="btn btn-outline-primary
{% if new_enough == '90' %}
active
{% endif %}"
href="/accounts/settings/new_enough/90">
href="{% url 'ietf.cookies.views.new_enough' days=90 %}">
90 days
</a>
</p>
@ -69,42 +69,42 @@
{% if expires_soon == '7' %}
active
{% endif %}"
href="/accounts/settings/expires_soon/7">
href="{% url 'ietf.cookies.views.expires_soon' days=7 %}">
7 days
</a>
<a class="btn btn-outline-primary
{% if expires_soon == '14' %}
active
{% endif %}"
href="/accounts/settings/expires_soon/14">
href="{% url 'ietf.cookies.views.expires_soon' days=14 %}">
14 days
</a>
<a class="btn btn-outline-primary
{% if expires_soon == '21' %}
active
{% endif %}"
href="/accounts/settings/expires_soon/21">
href="{% url 'ietf.cookies.views.expires_soon' days=21 %}">
21 days
</a>
<a class="btn btn-outline-primary
{% if expires_soon == '30' %}
active
{% endif %}"
href="/accounts/settings/expires_soon/30">
href="{% url 'ietf.cookies.views.expires_soon' days=30 %}">
30 days
</a>
<a class="btn btn-outline-primary
{% if expires_soon == '60' %}
active
{% endif %}"
href="/accounts/settings/expires_soon/60">
href="{% url 'ietf.cookies.views.expires_soon' days=60 %}">
60 days
</a>
<a class="btn btn-outline-primary
{% if expires_soon == '90' %}
active
{% endif %}"
href="/accounts/settings/expires_soon/90">
href="{% url 'ietf.cookies.views.expires_soon' days=90 %}">
90 days
</a>
</p>
@ -117,14 +117,14 @@
{% if full_draft == 'off' %}
active
{% endif %}"
href="/accounts/settings/full_draft/off">
href="{% url 'ietf.cookies.views.full_draft' enabled='off' %}">
Off
</a>
<a class="btn btn-outline-primary
{% if full_draft == 'on' %}
active
{% endif %}"
href="/accounts/settings/full_draft/on">
href="{% url 'ietf.cookies.views.full_draft' enabled='on' %}">
On
</a>
</p>
@ -137,15 +137,15 @@
{% if left_menu == 'off' %}
active
{% endif %}"
href="/accounts/settings/left_menu/off">
href="{% url 'ietf.cookies.views.left_menu' enabled='off' %}">
Off
</a>
<a class="btn btn-outline-primary
{% if left_menu == 'on' %}
active
{% endif %}"
href="/accounts/settings/left_menu/on">
href="{% url 'ietf.cookies.views.left_menu' enabled='on' %}">
On
</a>
</p>
{% endblock %}
{% endblock %}

View file

@ -30,9 +30,9 @@ To allow evaluation of your proposal, please include the following items:
## Links to the mailing list, draft charter if any, relevant Internet-Drafts, etc.
- Mailing List: https://www.ietf.org/mailman/listinfo/example
- Draft charter: https://datatracker.ietf.org/doc/charter-ietf-EXAMPLE/
- Draft charter: {{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.doc.views_doc.document_main' name='charter-ietf-EXAMPLE' %}
- Relevant drafts:
- Use Cases:
- https://datatracker.ietf.org/html/draft-blah-uses
- {{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.doc.views_doc.document_main' name='draft-blah-uses' %}
- Solutions
- https://datatracker.ietf.org/html/draft-blah-soln
- {{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.doc.views_doc.document_main' name='draft-blah-soln' %}

View file

@ -10,28 +10,28 @@
% actual RFC at https://rfc-editor.org/rfc/rfc{{ doc.rfc_number }}.txt
{% endif %}
@misc{% templatetag openbrace %}rfc{{ doc.rfc_number }},
series = {Request for Comments},
number = {{ doc.rfc_number }},
howpublished = {% templatetag openbrace %}RFC {{ doc.rfc_number }}{% if doc.doc.intended_std_level %} ({{ doc.intended_std_level }}){% endif %}{% templatetag closebrace %},
publisher = {RFC Editor},
doi = {% templatetag openbrace %}{{ doi }}{% templatetag closebrace %},
url = {% templatetag openbrace %}{{ doc.rfc_number|rfceditor_info_url }}{% templatetag closebrace %},{% else %}
series = {Request for Comments},
number = {{ doc.rfc_number }},
howpublished = {% templatetag openbrace %}RFC {{ doc.rfc_number }}{% if doc.doc.intended_std_level %} ({{ doc.intended_std_level }}){% endif %}{% templatetag closebrace %},
publisher = {RFC Editor},
doi = {% templatetag openbrace %}{{ doi }}{% templatetag closebrace %},
url = {% templatetag openbrace %}{{ doc.rfc_number|rfceditor_info_url }}{% templatetag closebrace %},{% else %}
{% if published %}%% You should probably cite rfc{{ latest_revision.doc.rfc_number }} instead of this I-D.{% else %}{% if replaced_by %}%% You should probably cite {{replaced_by|join:" or "}} instead of this I-D.{% else %}
{% if doc.rev != latest_revision.rev %}%% You should probably cite {{latest_revision.doc.name}}-{{latest_revision.rev}} instead of this revision.{%endif%}{% endif %}{% endif %}
@techreport{% templatetag openbrace %}{{doc.name|slice:"6:"}}-{{doc.rev}},
number = {% templatetag openbrace %}{{doc.name}}-{{doc.rev}}{% templatetag closebrace %},
type = {% templatetag openbrace %}Internet-Draft{% templatetag closebrace %},
institution = {% templatetag openbrace %}Internet Engineering Task Force{% templatetag closebrace %},
publisher = {% templatetag openbrace %}Internet Engineering Task Force{% templatetag closebrace %},
note = {% templatetag openbrace %}Work in Progress{% templatetag closebrace %},
url = {% templatetag openbrace %}https://datatracker.ietf.org/doc/html/{{doc.name}}-{{doc.rev}}{% templatetag closebrace %},{% endif %}
author = {% templatetag openbrace %}{% for author in doc.documentauthor_set.all %}{{ author.person.name|texescape}}{% if not forloop.last %} and {% endif %}{% endfor %}{% templatetag closebrace %},
title = {% templatetag openbrace %}{% templatetag openbrace %}{{doc.title|texescape}}{% templatetag closebrace %}{% templatetag closebrace %},
pagetotal = {{ doc.pages }},
year = {{ doc.pub_date.year }},
month = {{ doc.pub_date|date:"b" }},{% if not doc.rfc_number or doc.pub_date.day == 1 and doc.pub_date.month == 4 %}
day = {{ doc.pub_date.day }},{% endif %}
abstract = {% templatetag openbrace %}{{ doc.abstract|clean_whitespace|texescape }}{% templatetag closebrace %},
number = {% templatetag openbrace %}{{doc.name}}-{{doc.rev}}{% templatetag closebrace %},
type = {% templatetag openbrace %}Internet-Draft{% templatetag closebrace %},
institution = {% templatetag openbrace %}Internet Engineering Task Force{% templatetag closebrace %},
publisher = {% templatetag openbrace %}Internet Engineering Task Force{% templatetag closebrace %},
note = {% templatetag openbrace %}Work in Progress{% templatetag closebrace %},
url = {% templatetag openbrace %}{{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.doc.views_doc.document_main' name=doc.name rev=doc.rev %}{% templatetag closebrace %},{% endif %}
author = {% templatetag openbrace %}{% for author in doc.documentauthor_set.all %}{{ author.person.name|texescape}}{% if not forloop.last %} and {% endif %}{% endfor %}{% templatetag closebrace %},
title = {% templatetag openbrace %}{% templatetag openbrace %}{{doc.title|texescape}}{% templatetag closebrace %}{% templatetag closebrace %},
pagetotal = {{ doc.pages }},
year = {{ doc.pub_date.year }},
month = {{ doc.pub_date|date:"b" }},{% if not doc.rfc_number or doc.pub_date.day == 1 and doc.pub_date.month == 4 %}
day = {{ doc.pub_date.day }},{% endif %}
abstract = {% templatetag openbrace %}{{ doc.abstract|clean_whitespace|texescape }}{% templatetag closebrace %},
{% templatetag closebrace %}
{% endautoescape %}

View file

@ -74,7 +74,7 @@
{% if draft_name %}
<div>
Was
<a href="/doc/{{ draft_name }}/">{{ draft_name }}</a>
<a href="{% url 'ietf.doc.views_doc.document_main' name=draft_name %}">{{ draft_name }}</a>
{% if submission %}({{ submission|safe }}){% endif %}
</div>
{% endif %}
@ -1188,4 +1188,4 @@
</script>
<script src="{% static 'ietf/js/document_timeline.js' %}">
</script>
{% endblock %}
{% endblock %}

View file

@ -38,7 +38,7 @@
{{ a }}{% if not forloop.last %}, {% else %}.{% endif %}
{% endfor %}
<br>
<a href="/doc/{{ d.name }}/">{{ d.name }}-{{ d.rev }}</a>
<a href="{% url 'ietf.doc.views_doc.document_main' name=d.name rev=d.rev %}">{{ d.name }}-{{ d.rev }}</a>
<br>
{{ d.rev_time|date:"Y-m-d" }}
</div>

View file

@ -24,7 +24,7 @@
<p>
You can see the default Working Group I-D State Diagram
in
<a href="/doc/html/rfc6174#section-4.1">Section 4.1 of RFC6174</a>.
<a href="{% url 'ietf.doc.views_doc.document_html' name='rfc6174' %}">Section 4.1 of RFC6174</a>.
</p>
{% endif %}
<h2 class="mt-5">States</h2>

View file

@ -21,7 +21,7 @@
{% for stream in streams %}
<tr>
<td>
<a href="/stream/{{ stream.acronym }}/">{{ stream.acronym }}</a>
<a href="{% url 'ietf.group.views.stream_documents' acronym=stream.acronym %}">{{ stream.acronym }}</a>
</td>
<td>{{ stream.name }}</td>
<td>
@ -37,4 +37,4 @@
{% endblock %}
{% block js %}
<script src="{% static "ietf/js/list.js" %}"></script>
{% endblock %}
{% endblock %}

View file

@ -69,7 +69,7 @@
</ul>
<p>
Most of this information can be edited on the individual's
<a href="/accounts/profile/">Account Info</a>
<a href="{% url 'ietf.ietfauth.views.profile' %}">Account Info</a>
page by the individual
after logging in to the account. If the datatracker holds such
information about a person, and they don't have an account, a request to

View file

@ -49,7 +49,7 @@
{% for ipr in conflictdoc.ipr %}
{% if ipr.disclosure.state_id == "posted" %}
<div>
<a href="/ipr/{{ ipr.disclosure.id }}/">{{ ipr.disclosure.title }}</a>
<a href="{% url 'ietf.ipr.views.show' id=ipr.disclosure.id %}">{{ ipr.disclosure.title }}</a>
</div>
{% endif %}
{% endfor %}

View file

@ -87,7 +87,7 @@
{% for ipr in doc.ipr %}
{% if ipr.disclosure.state_id == "posted" %}
<div>
<a href="/ipr/{{ ipr.disclosure.id }}/">{{ ipr.disclosure.title }}</a>
<a href="{% url 'ietf.ipr.views.show' id=ipr.disclosure.id %}">{{ ipr.disclosure.title }}</a>
</div>
{% endif %}
{% endfor %}

View file

@ -24,13 +24,13 @@
<small class="text-muted">{{ t.pages }} page{{ t.pages|pluralize }}</small>
</h2>
<div class="buttonlist">
<a class="btn btn-primary" role="button" href="/iesg/agenda/">
<a class="btn btn-primary" role="button" href="{% url 'ietf.iesg.views.agenda' %}">
<i class="bi bi-list"></i>
Full IESG agenda
</a>
<a class="btn btn-primary"
role="button"
href="/iesg/agenda/telechat-{{ t.date|date:'Y' }}-{{ t.date|date:'m' }}-{{ t.date|date:'d' }}-docs.tgz">
href="{% url 'ietf.iesg.views.telechat_docs_tarfile' date=t.date %}">
<i class="bi bi-download"></i>
Download documents
</a>

View file

@ -5,9 +5,9 @@ Contents:
1. Roll Call and Dial-In Instructions
{{ roll_call_url }}
2. Agenda
https://datatracker.ietf.org/iesg/agenda/
{{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.iesg.views.agenda' %}
3. Management Item Details
https://datatracker.ietf.org/iesg/agenda/#6
{{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.iesg.views.agenda' %}#6
4. Previous minutes
{{ minutes_url }}

View file

@ -32,7 +32,7 @@
regarding an IETF document or contribution when the person letting the
IETF know about the patent has no relationship with the patent owners.
Click
<a href="/ipr/new-specific">here</a>
<a href="{% url 'ietf.ipr.views.new' type='specific' %}">here</a>
if you want to disclose information about patents or patent
applications where you do have a relationship to the patent owners or
patent applicants.

View file

@ -1,6 +1,6 @@
{% autoescape off %}A new IPR disclosure has been submitted.
Please check it and post it.
https://datatracker.ietf.org/ipr/admin/pending/
{{ settings.IDTRACKER_BASE_URL }}{% url "ietf.ipr.views.admin" state='pending' %}
{% include "ipr/details.txt" %}
{% endautoescape %}

View file

@ -6,7 +6,7 @@ Cc: {{ cc_email }}
Dear {{ to_name }}:
{% filter wordwrap:78 %}
An IPR disclosure that pertains to your {{ doc_info }} was submitted to the IETF Secretariat on {{ ipr.get_latest_event_submitted.time|date:"Y-m-d" }} and has been posted on the "IETF Page of Intellectual Property Rights Disclosures" (https://datatracker.ietf.org/ipr/{{ ipr.pk }}/). The title of the IPR disclosure is "{{ ipr.title }}"
An IPR disclosure that pertains to your {{ doc_info }} was submitted to the IETF Secretariat on {{ ipr.get_latest_event_submitted.time|date:"Y-m-d" }} and has been posted on the "IETF Page of Intellectual Property Rights Disclosures" ({{ settings.IDTRACKER_BASE_URL }}{% url "ietf.ipr.views.history" id=ipr.pk %}). The title of the IPR disclosure is "{{ ipr.title }}"
{% endfilter %}
Thank you

View file

@ -7,7 +7,7 @@ Dear {{ to_name }}:
A generic IPR disclosure was submitted to the IETF Secretariat on {{ ipr.get_latest_event_submitted.time|date:"Y-m-d" }}
and has been posted on the "IETF Page of Intellectual Property Rights Disclosures"
(https://datatracker.ietf.org/ipr/). The title of the IPR disclosure is
({{ settings.IDTRACKER_BASE_URL }}{% url "ietf.ipr.views.showlist" %}). The title of the IPR disclosure is
{{ ipr.title }}.
Thank you

View file

@ -7,7 +7,7 @@ Dear {{ to_name }}:
Your IPR disclosure entitled {{ ipr.title }}
has been posted on the "IETF Page of Intellectual Property Rights Disclosures"
(https://datatracker.ietf.org/ipr/).{% if ipr.updates %}
({{ settings.IDTRACKER_BASE_URL }}{% url "ietf.ipr.views.showlist" %}).{% if ipr.updates %}
Your IPR disclosure updates:
{% for rel in ipr.updates %}

View file

@ -25,7 +25,7 @@
<a href="/liaison/help/from_ietf/">Liaison statements from the IETF: guidelines for completing the "Cc:" field</a>
</li>
<li>
<a href="/wg/">Active IETF working groups</a>
<a href="{% url 'ietf.group.views.active_groups' group_type='wg' %}">Active IETF working groups</a>
</li>
<li>
<a href="https://www.ietf.org/liaison/managers.html">IETF liaison managers</a>

View file

@ -85,7 +85,7 @@
<a href="https://www.ietf.org/liaison/managers.html">The IETF Liaison Manager for the SDO</a>
<sup><small>(4)</small></sup>
<br>
<a href="/wg/">The IETF Area Director(s)</a>
<a href="{% url 'ietf.group.views.active_groups' group_type='wg' %}">The IETF Area Director(s)</a>
(if not the submitter)
<br>
The IETF Chair &lt;chair@ietf.org&gt;
@ -100,12 +100,12 @@
<a href="https://www.ietf.org/liaison/managers.html">The IETF Liaison Manager for the SDO</a>
<sup><small>(4)</small></sup>
<br>
<a href="/wg/">The IETF Working Group Chair(s)</a>
<a href="{% url 'ietf.group.views.active_groups' group_type='wg' %}">The IETF Working Group Chair(s)</a>
(if not the submitter)
<br>
<a href="/wg/">The IETF Area Director(s)</a>
<a href="{% url 'ietf.group.views.active_groups' group_type='wg' %}">The IETF Area Director(s)</a>
<br>
<a href="/wg/">The IETF Working Group Discussion List</a>
<a href="{% url 'ietf.group.views.active_groups' group_type='wg' %}">The IETF Working Group Discussion List</a>
</td>
</tr>

View file

@ -62,7 +62,7 @@
<tr>
<td>An IETF Area</td>
<td>
<a href="/wg/">The IETF Area Director(s)</a>
<a href="{% url 'ietf.group.views.active_groups' group_type='wg' %}">The IETF Area Director(s)</a>
</td>
<td>
<a href="https://www.ietf.org/liaison/managers.html">The IETF Liaison Manager for the SDO</a>
@ -75,14 +75,14 @@
<tr>
<td>An IETF Working Group</td>
<td>
<a href="/wg/">The Working Group Chair(s)</a>
<a href="{% url 'ietf.group.views.active_groups' group_type='wg' %}">The Working Group Chair(s)</a>
</td>
<td>
<a href="https://www.ietf.org/liaison/managers.html">The IETF Liaison Manager for the SDO</a>
<br>
<a href="/wg/">The IETF Area Director(s)</a>
<a href="{% url 'ietf.group.views.active_groups' group_type='wg' %}">The IETF Area Director(s)</a>
<br>
<a href="/wg/">The IETF Working Group Discussion List</a>
<a href="{% url 'ietf.group.views.active_groups' group_type='wg' %}">The IETF Working Group Discussion List</a>
</td>
</tr>
</tbody>

View file

@ -9,7 +9,7 @@ be provided within 10 days of the event.
At your earliest convenience, please upload meeting minutes, as
well as any presentations from your sessions by using the Meeting
Materials Manager found here:
https://datatracker.ietf.org/secr/proceedings/.
{{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.secr.proceedings.views.main'/secr/proceedings/.
Alternatively, you are welcome to send them to proceedings@ietf.org
for manual posting.

View file

@ -18,14 +18,14 @@
</a>
{# materials tar file #}
<a class="btn btn-outline-primary"
href="/meeting/{{ meeting.number }}/agenda/{{ acronym }}-drafts.tgz"
href="{% url 'ietf.meeting.views.session_draft_tarfile' num=meeting.number acronym=acronym %}"
aria-label="Download meeting materials as .tar archive"
title="Download meeting materials as .tar archive">
<i class="bi bi-file-zip"></i>
</a>
{# materials PDF file #}
<a class="btn btn-outline-primary"
href="/meeting/{{ meeting.number }}/agenda/{{ acronym }}-drafts.pdf"
href="{% url 'ietf.meeting.views.session_draft_pdf' num=meeting.number acronym=acronym %}"
aria-label="Download meeting materials as PDF file"
title="Download meeting materials as PDF file">
<i class="bi bi-file-pdf"></i>
@ -157,4 +157,4 @@
{% endwith %}
{% endif %}
</div>
{% endwith %}
{% endwith %}

View file

@ -32,7 +32,7 @@
</a>
{% endif %}
{% endif %}
<a class="btn btn-primary" href="/meeting/{{ meeting.number }}/requests">Meeting requests/conflicts</a>
<a class="btn btn-primary" href="{% url 'ietf.meeting.views.meeting_requests' num=meeting.number %}">Meeting requests/conflicts</a>
</p>
{% include 'meeting/proceedings/materials_table.html' with meeting=meeting proceedings_materials=proceedings_materials user=user only %}
{% with "True" as show_agenda %}

View file

@ -29,7 +29,7 @@
{# materials tar file #}
<a class="btn btn-outline-primary"
role="button"
href="/meeting/{{ meeting.number }}/agenda/{{ acronym }}-drafts.tgz"
href="{% url 'ietf.meeting.views.session_draft_tarfile' num=meeting.number acronym=acronym %}"
aria-label="Download meeting materials as .tar archive"
title="Download meeting materials as .tar archive">
<i class="bi bi-file-zip"></i>
@ -37,7 +37,7 @@
{# materials PDF file #}
<a class="btn btn-outline-primary"
role="button"
href="/meeting/{{ meeting.number }}/agenda/{{ acronym }}-drafts.pdf"
href="{% url 'ietf.meeting.views.session_draft_pdf' num=meeting.number acronym=acronym %}"
aria-label="Download meeting materials as PDF file"
title="Download meeting materials as PDF file">
<i class="bi bi-file-pdf"></i>
@ -219,14 +219,14 @@
{# materials tar file #}
<li>
<a class="dropdown-item"
href="/meeting/{{ meeting.number }}/agenda/{{ acronym }}-drafts.tgz">
href="{% url 'ietf.meeting.views.session_draft_tarfile' num=meeting.number acronym=acronym %}">
<i class="bi bi-file-zip"></i> Meeting materials archive
</a>
</li>
{# materials PDF file #}
<li>
<a class="dropdown-item"
href="/meeting/{{ meeting.number }}/agenda/{{ acronym }}-drafts.pdf">
href="{% url 'ietf.meeting.views.session_draft_pdf' num=meeting.number acronym=acronym %}">
<i class="bi bi-file-pdf"></i> Meeting materials PDF
</a>
</li>

View file

@ -19,7 +19,7 @@
{% if not user.is_authenticated %}
<a
class="btn btn-primary"
href="/accounts/login/"
href="{% url 'ietf.ietfauth.views.login' %}"
rel="nofollow">Sign in</a>
{% endif %}
{% else %}

View file

@ -28,7 +28,7 @@
<p class="form-control-plaintext">
{{ user.username }}
</p>
<a class="btn btn-primary" href="/accounts/username/">Edit</a>
<a class="btn btn-primary" href="{% url 'ietf.ietfauth.views.change_username' %}">Edit</a>
</div>
</div>
<div class="row mb-3">
@ -39,7 +39,7 @@
</a>
</label>
<div class="col-sm-10">
<a class="btn btn-primary" href="/accounts/password/">Change password</a>
<a class="btn btn-primary" href="{% url 'ietf.ietfauth.views.change_password' %}">Change password</a>
</div>
</div>
{% if person.photo %}
@ -196,7 +196,7 @@
</a>
covering IETF's Legitimate Interest due to the IETF's mission of developing standards
for the internet. See also the page on
<a href="/help/personal-information">
<a href="{% url 'personal-information' %}">
handling
of personal information
</a>.
@ -271,4 +271,4 @@
});
</script>
{% endblock %}
{% endblock %}

View file

@ -7,15 +7,15 @@
<h1>Account management</h1>
<div class="buttonlist">
{% if user.username %}
<a class="btn btn-primary" href="/accounts/profile/">View/edit profile</a>
<a class="btn btn-primary" href="{% url 'ietf.ietfauth.views.profile' %}">View/edit profile</a>
{% else %}
<a
class="btn btn-primary"
href="/accounts/login/"
href="{% url 'ietf.ietfauth.views.login' %}"
rel="nofollow">Sign in</a>
{% endif %}
<a class="btn btn-info" href="/accounts/create/">New account</a>
<a class="btn btn-warning" href="/accounts/reset/">Reset password</a>
<a class="btn btn-primary" href="/accounts/settings/">Change browser preferences</a>
<a class="btn btn-info" href="{% url 'ietf.ietfauth.views.create_account' %}">New account</a>
<a class="btn btn-warning" href="{% url 'ietf.ietfauth.views.password_reset' %}">Reset password</a>
<a class="btn btn-primary" href="{% url 'ietf.cookies.views.preferences' %}">Change browser preferences</a>
</div>
{% endblock %}

View file

@ -5,7 +5,7 @@
{% block content %}
{% origin %}
<h1>You have been signed out</h1>
<a class="btn btn-primary my-3" href="/accounts/login/" rel="nofollow">Sign in</a>
<a class="btn btn-primary my-3" href="{% url 'ietf.ietfauth.views.login' %}" rel="nofollow">Sign in</a>
{% endblock %}
{% block js %}
{% if request.META.HTTP_REFERER %}

View file

@ -106,4 +106,4 @@
of it and its capabilities was made 2002-11-20
in Atlanta by Thomas Narten.
</p>
{% endblock %}
{% endblock %}

View file

@ -7,7 +7,7 @@ A new version (-{{ submission.rev }}) has been submitted for {{ submission.name
{% endif %}
The IETF datatracker page for this Internet-Draft is:
https://datatracker.ietf.org/doc/{{ submission.name }}/
{{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.doc.views_doc.document_main' name=submission.name %}
Diff from previous version:
{{rfcdiff_base_url}}?url2={{ submission.name }}-{{ submission.rev }}

View file

@ -10,9 +10,9 @@ Document date: {{ submission.document_date|date:"Y-m-d" }}
Group: {{ group }}
Pages: {{ submission.pages }}
URL: {{ settings.IETF_ID_ARCHIVE_URL }}{{ submission.name }}-{{ submission.rev }}.txt
Status: https://datatracker.ietf.org/doc/{{ submission.name }}/{% if submission.xml_version == "3" %}
Status: {{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.doc.views_doc.document_main' name=submission.name %}{% if submission.xml_version == "3" %}
Html: {{ settings.IETF_ID_ARCHIVE_URL }}{{ submission.name }}-{{ submission.rev }}.html{% endif %}
Htmlized: https://datatracker.ietf.org/doc/html/{{ submission.name }}
Htmlized: {{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.doc.views_doc.document_html' name=submission.name %}
{% if submission.rev != "00" %}Diff: {{rfcdiff_base_url}}?url2={{ submission.name }}-{{ submission.rev }}{% endif %}
Abstract:

View file

@ -5,20 +5,20 @@ A New Internet-Draft is available from the on-line Internet-Drafts directories.
Title : {{ submission.title }}
Author{{ submission.authors|pluralize:" ,s" }} : {% for author in submission.authors %}{{ author.name }}{% if not forloop.last %}
{% endif %}{% endfor %}
Filename : {{ submission.name }}-{{ submission.rev }}.txt
Pages : {{ submission.pages }}
Date : {{ submission.submission_date|date:"Y-m-d" }}
Filename : {{ submission.name }}-{{ submission.rev }}.txt
Pages : {{ submission.pages }}
Date : {{ submission.submission_date|date:"Y-m-d" }}
Abstract:
{{ submission.abstract }}
The IETF datatracker status page for this draft is:
https://datatracker.ietf.org/doc/{{ submission.name }}/
{{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.doc.views_doc.document_main' name=submission.name %}
{% if submission.xml_version == "3" %}
There is also an HTML version available at:
{{ settings.IETF_ID_ARCHIVE_URL }}{{ submission.name }}-{{ submission.rev }}.html{% else %}
There is also an htmlized version available at:
https://datatracker.ietf.org/doc/html/{{ submission.name }}-{{ submission.rev }}{% endif %}
{{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.doc.views_doc.document_html' name=submission.name rev=submission.rev %}{% endif %}
{% if submission.rev != "00" %}
A diff from the previous version is available at:
{{settings.RFCDIFF_BASE_URL}}?url2={{ submission.name }}-{{ submission.rev }}

View file

@ -44,7 +44,7 @@
Here is an example:
</p>
<pre class="border p-3">
$ curl -S -F "user=user.name@example.com" -F "xml=@~/draft-user-example.xml" https://datatracker.ietf.org/api/submit
$ curl -S -F "user=user.name@example.com" -F "xml=@~/draft-user-example.xml" {{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.submit.views.api_submit' %}
Upload of draft-user-example OK, confirmation requests sent to:
User Name &lt;user.name@example.com&gt;</pre>
{% endblock %}

View file

@ -8,7 +8,7 @@
<p class="alert alert-info my-3">
<b>Tool URL:</b>
<a href="{% url "ietf.submit.views.upload_submission" %}">
https://datatracker.ietf.org{% url "ietf.submit.views.upload_submission" %}
{{ settings.IDTRACKER_BASE_URL }}{% url "ietf.submit.views.upload_submission" %}
</a>
</p>
<p>
@ -30,7 +30,7 @@
</p>
<p>
An API for automated draft submission is available as an alternative to this webpage at
<a href="https://datatracker.ietf.org/api/submit/">https://datatracker.ietf.org/api/submit/</a>.
<a href="{{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.submit.views.api_submit' %}">{{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.submit.views.api_submit' %}</a>.
</p>
<p>
The specification for this tool can be found in

View file

@ -16,7 +16,7 @@ Emails:
{% if changes %}Changes of special note:
{{ changes }}{% endif %}
You can make changes to your profile here: https://datatracker.ietf.org/accounts/profile/
You can make changes to your profile here: {{ settings.IDTRACKER_BASE_URL }}{% url 'ietf.ietfauth.views.profile' %}
Reply to this message if this merge should not have happened, or if it produced an incorrect result that you cannot correct by editing your profile.

View file

@ -19,7 +19,7 @@ continued maintenance and use of your information by checking the 'Consent'
checkbox found at the bottom of the page, and then submit the form.
For information on how personal information is handled in the datatracker, please see
{{ settings.IDTRACKER_BASE_URL }}/help/personal-information.
{{ settings.IDTRACKER_BASE_URL }}{% url 'personal-information' %}.
In case you prefer to not follow any email links, due to phishing
considerations, please just go to the datatracker and use the menu