feat: included 2FA and lots of feature from django-htmx-template
This commit is contained in:
@@ -1,2 +1,2 @@
|
||||
from config.settings.env import *
|
||||
from config.settings.base import *
|
||||
from config.settings.env import *
|
||||
|
||||
+19
-2
@@ -10,10 +10,8 @@ For the full list of config and their values, see
|
||||
https://docs.djangoproject.com/en/6.0/ref/settings/
|
||||
"""
|
||||
|
||||
from pathlib import Path
|
||||
from config.settings.env import *
|
||||
|
||||
|
||||
# Application definition
|
||||
|
||||
DJANGO_APPS = [
|
||||
@@ -30,6 +28,9 @@ THIRD_PARTY_APPS = [
|
||||
'django_extensions',
|
||||
'django_filters',
|
||||
'django_htmx',
|
||||
'django_otp',
|
||||
'django_otp.plugins.otp_totp',
|
||||
'django_otp.plugins.otp_static',
|
||||
'watchman',
|
||||
]
|
||||
|
||||
@@ -54,6 +55,7 @@ MIDDLEWARE = [
|
||||
'django.middleware.common.CommonMiddleware',
|
||||
'django.middleware.csrf.CsrfViewMiddleware',
|
||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||
'django_otp.middleware.OTPMiddleware',
|
||||
'django.contrib.messages.middleware.MessageMiddleware',
|
||||
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
||||
'django_htmx.middleware.HtmxMiddleware',
|
||||
@@ -79,6 +81,7 @@ TEMPLATES = [
|
||||
'django.template.context_processors.request',
|
||||
'django.contrib.auth.context_processors.auth',
|
||||
'django.contrib.messages.context_processors.messages',
|
||||
'crochet.context_processors.site_name',
|
||||
],
|
||||
},
|
||||
},
|
||||
@@ -102,6 +105,11 @@ LOGIN_URL = 'crochet:login'
|
||||
LOGIN_REDIRECT_URL = 'crochet:home'
|
||||
LOGOUT_REDIRECT_URL = 'crochet:login'
|
||||
|
||||
# Nombre que muestran apps como Google Authenticator/Aegis junto al usuario
|
||||
# al escanear el QR de alta de verificación en dos pasos (ver
|
||||
# TOTPDevice.config_url, crochet/views.py).
|
||||
OTP_TOTP_ISSUER = SITE_NAME
|
||||
|
||||
|
||||
# Password validation
|
||||
# https://docs.djangoproject.com/en/6.0/ref/settings/#auth-password-validators
|
||||
@@ -165,6 +173,15 @@ EMAIL_USE_TLS = True
|
||||
EMAIL_USE_SSL = False
|
||||
|
||||
|
||||
# Security
|
||||
# https://docs.djangoproject.com/en/6.0/topics/security/
|
||||
# SECURE_SSL_REDIRECT/SESSION_COOKIE_SECURE/CSRF_COOKIE_SECURE/SECURE_HSTS_*
|
||||
# se leen de env.py (ver env.py): desactivados por defecto porque asumen
|
||||
# HTTPS, que no hay en desarrollo local. SECURE_CONTENT_TYPE_NOSNIFF no
|
||||
# depende de eso (no rompe nada servir por HTTP), así que va fijo aquí.
|
||||
SECURE_CONTENT_TYPE_NOSNIFF = True
|
||||
|
||||
|
||||
# Logging
|
||||
# https://docs.djangoproject.com/en/6.0/topics/logging/
|
||||
|
||||
|
||||
@@ -35,6 +35,13 @@ AWS_ACCESS_KEY_ID = env.str('S3_ACCESS_KEY_ID', '')
|
||||
AWS_SECRET_ACCESS_KEY = env.str('S3_SECRET_ACCESS_KEY', '')
|
||||
AWS_STORAGE_BUCKET_NAME = env.str('S3_STORAGE_BUCKET_NAME', '')
|
||||
AWS_S3_ENDPOINT_URL = env.str('S3_ENDPOINT_URL', '')
|
||||
# Compatibilidad con Garage (ver docker-compose.yml/garage.toml, S3
|
||||
# self-hosted para desarrollo local): a diferencia de AWS S3, exige indicar
|
||||
# la región a mano y no soporta el estilo de direccionamiento "virtual"
|
||||
# (bucket como subdominio) por defecto.
|
||||
AWS_S3_REGION_NAME = env.str('S3_REGION_NAME', '')
|
||||
AWS_S3_USE_SSL = env.bool('S3_USE_SSL', True)
|
||||
AWS_S3_ADDRESSING_STYLE = env.str('S3_ADDRESSING_STYLE', 'auto')
|
||||
|
||||
ITEMS_PER_PAGE = env.int('ITEMS_PER_PAGE', 20)
|
||||
|
||||
@@ -49,4 +56,34 @@ DEFAULT_FROM_EMAIL = env.str('DEFAULT_FROM_EMAIL', 'webmaster@localhost')
|
||||
# EmailUpdateForm) por si el cambio no lo ha hecho él.
|
||||
SUPPORT_EMAIL = env.str('SUPPORT_EMAIL', 'soporte@localhost')
|
||||
|
||||
# Nombre mostrado en el navbar, el <title> y los emails de aviso de la
|
||||
# cuenta (ver EmailUpdateForm/StyledPasswordChangeForm/AccountDeleteForm).
|
||||
SITE_NAME = env.str('SITE_NAME', 'Crochet')
|
||||
|
||||
LOG_LEVEL = env.str('LOG_LEVEL', 'INFO')
|
||||
|
||||
# Limitación de peticiones (ver crochet/views.py: login, registro,
|
||||
# recuperación de contraseña y verificación en dos pasos) con
|
||||
# django-ratelimit. Usa el cache framework de Django (settings.CACHES,
|
||||
# "default" por defecto: LocMemCache si no se configura otra cosa) para
|
||||
# contar peticiones; LocMemCache es propio de cada proceso, así que con
|
||||
# más de un worker/instancia en producción el límite real es "por
|
||||
# proceso", no global — configura ahí un backend compartido (Redis,
|
||||
# Memcached) si eso te importa.
|
||||
RATELIMIT_ENABLE = env.bool('RATELIMIT_ENABLE', True)
|
||||
|
||||
# Cabeceras/cookies de seguridad para servir por HTTPS en producción. Todo
|
||||
# esto viene desactivado por defecto porque en desarrollo local se sirve
|
||||
# por HTTP plano (activarlo ahí dejaría la app inaccesible o el navegador
|
||||
# descartando las cookies de sesión/CSRF). Actívalo en el .env de
|
||||
# producción una vez la app esté detrás de HTTPS de verdad.
|
||||
SECURE_SSL_REDIRECT = env.bool('SECURE_SSL_REDIRECT', False)
|
||||
SESSION_COOKIE_SECURE = env.bool('SESSION_COOKIE_SECURE', False)
|
||||
CSRF_COOKIE_SECURE = env.bool('CSRF_COOKIE_SECURE', False)
|
||||
# En segundos; 0 desactiva HSTS. Empieza bajo (p. ej. 3600) para probar en
|
||||
# producción antes de subirlo a un valor largo (p. ej. 31536000 = 1 año):
|
||||
# un valor largo con la configuración equivocada deja el dominio
|
||||
# inaccesible por HTTPS durante ese tiempo para quien ya lo haya recibido.
|
||||
SECURE_HSTS_SECONDS = env.int('SECURE_HSTS_SECONDS', 0)
|
||||
SECURE_HSTS_INCLUDE_SUBDOMAINS = env.bool('SECURE_HSTS_INCLUDE_SUBDOMAINS', False)
|
||||
SECURE_HSTS_PRELOAD = env.bool('SECURE_HSTS_PRELOAD', False)
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@ Including another URLconf
|
||||
from django.conf import settings
|
||||
from django.conf.urls.i18n import i18n_patterns
|
||||
from django.contrib import admin
|
||||
from django.urls import path, include
|
||||
from django.urls import include, path
|
||||
from django.views.static import serve
|
||||
|
||||
urlpatterns = [
|
||||
|
||||
Reference in New Issue
Block a user