django-pfx 1.4.dev16__tar.gz → 1.4.dev18__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/PKG-INFO +1 -1
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/django_pfx.egg-info/PKG-INFO +1 -1
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/doc/conf.py +2 -1
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/doc/source/authentication.md +154 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/requirements.txt +1 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/.gitignore +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/.gitlab-ci.yml +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/.pre-commit-config.yaml +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/LICENSE +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/MANIFEST.in +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/README.md +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/django-admin-test +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/django_pfx.egg-info/SOURCES.txt +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/django_pfx.egg-info/dependency_links.txt +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/django_pfx.egg-info/requires.txt +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/django_pfx.egg-info/top_level.txt +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/doc/Makefile +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/doc/index.rst +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/doc/source/api.views.rst +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/doc/source/decorator.md +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/doc/source/generate_openapi.md +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/doc/source/getting_started.md +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/doc/source/internationalisation.md +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/doc/source/model.md +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/doc/source/pfx_views.md +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/doc/source/profiling.md +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/doc/source/settings.md +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/doc/source/testing.md +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/img/pfx.png +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/img/pfx.svg +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/__init__.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/__init__.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/apidoc/__init__.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/apidoc/parameters.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/apidoc/schema.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/apidoc/tags.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/apps.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/decorator/__init__.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/decorator/rest.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/default_settings.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/exceptions.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/fields.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/http/__init__.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/http/json_response.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.mo +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.po +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/management/__init__.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/management/commands/__init__.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/management/commands/makeapidoc.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/management/commands/profile.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/middleware/__init__.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/middleware/authentication.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/middleware/locale.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/middleware/profiling.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/models/__init__.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/models/cache_mixins.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/models/not_null_fields.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/models/otp_user_mixin.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/models/pfx_models.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/models/user_filtered_queryset_mixin.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/serializers/__init__.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/serializers/json.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/settings.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/shortcuts.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/storage/__init__.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/storage/s3_storage.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/templates/registration/password_reset_email.txt +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/templates/registration/password_reset_subject.txt +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/templates/registration/welcome_email.txt +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/templates/registration/welcome_subject.txt +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/test.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/urls.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/views/__init__.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/views/authentication_views.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/views/fields.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/views/filters_views.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/views/locale_views.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/views/parameters/__init__.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/views/parameters/date_format.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/views/parameters/groups.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/views/parameters/list_count.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/views/parameters/list_items.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/views/parameters/list_mode.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/views/parameters/list_order.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/views/parameters/list_search.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/views/parameters/media_redirect.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/views/parameters/meta_fields.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/views/parameters/meta_filters.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/views/parameters/meta_orders.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/views/parameters/subset.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/views/parameters/subset_limit.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/views/parameters/subset_offset.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/views/parameters/subset_page.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/views/parameters/subset_page_size.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/views/parameters/subset_page_subset.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/views/rest_views.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pyproject.toml +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/runtest.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/serve-doc +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/setup.cfg +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/setup.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/tests/__init__.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/tests/locale/fr/LC_MESSAGES/django.po +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/tests/models.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/tests/settings/__init__.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/tests/settings/ci.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/tests/settings/common.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/tests/settings/dev.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/tests/settings/dev_custom_example.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/tests/settings/dev_default.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/tests/tests/__init__.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/tests/tests/basic_api_errors.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/tests/tests/basic_api_test.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/tests/tests/test_api_doc.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/tests/tests/test_auth_api.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/tests/tests/test_body_mixin.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/tests/tests/test_cache.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/tests/tests/test_client.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/tests/tests/test_fields.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/tests/tests/test_filters.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/tests/tests/test_locale_api.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/tests/tests/test_perm_tests.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/tests/tests/test_perms_api.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/tests/tests/test_profiling_middleware.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/tests/tests/test_shortcuts.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/tests/tests/test_timezone_middleware.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/tests/tests/test_tools.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/tests/tests/test_user_queryset.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/tests/tests/test_view_decorators.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/tests/tests/test_view_fields.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/tests/urls.py +0 -0
- {django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/tests/views.py +0 -0
|
@@ -53,7 +53,8 @@ release = '1.0'
|
|
|
53
53
|
# ones.
|
|
54
54
|
extensions = ['myst_parser',
|
|
55
55
|
'sphinx.ext.autodoc',
|
|
56
|
-
'sphinx.ext.autosummary'
|
|
56
|
+
'sphinx.ext.autosummary',
|
|
57
|
+
'sphinxcontrib.mermaid']
|
|
57
58
|
autodoc_member_order = 'bysource'
|
|
58
59
|
|
|
59
60
|
# Add any paths that contain templates here, relative to this directory.
|
|
@@ -48,12 +48,50 @@ To use the `CookieAuthenticationMiddleware`, you need to configure the following
|
|
|
48
48
|
|
|
49
49
|
See the [MDN Website](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies) for more details.
|
|
50
50
|
|
|
51
|
+
### Multifactor Authentication
|
|
52
|
+
Multifactor authentication can be enabled in django-pfx Authentication API.
|
|
53
|
+
|
|
54
|
+
PFX currently provides MFA with One Time Password (OTP), compatible with FreeOTP,
|
|
55
|
+
Google Authenticator and other OTP app.
|
|
56
|
+
|
|
57
|
+
To enable this feature, install django-pfx with otp
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
pip install django-pfx[otp]
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Then the user class must use the ```OtpUserMixin```
|
|
64
|
+
|
|
65
|
+
```python
|
|
66
|
+
from django.contrib.auth.models import AbstractUser
|
|
67
|
+
from pfx.pfxcore.models import OtpUserMixin
|
|
68
|
+
|
|
69
|
+
class MyUser(OtpUserMixin, AbstractUser):
|
|
70
|
+
pass
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
The user can then enable or disable the OTP auth using the [services documented below](#enable-mfa-otp).
|
|
74
|
+
|
|
51
75
|
## Services
|
|
52
76
|
|
|
53
77
|
### Login
|
|
54
78
|
A login rest services with a `mode` parameter to choose between JWT bearer token or cookie authentication.
|
|
55
79
|
In cookie mode, the JWT token is saved in an HTTP-only cookie.
|
|
56
80
|
|
|
81
|
+
```{mermaid}
|
|
82
|
+
|
|
83
|
+
sequenceDiagram
|
|
84
|
+
participant App
|
|
85
|
+
participant API
|
|
86
|
+
App->>API: POST /auth/login
|
|
87
|
+
alt Authentication success
|
|
88
|
+
API->>App: 200 OK + cookie
|
|
89
|
+
else Authentication failed
|
|
90
|
+
API->>App: 401 Unautorized
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
|
|
57
95
|
**Request :** `POST` `/auth/login?mode=<mode>`
|
|
58
96
|
|
|
59
97
|
**Request body:**
|
|
@@ -75,6 +113,122 @@ In cookie mode, the JWT token is saved in an HTTP-only cookie.
|
|
|
75
113
|
| user | the user object |
|
|
76
114
|
|
|
77
115
|
|
|
116
|
+
### Login + TOTP
|
|
117
|
+
If the user has enabled the TOTP login, the process is the same as above for the first step,
|
|
118
|
+
except that the login service returns a temporary JWT token valid only for the otp services.
|
|
119
|
+
|
|
120
|
+
```{mermaid}
|
|
121
|
+
|
|
122
|
+
sequenceDiagram
|
|
123
|
+
participant App
|
|
124
|
+
participant API
|
|
125
|
+
App->>API: POST /auth/login
|
|
126
|
+
alt Login success
|
|
127
|
+
API->>App: 200 OK
|
|
128
|
+
note left of API: temporary jwt token
|
|
129
|
+
App->>API: POST /auth/otp/login
|
|
130
|
+
note right of App: temporary jwt token + OTP token in body.
|
|
131
|
+
alt OTP success
|
|
132
|
+
API->>App: 200 OK
|
|
133
|
+
note left of API: JWT token in cookie or in body <br/> + user in body
|
|
134
|
+
else OTP failed
|
|
135
|
+
API->>App: 401 Unautorized
|
|
136
|
+
end
|
|
137
|
+
else Login failed
|
|
138
|
+
API->>App: 401 Unautorized
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
**Request :** `POST` `/auth/login?mode=<mode>`
|
|
144
|
+
|
|
145
|
+
**Request body:**
|
|
146
|
+
|
|
147
|
+
| Field | Description |
|
|
148
|
+
|-------------|-------------------------------------|
|
|
149
|
+
| username | the username |
|
|
150
|
+
| password | the password |
|
|
151
|
+
| remember_me | If true, use a long validity token. |
|
|
152
|
+
|
|
153
|
+
**Responses :**
|
|
154
|
+
|
|
155
|
+
* `HTTP 401` if the credentials are incorrect
|
|
156
|
+
* `HTTP 200` with the following body
|
|
157
|
+
|
|
158
|
+
| Field | Description |
|
|
159
|
+
|-------|-----------------------|
|
|
160
|
+
| token | a temporary jwt token |
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
**Request :** `POST` `/auth/otp/login?mode=<mode>`
|
|
164
|
+
|
|
165
|
+
**Request body:**
|
|
166
|
+
|
|
167
|
+
| Field | Description |
|
|
168
|
+
|-------------|-------------------------------------|
|
|
169
|
+
| token | the temporary jwt token |
|
|
170
|
+
| otp | the one time password (TOTP) |
|
|
171
|
+
|
|
172
|
+
**Responses :**
|
|
173
|
+
|
|
174
|
+
* `HTTP 401` if the temporary jwt token is incorrect
|
|
175
|
+
* `HTTP 403` if the otp is incorrect
|
|
176
|
+
* `HTTP 200` with the following body
|
|
177
|
+
|
|
178
|
+
| Field | Description |
|
|
179
|
+
|-------|----------------------------------------|
|
|
180
|
+
| token | the jwt token. (only if mode is 'jwt') |
|
|
181
|
+
| user | the user object |
|
|
182
|
+
|
|
183
|
+
### Enable MFA OTP
|
|
184
|
+
Services to enable the MFA with OTP.
|
|
185
|
+
You have to call first the `activate` service to get the URI,
|
|
186
|
+
encode it as a QR code and present it in the UI of your software.
|
|
187
|
+
Then user then scans this QR code to add the OTP secret to his OTP App.
|
|
188
|
+
Finally, the `confirm` service must be called with an OTP code retrieved
|
|
189
|
+
in the OTP App to confirm the activation.
|
|
190
|
+
|
|
191
|
+
**Request :** `PUT` `/auth/otp/activate`
|
|
192
|
+
|
|
193
|
+
**Responses :**
|
|
194
|
+
|
|
195
|
+
* `HTTP 400` if the otp is already enabled
|
|
196
|
+
* `HTTP 200` with the following body
|
|
197
|
+
|
|
198
|
+
| Field | Description |
|
|
199
|
+
|-----------|---------------------------------------|
|
|
200
|
+
| setup_uri | the uri to enable the OTP application |
|
|
201
|
+
|
|
202
|
+
**Request :** `PUT` `/auth/otp/confirm`
|
|
203
|
+
|
|
204
|
+
**Request body:**
|
|
205
|
+
|
|
206
|
+
| Field | Description |
|
|
207
|
+
|-------------|---------------------------------------|
|
|
208
|
+
| otp_code | the otp code retrieved in the OTP app |
|
|
209
|
+
|
|
210
|
+
**Responses :**
|
|
211
|
+
|
|
212
|
+
* `HTTP 422` if the otp code is invalid
|
|
213
|
+
* `HTTP 200` if the otp code is valid
|
|
214
|
+
|
|
215
|
+
### Disable MFA OTP
|
|
216
|
+
A service to disable the MFA with OTP.
|
|
217
|
+
|
|
218
|
+
**Request :** `PUT` `/auth/otp/disable`
|
|
219
|
+
|
|
220
|
+
**Request body:**
|
|
221
|
+
|
|
222
|
+
| Field | Description |
|
|
223
|
+
|-------------|---------------------------------------|
|
|
224
|
+
| otp_code | the otp code retrieved in the OTP app |
|
|
225
|
+
|
|
226
|
+
**Responses :**
|
|
227
|
+
|
|
228
|
+
* `HTTP 422` if the otp code is invalid
|
|
229
|
+
* `HTTP 200` if the otp code is valid
|
|
230
|
+
|
|
231
|
+
|
|
78
232
|
### Logout
|
|
79
233
|
A service that deletes the authentication cookie if it exists.
|
|
80
234
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/models/user_filtered_queryset_mixin.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/templates/registration/welcome_email.txt
RENAMED
|
File without changes
|
{django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/templates/registration/welcome_subject.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/views/parameters/media_redirect.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/views/parameters/subset_page_size.py
RENAMED
|
File without changes
|
{django-pfx-1.4.dev16 → django-pfx-1.4.dev18}/pfx/pfxcore/views/parameters/subset_page_subset.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|