Skip to content

Commit 795db7f

Browse files
committed
WIP tests
1 parent d76cf89 commit 795db7f

18 files changed

+1037
-349
lines changed

example/test_app/backends.py

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from django.contrib.auth.backends import ModelBackend
2+
from django.contrib.auth import get_user_model
3+
4+
User = get_user_model()
5+
6+
7+
class EmailBackend(ModelBackend):
8+
def authenticate(self, request, email="", password="", **kwargs):
9+
10+
users = User.objects.filter(email=email)
11+
for user in users:
12+
if user.check_password(password) and self.user_can_authenticate(user):
13+
return user
14+
15+
return None

example/test_app/models.py

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from django.db import models
2+
import uuid
3+
from django.contrib.auth.models import AbstractUser
4+
5+
6+
class User(AbstractUser):
7+
uuid = models.UUIDField(default=uuid.uuid4)
8+
username = models.CharField(
9+
max_length=512, blank=True, null=True, unique=True, editable=False
10+
)
11+
email = models.EmailField(verbose_name="email address", max_length=512, unique=True)
12+
13+
USERNAME_FIELD = "username"
14+
REQUIRED_FIELDS = []
15+
16+
def __str__(self):
17+
return self.get_full_name() or self.email

example/test_app/settings.py

+54-48
Original file line numberDiff line numberDiff line change
@@ -23,66 +23,66 @@
2323
# See https://docs.djangoproject.com/en/2.0/howto/deployment/checklist/
2424

2525
# SECURITY WARNING: keep the secret key used in production secret!
26-
SECRET_KEY = '#9)q!_i3@pr-^3oda(e^3$x!kq3b4f33#5l@+=+&vuz+p6gb3g'
26+
SECRET_KEY = "#9)q!_i3@pr-^3oda(e^3$x!kq3b4f33#5l@+=+&vuz+p6gb3g"
2727

2828
# SECURITY WARNING: don't run with debug turned on in production!
2929
DEBUG = True
3030

31-
ALLOWED_HOSTS = ['*']
31+
ALLOWED_HOSTS = ["*"]
3232

3333

3434
# Application definition
3535

3636
INSTALLED_APPS = [
37-
'django.contrib.admin',
38-
'django.contrib.auth',
39-
'django.contrib.contenttypes',
40-
'django.contrib.sessions',
41-
'django.contrib.messages',
42-
'django.contrib.staticfiles',
43-
'test_app',
44-
'passkeys',
45-
'sslserver'
37+
"django.contrib.admin",
38+
"django.contrib.auth",
39+
"django.contrib.contenttypes",
40+
"django.contrib.sessions",
41+
"django.contrib.messages",
42+
"django.contrib.staticfiles",
43+
"test_app",
44+
"passkeys",
45+
"sslserver",
4646
]
4747

4848
MIDDLEWARE = [
49-
'django.middleware.security.SecurityMiddleware',
50-
'django.contrib.sessions.middleware.SessionMiddleware',
51-
'django.middleware.common.CommonMiddleware',
52-
'django.middleware.csrf.CsrfViewMiddleware',
53-
'django.contrib.auth.middleware.AuthenticationMiddleware',
54-
'django.contrib.messages.middleware.MessageMiddleware',
55-
'django.middleware.clickjacking.XFrameOptionsMiddleware',
49+
"django.middleware.security.SecurityMiddleware",
50+
"django.contrib.sessions.middleware.SessionMiddleware",
51+
"django.middleware.common.CommonMiddleware",
52+
"django.middleware.csrf.CsrfViewMiddleware",
53+
"django.contrib.auth.middleware.AuthenticationMiddleware",
54+
"django.contrib.messages.middleware.MessageMiddleware",
55+
"django.middleware.clickjacking.XFrameOptionsMiddleware",
5656
]
5757

58-
ROOT_URLCONF = 'test_app.urls'
58+
ROOT_URLCONF = "test_app.urls"
5959

6060
TEMPLATES = [
6161
{
62-
'BACKEND': 'django.template.backends.django.DjangoTemplates',
63-
'DIRS': [os.path.join(BASE_DIR ,'example','templates' )],
64-
'APP_DIRS': True,
65-
'OPTIONS': {
66-
'context_processors': [
67-
'django.template.context_processors.debug',
68-
'django.template.context_processors.request',
69-
'django.contrib.auth.context_processors.auth',
70-
'django.contrib.messages.context_processors.messages',
62+
"BACKEND": "django.template.backends.django.DjangoTemplates",
63+
"DIRS": [os.path.join(BASE_DIR, "example", "templates")],
64+
"APP_DIRS": True,
65+
"OPTIONS": {
66+
"context_processors": [
67+
"django.template.context_processors.debug",
68+
"django.template.context_processors.request",
69+
"django.contrib.auth.context_processors.auth",
70+
"django.contrib.messages.context_processors.messages",
7171
],
7272
},
7373
},
7474
]
7575

76-
WSGI_APPLICATION = 'test_app.wsgi.application'
76+
WSGI_APPLICATION = "test_app.wsgi.application"
7777

7878

7979
# Database
8080
# https://docs.djangoproject.com/en/2.0/ref/settings/#databases
8181

8282
DATABASES = {
83-
'default': {
84-
'ENGINE': 'django.db.backends.sqlite3',
85-
'NAME': 'test_db',
83+
"default": {
84+
"ENGINE": "django.db.backends.sqlite3",
85+
"NAME": "test_db",
8686
}
8787
}
8888

@@ -92,26 +92,26 @@
9292

9393
AUTH_PASSWORD_VALIDATORS = [
9494
{
95-
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
95+
"NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator",
9696
},
9797
{
98-
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
98+
"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",
9999
},
100100
{
101-
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
101+
"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator",
102102
},
103103
{
104-
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
104+
"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator",
105105
},
106106
]
107107

108108

109109
# Internationalization
110110
# https://docs.djangoproject.com/en/2.0/topics/i18n/
111111

112-
LANGUAGE_CODE = 'en-us'
112+
LANGUAGE_CODE = "en-us"
113113

114-
TIME_ZONE = 'UTC'
114+
TIME_ZONE = "UTC"
115115

116116
USE_I18N = True
117117

@@ -122,14 +122,20 @@
122122

123123
# Static files (CSS, JavaScript, Images)
124124
# https://docs.djangoproject.com/en/2.0/howto/static-files/
125-
126-
STATIC_URL = '/static/'
127-
#STATIC_ROOT=(os.path.join(BASE_DIR,'static'))
128-
STATICFILES_DIRS=[os.path.join(BASE_DIR,'static')]
129-
LOGIN_URL="/auth/login"
130-
131-
AUTHENTICATION_BACKENDS = ['passkeys.backend.PasskeyModelBackend']
132-
133-
FIDO_SERVER_ID="localhost" # Server rp id for FIDO2, it the full domain of your project
134-
FIDO_SERVER_NAME="TestApp"
125+
USERNAME_FIELD = "email"
126+
STATIC_URL = "/static/"
127+
# STATIC_ROOT=(os.path.join(BASE_DIR,'static'))
128+
STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")]
129+
LOGIN_URL = "/auth/login"
130+
AUTH_USER_MODEL = "test_app.User"
131+
AUTHENTICATION_BACKENDS = (
132+
"django.contrib.auth.backends.ModelBackend",
133+
"test_app.backends.EmailBackend",
134+
"passkeys.backend.PasskeyModelBackend",
135+
)
136+
137+
FIDO_SERVER_ID = (
138+
"localhost" # Server rp id for FIDO2, it the full domain of your project
139+
)
140+
FIDO_SERVER_NAME = "TestApp"
135141
KEY_ATTACHMENT = None # Set None to allow all authenticator attachment

example/test_app/templates/base.html

+5-1
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,6 @@ <h5 class="modal-title" id="exampleModalLabel">Ready to Leave?</h5>
134134
<div class="modal-body">Select "Logout" below if you are ready to end your current session.</div>
135135
<div class="modal-footer">
136136
<button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button>
137-
<a class="btn btn-primary" href="{% url 'logout' %}">Logout</a>
138137
</div>
139138
</div>
140139
</div>
@@ -150,6 +149,11 @@ <h5 class="modal-title" id="exampleModalLabel">Ready to Leave?</h5>
150149
<script src="{% static 'js/sb-admin.min.js'%}"></script>
151150
{% block head %}
152151
{% endblock %}
152+
153+
{% block endbodyscript %}
154+
155+
{% endblock endbodyscript %}
156+
153157
</body>
154158

155159
</html>

example/test_app/templates/home.html

-33
This file was deleted.

example/test_app/templates/login.html

-67
This file was deleted.

example/test_app/templates/logout.html

-43
This file was deleted.

0 commit comments

Comments
 (0)