Enable django-otp-agents, for preserving OTP trust over time
This commit is contained in:
parent
187412d966
commit
7f17d50486
6 changed files with 33 additions and 4 deletions
1
Pipfile
1
Pipfile
|
@ -19,6 +19,7 @@ django-redis-cache = "*"
|
||||||
django-activeurl = "*"
|
django-activeurl = "*"
|
||||||
django-otp = "*"
|
django-otp = "*"
|
||||||
qrcode = "*"
|
qrcode = "*"
|
||||||
|
django-otp-agents = "*"
|
||||||
|
|
||||||
|
|
||||||
[dev-packages]
|
[dev-packages]
|
||||||
|
|
16
Pipfile.lock
generated
16
Pipfile.lock
generated
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"_meta": {
|
"_meta": {
|
||||||
"hash": {
|
"hash": {
|
||||||
"sha256": "26e312dcbf4057505a29d0fa5b15c856ba3ba45a7b9545e20cc682dbef43d7df"
|
"sha256": "1d582e5b51466de2e917f117b537193fd1826f51d3a9a218f83d392d68d0c461"
|
||||||
},
|
},
|
||||||
"host-environment-markers": {
|
"host-environment-markers": {
|
||||||
"implementation_name": "cpython",
|
"implementation_name": "cpython",
|
||||||
|
@ -40,6 +40,13 @@
|
||||||
],
|
],
|
||||||
"version": "==0.1.11"
|
"version": "==0.1.11"
|
||||||
},
|
},
|
||||||
|
"django-agent-trust": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:962653c4eeab63715a6efd27649a00302082c9fb1d931e3df959e57605eb8c25",
|
||||||
|
"sha256:b262db89410b9901c32f27f7dd6697bf61bfcfdc01651fe40699d0b81ebc4fcc"
|
||||||
|
],
|
||||||
|
"version": "==0.3.0"
|
||||||
|
},
|
||||||
"django-appconf": {
|
"django-appconf": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:ddab987d14b26731352c01ee69c090a4ebfc9141ed223bef039d79587f22acd9",
|
"sha256:ddab987d14b26731352c01ee69c090a4ebfc9141ed223bef039d79587f22acd9",
|
||||||
|
@ -87,6 +94,13 @@
|
||||||
],
|
],
|
||||||
"version": "==0.4.1.1"
|
"version": "==0.4.1.1"
|
||||||
},
|
},
|
||||||
|
"django-otp-agents": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:4ca8fae30418e0a813840cee5068d2fb96e3759787a5820d54921b90c7beaa7a",
|
||||||
|
"sha256:8d9f26d5a186b059251bd03e1ab509b5861a678e463c49de9b0766080b2c16a5"
|
||||||
|
],
|
||||||
|
"version": "==0.3.0"
|
||||||
|
},
|
||||||
"django-redis-cache": {
|
"django-redis-cache": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:2b4e3510bbcaf3d331975717afd6f15a36fbaf7622504599d2727dc99f90c64d"
|
"sha256:2b4e3510bbcaf3d331975717afd6f15a36fbaf7622504599d2727dc99f90c64d"
|
||||||
|
|
|
@ -31,6 +31,14 @@
|
||||||
{% form_field form.username %}
|
{% form_field form.username %}
|
||||||
{% form_field form.password %}
|
{% form_field form.password %}
|
||||||
{% form_field form.otp_token %}
|
{% form_field form.otp_token %}
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="custom-control custom-checkbox">
|
||||||
|
<input name="{{ form.otp_agent_trust.name }}" class="custom-control-input" type="checkbox" />
|
||||||
|
<span class="custom-control-indicator"></span>
|
||||||
|
<span class="custom-control-description">remember this browser (don't tick this on a public computer!)</span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="card-footer">
|
<div class="card-footer">
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
from django.contrib.auth import views as auth_views
|
from django.contrib.auth import views as auth_views
|
||||||
from django_otp.forms import OTPAuthenticationForm
|
from otp_agents.forms import OTPAuthenticationForm
|
||||||
from lemoncurry import breadcrumbs
|
from lemoncurry import breadcrumbs
|
||||||
|
|
||||||
breadcrumbs.add(route='lemonauth:login', label='log in', parent='home:index')
|
breadcrumbs.add(route='lemonauth:login', label='log in', parent='home:index')
|
||||||
|
|
|
@ -66,6 +66,7 @@ INSTALLED_APPS = [
|
||||||
|
|
||||||
'compressor',
|
'compressor',
|
||||||
'django_activeurl',
|
'django_activeurl',
|
||||||
|
'django_agent_trust',
|
||||||
'django_otp',
|
'django_otp',
|
||||||
'django_otp.plugins.otp_totp',
|
'django_otp.plugins.otp_totp',
|
||||||
'favicon',
|
'favicon',
|
||||||
|
@ -85,6 +86,7 @@ MIDDLEWARE = [
|
||||||
'django.middleware.csrf.CsrfViewMiddleware',
|
'django.middleware.csrf.CsrfViewMiddleware',
|
||||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||||
'django_otp.middleware.OTPMiddleware',
|
'django_otp.middleware.OTPMiddleware',
|
||||||
|
'django_agent_trust.middleware.AgentMiddleware',
|
||||||
'django.contrib.messages.middleware.MessageMiddleware',
|
'django.contrib.messages.middleware.MessageMiddleware',
|
||||||
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
||||||
]
|
]
|
||||||
|
@ -193,6 +195,10 @@ MEDIA_ROOT = os.path.join(STATIC_ROOT, 'media')
|
||||||
# Settings specific to lemoncurry
|
# Settings specific to lemoncurry
|
||||||
LEMONCURRY_SITE_NAME = '00dani.me'
|
LEMONCURRY_SITE_NAME = '00dani.me'
|
||||||
|
|
||||||
|
# django-agent-trust
|
||||||
|
# https://pythonhosted.org/django-agent-trust/
|
||||||
|
AGENT_COOKIE_SECURE = True
|
||||||
|
|
||||||
# django-otp
|
# django-otp
|
||||||
# https://django-otp-official.readthedocs.io/en/latest/overview.html
|
# https://django-otp-official.readthedocs.io/en/latest/overview.html
|
||||||
OTP_TOTP_ISSUER = LEMONCURRY_SITE_NAME
|
OTP_TOTP_ISSUER = LEMONCURRY_SITE_NAME
|
||||||
|
|
|
@ -15,12 +15,12 @@ Including another URLconf
|
||||||
"""
|
"""
|
||||||
from django.conf.urls import include, url
|
from django.conf.urls import include, url
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django_otp.admin import OTPAdminSite
|
from otp_agents.admin import TrustedAgentAdminSite
|
||||||
|
|
||||||
import django.contrib.sitemaps.views as sitemap
|
import django.contrib.sitemaps.views as sitemap
|
||||||
from home.sitemaps import HomeSitemap
|
from home.sitemaps import HomeSitemap
|
||||||
|
|
||||||
otp_admin_site = OTPAdminSite()
|
otp_admin_site = TrustedAgentAdminSite()
|
||||||
for model_cls, model_admin in admin.site._registry.items():
|
for model_cls, model_admin in admin.site._registry.items():
|
||||||
otp_admin_site.register(model_cls, model_admin.__class__)
|
otp_admin_site.register(model_cls, model_admin.__class__)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue