edumfa 2.7.2__tar.gz → 2.8.0__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.
- {edumfa-2.7.2/edumfa.egg-info → edumfa-2.8.0}/PKG-INFO +23 -23
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/ubuntu/changelog +37 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/ubuntu-server/changelog +6 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/api/lib/postpolicy.py +3 -1
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/api/lib/utils.py +29 -10
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/api/token.py +8 -1
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/api/validate.py +3 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/auditmodules/sqlaudit.py +9 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/crypto.py +1 -2
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/token.py +24 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokens/totptoken.py +46 -16
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokens/webauthn.py +3 -1
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokens/webauthntoken.py +2 -2
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/messages.pot +124 -124
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/controllers/configControllers.js +2 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.token.totp.html +10 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/controllers/tokenControllers.js +3 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/controllers/tokenDetailController.js +6 -1
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.details.html +13 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enroll.totp.html +11 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/translations/cs/LC_MESSAGES/messages.mo +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/translations/cs/LC_MESSAGES/messages.po +152 -122
- edumfa-2.8.0/edumfa/translations/de/LC_MESSAGES/messages.mo +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/translations/de/LC_MESSAGES/messages.po +143 -127
- edumfa-2.8.0/edumfa/translations/es/LC_MESSAGES/messages.mo +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/translations/es/LC_MESSAGES/messages.po +141 -126
- edumfa-2.8.0/edumfa/translations/fr/LC_MESSAGES/messages.mo +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/translations/fr/LC_MESSAGES/messages.po +146 -126
- edumfa-2.8.0/edumfa/translations/it/LC_MESSAGES/messages.mo +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/translations/it/LC_MESSAGES/messages.po +140 -122
- edumfa-2.8.0/edumfa/translations/nl/LC_MESSAGES/messages.mo +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/translations/nl/LC_MESSAGES/messages.po +140 -126
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/translations/pl/LC_MESSAGES/messages.mo +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/translations/pl/LC_MESSAGES/messages.po +148 -122
- edumfa-2.8.0/edumfa/translations/pt_BR/LC_MESSAGES/messages.mo +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/translations/pt_BR/LC_MESSAGES/messages.po +140 -126
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/translations/ro/LC_MESSAGES/messages.mo +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/translations/ro/LC_MESSAGES/messages.po +148 -122
- edumfa-2.8.0/edumfa/translations/ru/LC_MESSAGES/messages.mo +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/translations/ru/LC_MESSAGES/messages.po +140 -122
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/translations/si/LC_MESSAGES/messages.mo +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/translations/si/LC_MESSAGES/messages.po +148 -122
- edumfa-2.8.0/edumfa/translations/tr/LC_MESSAGES/messages.mo +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/translations/tr/LC_MESSAGES/messages.po +140 -126
- edumfa-2.8.0/edumfa/translations/zh_Hans/LC_MESSAGES/messages.mo +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/translations/zh_Hans/LC_MESSAGES/messages.po +138 -124
- edumfa-2.8.0/edumfa/translations/zh_Hant/LC_MESSAGES/messages.mo +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/translations/zh_Hant/LC_MESSAGES/messages.po +135 -123
- {edumfa-2.7.2 → edumfa-2.8.0/edumfa.egg-info}/PKG-INFO +23 -23
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa.egg-info/requires.txt +22 -22
- {edumfa-2.7.2 → edumfa-2.8.0}/pyproject.toml +6 -6
- {edumfa-2.7.2 → edumfa-2.8.0}/requirements.txt +17 -17
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_api_lib_utils.py +79 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_api_token.py +78 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_tokens_totp.py +56 -0
- edumfa-2.7.2/edumfa/translations/de/LC_MESSAGES/messages.mo +0 -0
- edumfa-2.7.2/edumfa/translations/es/LC_MESSAGES/messages.mo +0 -0
- edumfa-2.7.2/edumfa/translations/fr/LC_MESSAGES/messages.mo +0 -0
- edumfa-2.7.2/edumfa/translations/it/LC_MESSAGES/messages.mo +0 -0
- edumfa-2.7.2/edumfa/translations/nl/LC_MESSAGES/messages.mo +0 -0
- edumfa-2.7.2/edumfa/translations/pt_BR/LC_MESSAGES/messages.mo +0 -0
- edumfa-2.7.2/edumfa/translations/ru/LC_MESSAGES/messages.mo +0 -0
- edumfa-2.7.2/edumfa/translations/tr/LC_MESSAGES/messages.mo +0 -0
- edumfa-2.7.2/edumfa/translations/zh_Hans/LC_MESSAGES/messages.mo +0 -0
- edumfa-2.7.2/edumfa/translations/zh_Hant/LC_MESSAGES/messages.mo +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/AUTHORS.md +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/LICENSE +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/MANIFEST.in +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/README.rst +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/README.md +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/apache/edumfaapp.wsgi +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/apache/sites-available/edumfa-venv.conf +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/apache/sites-available/edumfa.conf +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/config/freeradius2/edumfa +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/config/freeradius2/mods-perl-edumfa +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/config/freeradius3/edumfa +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/config/freeradius3/mods-perl-edumfa +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/crontab/edumfa +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/docker/logging.cfg +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/docker-compose-example.yml +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/docker-example/edumfa-policy.conf +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/docker-example/edumfa-setup.sh +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/docker-example/edumfa.cfg +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/docker-setup.sh +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/edumfa/dictionary +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/edumfa/edumfa.cfg +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/edumfa_radius.pm +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/gunicorn/edumfaapp.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/logging.cfg +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/nginx/edumfaapp.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/nginx/sites-available/edumfa +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/rlm_perl.ini +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/ubuntu/clean +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/ubuntu/compat +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/ubuntu/control +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/ubuntu/copyright +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/ubuntu/rules +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/ubuntu/source/format +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/ubuntu/source/options +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/ubuntu-radius/changelog +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/ubuntu-radius/compat +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/ubuntu-radius/control +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/ubuntu-radius/copyright +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/ubuntu-radius/edumfa-radius.install +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/ubuntu-radius/edumfa-radius.postinst +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/ubuntu-radius/edumfa-radius.postrm +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/ubuntu-radius/rules +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/ubuntu-radius/source/format +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/ubuntu-server/clean +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/ubuntu-server/compat +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/ubuntu-server/control +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/ubuntu-server/edumfa-apache2.install +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/ubuntu-server/edumfa-apache2.postinst +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/ubuntu-server/edumfa-apache2.postrm +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/ubuntu-server/edumfa-nginx.install +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/ubuntu-server/edumfa-nginx.postinst +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/ubuntu-server/edumfa-nginx.postrm +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/ubuntu-server/rules +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/ubuntu-server/source/format +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/ubuntu-server/source/options +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/deploy/uwsgi/apps-available/edumfa.xml +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/__init__.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/api/__init__.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/api/application.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/api/audit.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/api/auth.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/api/before_after.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/api/caconnector.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/api/clienttype.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/api/edumfaserver.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/api/event.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/api/lib/__init__.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/api/lib/decorators.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/api/lib/policyhelper.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/api/lib/prepolicy.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/api/machine.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/api/machineresolver.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/api/monitoring.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/api/periodictask.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/api/policy.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/api/radiusserver.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/api/realm.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/api/recover.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/api/register.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/api/resolver.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/api/serviceid.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/api/smsgateway.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/api/smtpserver.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/api/system.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/api/tokengroup.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/api/ttype.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/api/user.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/app.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/babel.cfg +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/commands/__init__.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/commands/manage/__init__.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/commands/manage/admin.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/commands/manage/api.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/commands/manage/audit.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/commands/manage/authcache.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/commands/manage/backup.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/commands/manage/ca.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/commands/manage/config.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/commands/manage/core.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/commands/manage/event.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/commands/manage/helper.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/commands/manage/hsm.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/commands/manage/main.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/commands/manage/policy.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/commands/manage/realm.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/commands/manage/resolver.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/commands/manage/token.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/config.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/__init__.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/applications/__init__.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/applications/base.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/applications/luks.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/applications/offline.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/applications/ssh.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/apps.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/audit.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/auditmodules/__init__.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/auditmodules/base.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/auditmodules/containeraudit.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/auditmodules/loggeraudit.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/auth.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/authcache.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/cache/__init__.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/caconnector.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/caconnectors/__init__.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/caconnectors/baseca.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/caconnectors/caservice_pb2.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/caconnectors/caservice_pb2_grpc.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/caconnectors/localca.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/caconnectors/msca.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/challenge.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/challengeresponsedecorators.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/clientapplication.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/config.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/counter.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/decorators.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/edumfaserver.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/error.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/event.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/eventhandler/__init__.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/eventhandler/base.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/eventhandler/counterhandler.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/eventhandler/customuserattributeshandler.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/eventhandler/federationhandler.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/eventhandler/logginghandler.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/eventhandler/requestmangler.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/eventhandler/responsemangler.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/eventhandler/scripthandler.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/eventhandler/tokenhandler.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/eventhandler/usernotification.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/eventhandler/webhookeventhandler.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/framework.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/importotp.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/lifecycle.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/log.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/machine.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/machineresolver.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/machines/__init__.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/machines/base.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/machines/hosts.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/machines/ldap.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/monitoringmodules/__init__.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/monitoringmodules/base.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/monitoringmodules/sqlstats.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/monitoringstats.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/passwordreset.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/periodictask.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/pinhandling/__init__.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/pinhandling/base.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/policy.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/policydecorators.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/pooling.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/queue.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/queues/__init__.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/queues/base.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/queues/huey_queue.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/radiusserver.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/realm.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/resolver.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/resolvers/HTTPResolver.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/resolvers/LDAPIdResolver.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/resolvers/PasswdIdResolver.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/resolvers/SCIMIdResolver.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/resolvers/SQLIdResolver.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/resolvers/UserIdResolver.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/resolvers/__init__.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/security/__init__.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/security/aeshsm.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/security/default.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/security/encryptkey.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/security/password/__init__.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/serviceid.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/smsprovider/FirebaseProvider.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/smsprovider/HttpMessageToUidProvider.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/smsprovider/HttpSMSProvider.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/smsprovider/SMSProvider.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/smsprovider/ScriptSMSProvider.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/smsprovider/SipgateSMSProvider.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/smsprovider/SmppSMSProvider.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/smsprovider/SmtpSMSProvider.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/smsprovider/__init__.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/smtpserver.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/sqlutils.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/subscriptions.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/task/__init__.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/task/base.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/task/eventcounter.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/task/simplestats.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokenclass.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokengroup.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokens/HMAC.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokens/__init__.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokens/applicationspecificpasswordtoken.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokens/certificatetoken.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokens/daplugtoken.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokens/daypasswordtoken.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokens/emailtoken.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokens/foureyestoken.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokens/hotptoken.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokens/indexedsecrettoken.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokens/legacypushtoken.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokens/mOTP.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokens/motptoken.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokens/ocra.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokens/ocratoken.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokens/papertoken.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokens/passwordtoken.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokens/pushtoken.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokens/questionnairetoken.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokens/radiustoken.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokens/registrationtoken.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokens/remotetoken.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokens/smstoken.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokens/spasstoken.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokens/sshkeytoken.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokens/tantoken.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokens/tiqrtoken.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokens/u2f.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokens/u2ftoken.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokens/vasco.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokens/vascotoken.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokens/yubicotoken.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/tokens/yubikeytoken.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/user.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/usercache.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/utils/__init__.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/utils/compare.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/lib/utils/export.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/models.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/README.md +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/app.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/audit/controllers/auditControllers.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/audit/factories/audit.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/audit/states/states.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/audit/views/audit.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/audit/views/audit.log.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/components/controllers/componentControllers.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/components/factories/component.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/components/states/states.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/components/views/component.clienttype.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/components/views/component.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/controllers/eduMfaServerController.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/controllers/eventController.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/controllers/ldapMachineResolverController.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/controllers/periodicTaskController.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/controllers/radiusServerController.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/controllers/serviceidController.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/controllers/smsgatewayController.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/controllers/smtpServerController.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/controllers/tokengroupController.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/factories/config.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/states/states.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.caconnectors.list.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.caconnectors.local.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.caconnectors.microsoft.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.edumfaserver.edit.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.edumfaserver.list.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.events.details.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.events.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.events.list.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.machineresolvers.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.mresolvers.hosts.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.mresolvers.ldap.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.mresolvers.list.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.periodictasks.details.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.periodictasks.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.periodictasks.list.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.policies.details.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.policies.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.policies.list.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.radius.edit.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.radius.list.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.realms.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.realms.list.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.resolvers.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.resolvers.http.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.resolvers.ldap.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.resolvers.list.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.resolvers.passwd.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.resolvers.scim.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.resolvers.sql.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.serviceid.edit.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.serviceid.list.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.smsgateway.edit.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.smsgateway.list.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.smtp.edit.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.smtp.list.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.system.doc.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.system.edit.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.system.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.token.daypassword.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.token.email.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.token.hotp.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.token.question.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.token.radius.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.token.remote.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.token.sms.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.token.tiqr.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.token.u2f.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.token.webauthn.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.token.yubico.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.token.yubikey.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.tokengroup.edit.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.tokengroup.list.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/config.tokens.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/config/views/dialog.confirm_delete.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/dashboard/controllers/dashboardControllers.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/dashboard/states/states.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/dashboard/views/dashboard.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/dialogs/views/dialog.about.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/dialogs/views/dialog.autocreate_realm.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/dialogs/views/dialog.lock.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/dialogs/views/dialog.no.token.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/dialogs/views/dialog.welcome.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/directives/controllers/directives.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/directives/views/directive.assigntoken.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/directives/views/directive.assignuser.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/directives/views/directive.attachmachine.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/directives/views/directive.attachtoken.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/directives/views/directive.csvdownload.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/directives/views/directive.filter.table.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/directives/views/directive.policyconditions.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/directives/views/directive.tokendata.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/filters/filters.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/login/controllers/loginControllers.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/login/factories/auth.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/login/factories/u2f.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/login/factories/webauthn.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/login/states/states.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/login/views/enter-response.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/login/views/login.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/login/views/offline.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/login/views/pinchange.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/machine/controllers/machineController.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/machine/controllers/machineDetailsController.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/machine/factories/machine.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/machine/states/states.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/machine/views/machine.details.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/machine/views/machine.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/machine/views/machine.list.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/recovery/controllers/recoveryControllers.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/recovery/factories/recoveryFactory.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/recovery/states/states.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/recovery/views/recovery.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/recovery/views/recovery.reset.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/register/controllers/registerControllers.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/register/factories/registerFactory.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/register/states/states.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/register/views/register.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/controllers/tokenApplicationsController.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/controllers/tokenChallengesController.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/controllers/tokenGetSerialController.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/controllers/tokenLostController.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/factories/token.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/factories/validate.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/states/states.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/dialog.ask_token_delete.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.applications.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.applications.offline.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.applications.ssh.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.assign.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.challenges.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.display.apps.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enroll.4eyes.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enroll.applspec.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enroll.certificate.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enroll.daypassword.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enroll.edupush.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enroll.email.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enroll.hotp.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enroll.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enroll.indexedsecret.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enroll.motp.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enroll.paper.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enroll.push.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enroll.question.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enroll.radius.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enroll.registration.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enroll.remote.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enroll.sms.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enroll.spass.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enroll.sshkey.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enroll.tan.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enroll.tiqr.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enroll.u2f.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enroll.vasco.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enroll.webauthn.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enroll.yubico.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enroll.yubikey.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enrolled.applspec.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enrolled.certificate.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enrolled.daypassword.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enrolled.edupush.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enrolled.hotp.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enrolled.motp.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enrolled.paper.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enrolled.push.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enrolled.registration.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enrolled.tan.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enrolled.tiqr.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enrolled.totp.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enrolled.u2f.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.enrolled.webauthn.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.getserial.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.import.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.list.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/token/views/token.lost.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/translation/translations.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/user/controllers/userControllers.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/user/factories/user.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/user/states/states.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/user/views/dialog.ask_user_delete.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/user/views/user.add.dynamic.form.fields.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/user/views/user.add.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/user/views/user.details.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/user/views/user.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/user/views/user.list.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/components/user/views/user.password.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/contrib/css/angular-inform.css +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/contrib/css/angular-inform.css.map +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/contrib/css/bootstrap-theme.css +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/contrib/css/bootstrap-theme.css.map +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/contrib/css/bootstrap.css +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/contrib/css/bootstrap.css.map +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/contrib/css/hotkeys.css +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/contrib/css/isteven-multi-select.css +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/contrib/fonts/glyphicons-halflings-regular.eot +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/contrib/fonts/glyphicons-halflings-regular.svg +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/contrib/fonts/glyphicons-halflings-regular.ttf +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/contrib/fonts/glyphicons-halflings-regular.woff +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/contrib/fonts/glyphicons-halflings-regular.woff2 +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/contrib/js/angular-inform.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/contrib/js/angular-inform.js.map +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/contrib/js/angular.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/contrib/js/bootstrap.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/contrib/js/hotkeys.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/contrib/js/jquery.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/contrib/js/ngmodules/angular-gettext.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/contrib/js/ngmodules/angular-idle.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/contrib/js/ngmodules/angular-sanitize.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/contrib/js/ngmodules/angular-ui-router.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/contrib/js/ngmodules/angular-ui-router.js.map +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/contrib/js/ngmodules/isteven-multi-select.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/contrib/js/ngmodules/ng-file-upload.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/contrib/js/u2f-api.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/contrib/js/ui-bootstrap-tpls.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/contrib/js/webauthn-client/edumfa-webauthn.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/css/baseline.css +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/css/content.css +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/css/eduMFA-logo.png +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/css/highlight.css +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/css/menu.css +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/css/papertoken.css +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/css/signin.css +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/css/table-ui.css +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/customize/README.rst +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/favicon.png +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/img/FIDO-U2F-Security-Key-444x444.png +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/img/plugup.jpg +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/img/solokeys.png +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/img/u2fzero.png +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/package-lock.json +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/package.json +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/providers/errorMessageProvider.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/providers/versioningProvider.js +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/templates/baseline.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/templates/cert_request_form.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/templates/deactivated.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/templates/documentation.rst +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/templates/footer.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/templates/header.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/templates/index.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/templates/menu.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/templates/token_enrolled.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/static/update_contrib.sh +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/webui/__init__.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/webui/certificate.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa/webui/login.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa.egg-info/SOURCES.txt +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa.egg-info/dependency_links.txt +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa.egg-info/entry_points.txt +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/edumfa.egg-info/top_level.txt +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/README +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/alembic.ini +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/env.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/script.py.mako +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/006d4747f858_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/00762b3f7a60_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/0c7123345224_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/0d011e94a8e8_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/140ba0ca4f07_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/145ce80decd_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/14a1bcb10018_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/19f727d285e2_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/1a0710df148b_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/1a69e5e5e2ac_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/1edda52b619f_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/204d8d4f351e_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/205bda834127_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/20969b4cbf06_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/2118e566df16_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/2181294eed0b_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/22558d9f3178_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/239995464c48_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/2551ee982544_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/2ac117d0a6f5_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/2c9430cfc66b_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/307a4fbe8a05_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/3236a1abf1c6_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/3429d523e51f_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/36428afb2457_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/37e6b49fc686_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/3ae3c668f444_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/3ba618f6b820_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/3c6e9dd7fbac_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/3d7f8b29cbb1_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/3f7e8583ea2_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/4023571658f8_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/414079706620_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/4238eac8ccab_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/449903fb6e35_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/48ee74b8a7c8_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/49a04e560d96_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/4a0aec37e7cf_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/4d9178fa8336_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/4f32a4e1bf33_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/50adc980d625_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/5402fd96fbca_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/58e4f7ebb705_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/59ef3e03bc62_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/5cb310101a1f_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/631ec59e1ca6_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/7d82d8b680a9_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/849170064430_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/86f40f535d7c_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/888b56ed5dcb_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/89e57ed16379_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/8d40dbcfda25_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/9155f0d3d028_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/a28f2733897b_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/a63df077051a_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/a7e91b18a460_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/b9131d0686eb_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/cb6d7b7bae63_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/d2ae8e54b628_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/d3c0f0403a84_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/d415d490eb05_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/d5870fd2f2a4_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/d6b40a745e5_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/d756b34061ff_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/dceb6cd3c41e_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/e360c56bcf8c_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/e5cbeb7c177_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/ef29ba43e290_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/fa07bd604a75.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/fabcf24d9304_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/migrations/versions/ff26585932ec_.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/setup.cfg +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/setup.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/__init__.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/base.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/conftest.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/ldap3mock.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/mscamock.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/pkcs11mock.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/queuemock.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/radiusmock.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/redismock.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/smppmock.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/smtpmock.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_api_2stepinit.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_api_applications.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_api_audit.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_api_auth.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_api_caconnector.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_api_clienttype.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_api_edumfaserver.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_api_events.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_api_lib_policy.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_api_machineresolver.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_api_machines.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_api_machines_serviceid.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_api_monitoring.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_api_offline_no_token.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_api_periodictask.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_api_policy.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_api_push_validate.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_api_radiusserver.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_api_register.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_api_roles.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_api_serviceids.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_api_smsgateway.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_api_smtpserver.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_api_system.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_api_tokengroup.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_api_ttype.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_api_u2f.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_api_users.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_api_validate.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_app.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_db_model.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_applications.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_apps.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_audit.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_auth.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_authcache.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_caconnector.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_challenges.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_clientapplication.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_config.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_counter.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_crypto.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_edumfaserver.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_eventhandler_logging.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_eventhandler_usernotification.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_events.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_framework.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_importotp.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_lifecycle.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_machine_resolver_ldap.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_machines.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_machinetokens.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_monitoringstats.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_periodictask.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_policy.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_policydecorator.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_pooling.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_queue.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_radiusserver.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_realm.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_recovery.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_resolver.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_serviceid.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_smsprovider.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_smtpserver.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_sqlutils.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_subscriptions.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_task_eventcounter.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_task_simplestats.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_tasks.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_token.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_tokenclass.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_tokengroup.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_tokens_certificate.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_tokens_daplug.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_tokens_daypassword.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_tokens_email.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_tokens_foureyes.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_tokens_hotp.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_tokens_indexedsecret.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_tokens_motp.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_tokens_paper.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_tokens_passwordtoken.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_tokens_push.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_tokens_questionnaire.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_tokens_radius.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_tokens_registration.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_tokens_remote.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_tokens_sms.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_tokens_spass.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_tokens_ssh.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_tokens_tan.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_tokens_tiqr.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_tokens_u2f.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_tokens_vasco.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_tokens_webauthn.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_tokens_yubico.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_tokens_yubikey.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_user.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_usercache.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_utils.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_lib_utils_compare.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_mock_ldap3.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_resolver_realm.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_scripts.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_ui_certificate.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/test_ui_login.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/FIDO-U2F-Security-Key-444x444.png +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/NetKnights.pem +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/__init__.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/altstatic/templates/testui.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/attestation/yubico.pem +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/audit.sqlite +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/ca/cacert.pem +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/ca/cakey.pem +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/ca/index.txt +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/ca/index.txt.attr +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/ca/openssl.cnf +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/ca/serial +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/ca/templates.yaml +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/dictionary +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/does_not_exist +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/emailtemplate.html +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/empty.oath +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/enckey +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/enckey.enc +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/event.conf +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/fancytoken.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/firebase-test.json +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/google-services.json +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/gpg/public.pem +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/gpg/pubring.gpg +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/gpg/random_seed +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/gpg/secring.gpg +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/gpg/trustdb.gpg +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/hosts +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/import.oath +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/import.oath.asc +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/jwt_sign.key +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/logging.cfg +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/logging.yml +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/logging_broken.yaml +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/msca-connector/ca.pem +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/msca-connector/privacyidea-encrypted.key +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/msca-connector/privacyidea.key +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/msca-connector/privacyidea.pem +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/ocra.csv +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/passwd +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/passwd-duplicate-name +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/passwords +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/policy.cfg +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/policy.conf +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/policy_empty_file.cfg +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/private.pem +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/pskc-aes.xml +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/pskc-password.xml +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/public.pem +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/pw-2nd-resolver +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/scripts/fail.sh +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/scripts/ls.sh +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/scripts/success.sh +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/test.sub +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/test2.sub +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/testuser-api.sqlite +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/testuser.sqlite +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/testusercache.sqlite +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/trusted_attestation_roots/solokeys_device_attestation_ca.pem +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/trusted_attestation_roots/yubico_u2f_device_attestation_ca.pem +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/yubico-oath-long.csv +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/yubico-oath.csv +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tests/testdata/yubico.csv +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/creategoogleauthenticator-file +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-authorizedkeys +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-convert-base32.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-convert-token +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-convert-token.1 +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-convert-xml-to-csv +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-create-ad-users +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-create-ad-users.1 +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-create-certificate +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-create-certificate.1 +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-create-pwidresolver-user +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-create-pwidresolver-user.1 +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-create-sqlidresolver-user +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-create-sqlidresolver-user.1 +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-create-userdb +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-create-userdb.1 +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-cron +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-diag +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-expired-users +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-export-edumfa-counter.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-export-linotp-counter.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-fetchssh +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-fetchssh.1 +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-fix-access-rights +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-fix-access-rights.1 +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-get-serial +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-get-unused-tokens +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-migrate-linotp.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-pip-update +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-pip-update.1 +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-queue-huey +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-schema-upgrade +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-standalone +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-sync-owncloud.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-token-janitor +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-update-counter.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-update-linotp-counter.py +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-user-action +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/edumfa-usercache-cleanup +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/getgooglecodes +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/reset-edumfa +0 -0
- {edumfa-2.7.2 → edumfa-2.8.0}/tools/ssha.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: edumfa
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.8.0
|
|
4
4
|
Summary: eduMFA: identity, multifactor authentication (OTP), authorization, audit
|
|
5
5
|
Author-email: "edumfa.io" <edumfa@listserv.dfn.de>
|
|
6
6
|
License: GNU AFFERO GENERAL PUBLIC LICENSE
|
|
@@ -647,44 +647,44 @@ Requires-Python: >=3.9
|
|
|
647
647
|
Description-Content-Type: text/x-rst
|
|
648
648
|
License-File: LICENSE
|
|
649
649
|
License-File: AUTHORS.md
|
|
650
|
-
Requires-Dist: alembic==1.15.
|
|
650
|
+
Requires-Dist: alembic==1.15.2
|
|
651
651
|
Requires-Dist: argon2-cffi==23.1.0
|
|
652
652
|
Requires-Dist: argon2-cffi-bindings==21.2.0
|
|
653
653
|
Requires-Dist: async-timeout==5.0.1
|
|
654
654
|
Requires-Dist: babel==2.17.0
|
|
655
655
|
Requires-Dist: bcrypt==4.3.0
|
|
656
|
-
Requires-Dist: beautifulsoup4==4.13.
|
|
656
|
+
Requires-Dist: beautifulsoup4==4.13.4
|
|
657
657
|
Requires-Dist: blinker==1.9.0
|
|
658
658
|
Requires-Dist: cachetools==5.5.2
|
|
659
659
|
Requires-Dist: cbor2==5.6.5
|
|
660
|
-
Requires-Dist: certifi==2025.
|
|
660
|
+
Requires-Dist: certifi==2025.4.26
|
|
661
661
|
Requires-Dist: cffi==1.17.1
|
|
662
|
-
Requires-Dist: charset-normalizer==3.4.
|
|
662
|
+
Requires-Dist: charset-normalizer==3.4.2
|
|
663
663
|
Requires-Dist: click==8.1.8
|
|
664
664
|
Requires-Dist: configobj==5.0.9
|
|
665
665
|
Requires-Dist: croniter==6.0.0
|
|
666
|
-
Requires-Dist: cryptography==44.0.
|
|
666
|
+
Requires-Dist: cryptography==44.0.3
|
|
667
667
|
Requires-Dist: crypt-r==3.13.1; python_version == "3.13" and sys_platform == "linux"
|
|
668
668
|
Requires-Dist: defusedxml==0.7.1
|
|
669
669
|
Requires-Dist: flask==3.1.0
|
|
670
670
|
Requires-Dist: flask-babel==4.0.0
|
|
671
671
|
Requires-Dist: flask-migrate==4.1.0
|
|
672
672
|
Requires-Dist: flask-sqlalchemy==3.1.1
|
|
673
|
-
Requires-Dist: google-auth==2.
|
|
673
|
+
Requires-Dist: google-auth==2.40.1
|
|
674
674
|
Requires-Dist: grpcio==1.71.0
|
|
675
675
|
Requires-Dist: huey==2.5.3
|
|
676
676
|
Requires-Dist: idna==3.10
|
|
677
|
-
Requires-Dist: importlib-metadata==8.
|
|
677
|
+
Requires-Dist: importlib-metadata==8.7.0
|
|
678
678
|
Requires-Dist: itsdangerous==2.2.0
|
|
679
679
|
Requires-Dist: jinja2==3.1.6
|
|
680
680
|
Requires-Dist: ldap3==2.9.1
|
|
681
|
-
Requires-Dist: lxml==5.
|
|
682
|
-
Requires-Dist: mako==1.3.
|
|
681
|
+
Requires-Dist: lxml==5.4.0
|
|
682
|
+
Requires-Dist: mako==1.3.10
|
|
683
683
|
Requires-Dist: markupsafe==3.0.2
|
|
684
684
|
Requires-Dist: netaddr==1.3.0
|
|
685
685
|
Requires-Dist: passlib==1.7.4
|
|
686
686
|
Requires-Dist: pyasn1==0.6.1
|
|
687
|
-
Requires-Dist: pyasn1-modules==0.4.
|
|
687
|
+
Requires-Dist: pyasn1-modules==0.4.2
|
|
688
688
|
Requires-Dist: pycparser==2.22
|
|
689
689
|
Requires-Dist: pydash==8.0.5
|
|
690
690
|
Requires-Dist: pyjwt==2.10.1
|
|
@@ -695,24 +695,24 @@ Requires-Dist: python-dateutil==2.9.0.post0
|
|
|
695
695
|
Requires-Dist: python-gnupg==0.5.4
|
|
696
696
|
Requires-Dist: pytz==2025.2
|
|
697
697
|
Requires-Dist: pyyaml==6.0.2
|
|
698
|
-
Requires-Dist: redis==
|
|
698
|
+
Requires-Dist: redis==6.0.0
|
|
699
699
|
Requires-Dist: requests==2.32.3
|
|
700
|
-
Requires-Dist: rsa==4.9
|
|
700
|
+
Requires-Dist: rsa==4.9.1
|
|
701
701
|
Requires-Dist: segno==1.6.6
|
|
702
702
|
Requires-Dist: six==1.17.0
|
|
703
703
|
Requires-Dist: smpplib==2.2.4
|
|
704
|
-
Requires-Dist: soupsieve==2.
|
|
705
|
-
Requires-Dist: sqlalchemy==2.0.
|
|
706
|
-
Requires-Dist: typing-extensions==4.13.
|
|
707
|
-
Requires-Dist: urllib3==2.
|
|
704
|
+
Requires-Dist: soupsieve==2.7
|
|
705
|
+
Requires-Dist: sqlalchemy==2.0.40
|
|
706
|
+
Requires-Dist: typing-extensions==4.13.2
|
|
707
|
+
Requires-Dist: urllib3==2.4.0
|
|
708
708
|
Requires-Dist: werkzeug==3.1.3
|
|
709
709
|
Requires-Dist: zipp==3.21.0
|
|
710
|
-
Requires-Dist: setuptools==
|
|
710
|
+
Requires-Dist: setuptools==80.3.1
|
|
711
711
|
Provides-Extra: docs
|
|
712
712
|
Requires-Dist: furo==2024.8.6; extra == "docs"
|
|
713
713
|
Requires-Dist: docutils==0.21.2; extra == "docs"
|
|
714
714
|
Requires-Dist: imagesize==1.4.1; extra == "docs"
|
|
715
|
-
Requires-Dist: packaging==
|
|
715
|
+
Requires-Dist: packaging==25.0; extra == "docs"
|
|
716
716
|
Requires-Dist: pyenchant==3.2.2; extra == "docs"
|
|
717
717
|
Requires-Dist: Pygments==2.19.1; extra == "docs"
|
|
718
718
|
Requires-Dist: snowballstemmer==2.2.0; extra == "docs"
|
|
@@ -729,19 +729,19 @@ Requires-Dist: sphinx-copybutton==0.5.2; extra == "docs"
|
|
|
729
729
|
Requires-Dist: sphinx-inline-tabs==2023.4.21; extra == "docs"
|
|
730
730
|
Provides-Extra: test
|
|
731
731
|
Requires-Dist: attrs==25.3.0; extra == "test"
|
|
732
|
-
Requires-Dist: coverage==7.
|
|
732
|
+
Requires-Dist: coverage==7.8.0; extra == "test"
|
|
733
733
|
Requires-Dist: exceptiongroup==1.2.2; extra == "test"
|
|
734
734
|
Requires-Dist: iniconfig==2.1.0; extra == "test"
|
|
735
735
|
Requires-Dist: mock==5.2.0; extra == "test"
|
|
736
|
-
Requires-Dist: packaging==
|
|
736
|
+
Requires-Dist: packaging==25.0; extra == "test"
|
|
737
737
|
Requires-Dist: pluggy==1.5.0; extra == "test"
|
|
738
738
|
Requires-Dist: pyparsing==3.2.3; extra == "test"
|
|
739
739
|
Requires-Dist: pytest==8.3.5; extra == "test"
|
|
740
|
-
Requires-Dist: pytest-cov==6.
|
|
740
|
+
Requires-Dist: pytest-cov==6.1.1; extra == "test"
|
|
741
741
|
Requires-Dist: responses==0.25.7; extra == "test"
|
|
742
742
|
Requires-Dist: testfixtures==8.3.0; extra == "test"
|
|
743
743
|
Requires-Dist: tomli==2.2.1; extra == "test"
|
|
744
|
-
Requires-Dist: types-PyYAML==6.0.12.
|
|
744
|
+
Requires-Dist: types-PyYAML==6.0.12.20250402; extra == "test"
|
|
745
745
|
Provides-Extra: postgres
|
|
746
746
|
Requires-Dist: psycopg2==2.9.10; extra == "postgres"
|
|
747
747
|
Provides-Extra: hsm
|
|
@@ -1,3 +1,40 @@
|
|
|
1
|
+
edumfa (2.8.0{{CODENAME}}) {{CODENAME}}; urgency=medium
|
|
2
|
+
|
|
3
|
+
* chore: Drop support for ubuntu focal by @Luc1412 in https://github.com/eduMFA/eduMFA/pull/613
|
|
4
|
+
* ci: allow manual trigger for docker ci action by @fritterhoff in https://github.com/eduMFA/eduMFA/pull/608
|
|
5
|
+
* feat: add hybrid transport for webauthn by @fritterhoff in https://github.com/eduMFA/eduMFA/pull/599
|
|
6
|
+
* feat: decrease log level for crypto usage by @fritterhoff in https://github.com/eduMFA/eduMFA/pull/603
|
|
7
|
+
* feat: disable timeshift by @j-hoff in https://github.com/eduMFA/eduMFA/pull/465
|
|
8
|
+
* feat: handle hmac-extension by @fritterhoff in https://github.com/eduMFA/eduMFA/pull/602
|
|
9
|
+
* feat: improve policy logging by @fritterhoff in https://github.com/eduMFA/eduMFA/pull/604
|
|
10
|
+
* feat: reduce/optimize audit logging by @fritterhoff in https://github.com/eduMFA/eduMFA/pull/590
|
|
11
|
+
* feat: rename property (`EDUMFA_REDUCE_SQLAUDIT`) by @fritterhoff in https://github.com/eduMFA/eduMFA/pull/594
|
|
12
|
+
* feat: start adding audience check by @fritterhoff in https://github.com/eduMFA/eduMFA/pull/511
|
|
13
|
+
* chore(deps): update dependency alembic to v1.15.2 - autoclosed by @renovate in https://github.com/eduMFA/eduMFA/pull/586
|
|
14
|
+
* chore(deps): update dependency beautifulsoup4 to v4.13.4 by @renovate in https://github.com/eduMFA/eduMFA/pull/605
|
|
15
|
+
* chore(deps): update dependency certifi to v2025.4.26 by @renovate in https://github.com/eduMFA/eduMFA/pull/618
|
|
16
|
+
* chore(deps): update dependency charset-normalizer to v3.4.2 by @renovate in https://github.com/eduMFA/eduMFA/pull/625
|
|
17
|
+
* chore(deps): update dependency cryptography to v44.0.3 by @renovate in https://github.com/eduMFA/eduMFA/pull/626
|
|
18
|
+
* chore(deps): update dependency google-auth to v2.40.1 by @renovate in https://github.com/eduMFA/eduMFA/pull/629
|
|
19
|
+
* chore(deps): update dependency importlib-metadata to v8.7.0 by @renovate in https://github.com/eduMFA/eduMFA/pull/619
|
|
20
|
+
* chore(deps): update dependency lxml to v5.4.0 by @renovate in https://github.com/eduMFA/eduMFA/pull/614
|
|
21
|
+
* chore(deps): update dependency mako to v1.3.10 by @renovate in https://github.com/eduMFA/eduMFA/pull/596
|
|
22
|
+
* chore(deps): update dependency pyasn1-modules to v0.4.2 by @renovate in https://github.com/eduMFA/eduMFA/pull/585
|
|
23
|
+
* chore(deps): update dependency redis to v6 by @renovate in https://github.com/eduMFA/eduMFA/pull/624
|
|
24
|
+
* chore(deps): update dependency rsa to v4.9.1 by @renovate in https://github.com/eduMFA/eduMFA/pull/606
|
|
25
|
+
* chore(deps): update dependency setuptools to v80.3.1 by @renovate in https://github.com/eduMFA/eduMFA/pull/627
|
|
26
|
+
* chore(deps): update dependency soupsieve to v2.7 by @renovate in https://github.com/eduMFA/eduMFA/pull/612
|
|
27
|
+
* chore(deps): update dependency sqlalchemy to v2.0.40 by @renovate in https://github.com/eduMFA/eduMFA/pull/584
|
|
28
|
+
* chore(deps): update dependency typing-extensions to v4.13.2 by @renovate in https://github.com/eduMFA/eduMFA/pull/597
|
|
29
|
+
* chore(deps): update dependency urllib3 to v2.4.0 by @renovate in https://github.com/eduMFA/eduMFA/pull/598
|
|
30
|
+
* fix(deps): pin dependencies by @renovate in https://github.com/eduMFA/eduMFA/pull/601
|
|
31
|
+
* fix(deps): update dependency coverage to v7.8.0 by @renovate in https://github.com/eduMFA/eduMFA/pull/587
|
|
32
|
+
* fix(deps): update dependency packaging to v25 by @renovate in https://github.com/eduMFA/eduMFA/pull/609
|
|
33
|
+
* fix(deps): update dependency pytest-cov to v6.1.1 by @renovate in https://github.com/eduMFA/eduMFA/pull/592
|
|
34
|
+
* fix(deps): update dependency types-pyyaml to v6.0.12.20250402 by @renovate in https://github.com/eduMFA/eduMFA/pull/589
|
|
35
|
+
|
|
36
|
+
-- eduMFA <edumfa-dev@listserv.dfn.de> Wed, 07 May 2025 14:00:00 +0200
|
|
37
|
+
|
|
1
38
|
edumfa (2.7.2{{CODENAME}}) {{CODENAME}}; urgency=medium
|
|
2
39
|
|
|
3
40
|
* chore: fix read the docs spec by @fritterhoff in https://github.com/eduMFA/eduMFA/pull/581
|
|
@@ -907,7 +907,9 @@ def check_verify_enrollment(request, response):
|
|
|
907
907
|
tokenobj.token.rollout_state = ROLLOUTSTATE.VERIFYPENDING
|
|
908
908
|
tokenobj.token.save()
|
|
909
909
|
response.set_data(json.dumps(content))
|
|
910
|
+
elif len(tokenobj_list) == 0:
|
|
911
|
+
log.warning("Token serial {0!s} not found in database.".format(serial))
|
|
910
912
|
else:
|
|
911
|
-
log.warning("No distinct token object found in enrollment response!")
|
|
913
|
+
log.warning("No distinct token object found in enrollment response for serial {0!s}!".format(serial))
|
|
912
914
|
|
|
913
915
|
return response
|
|
@@ -365,16 +365,35 @@ def verify_auth_token(auth_token, required_role=None):
|
|
|
365
365
|
for trusted_jwt in trusted_jwts:
|
|
366
366
|
try:
|
|
367
367
|
if trusted_jwt.get("algorithm") in TRUSTED_JWT_ALGOS:
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
368
|
+
if "aud" in trusted_jwt:
|
|
369
|
+
# The audience must match
|
|
370
|
+
j = jwt.decode(auth_token,
|
|
371
|
+
trusted_jwt.get("public_key"),
|
|
372
|
+
algorithms=[trusted_jwt.get("algorithm")],
|
|
373
|
+
audience=trusted_jwt.get("aud"))
|
|
374
|
+
else:
|
|
375
|
+
j = jwt.decode(auth_token,
|
|
376
|
+
trusted_jwt.get("public_key"),
|
|
377
|
+
algorithms=[trusted_jwt.get("algorithm")])
|
|
378
|
+
|
|
379
|
+
if "claim" in trusted_jwt and trusted_jwt.get("claim") in j:
|
|
380
|
+
j["username"] = j[trusted_jwt.get("claim")]
|
|
381
|
+
|
|
382
|
+
log.debug("JWT decoded: {0!s}".format(j))
|
|
383
|
+
if re.match(trusted_jwt.get("username") + "$", j.get("username")):
|
|
384
|
+
if "static_data" in trusted_jwt:
|
|
385
|
+
j["role"] = trusted_jwt.get("role")
|
|
386
|
+
j["realm"] = trusted_jwt.get("realm")
|
|
387
|
+
j["resolver"] = trusted_jwt.get("resolver")
|
|
388
|
+
r = j
|
|
389
|
+
log.debug("JWT is trusted. {0!s}".format(r))
|
|
390
|
+
elif dict((k, j.get(k)) for k in ("role", "resolver", "realm")) == \
|
|
372
391
|
dict((k, trusted_jwt.get(k)) for k in ("role", "resolver", "realm")):
|
|
373
|
-
if re.match(trusted_jwt.get("username") + "$", j.get("username")):
|
|
374
392
|
r = j
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
393
|
+
log.debug("JWT is trusted. {0!s}".format(r))
|
|
394
|
+
break
|
|
395
|
+
else:
|
|
396
|
+
wrong_username = j.get("username")
|
|
378
397
|
else:
|
|
379
398
|
log.warning("Unsupported JWT algorithm in EDUMFA_TRUSTED_JWT.")
|
|
380
399
|
except jwt.DecodeError as _e:
|
|
@@ -384,7 +403,7 @@ def verify_auth_token(auth_token, required_role=None):
|
|
|
384
403
|
raise AuthError(_("Authentication failure. Your token has expired: {0!s}").format(err),
|
|
385
404
|
id=ERROR.AUTHENTICATE_TOKEN_EXPIRED)
|
|
386
405
|
|
|
387
|
-
if not r:
|
|
406
|
+
if not wrong_username and not r:
|
|
388
407
|
try:
|
|
389
408
|
r = jwt.decode(auth_token, current_app.secret_key, algorithms=['HS256'])
|
|
390
409
|
except jwt.DecodeError as err:
|
|
@@ -393,7 +412,7 @@ def verify_auth_token(auth_token, required_role=None):
|
|
|
393
412
|
except jwt.ExpiredSignatureError as err:
|
|
394
413
|
raise AuthError(_("Authentication failure. Your token has expired: {0!s}").format(err),
|
|
395
414
|
id=ERROR.AUTHENTICATE_TOKEN_EXPIRED)
|
|
396
|
-
if wrong_username:
|
|
415
|
+
if wrong_username and not r:
|
|
397
416
|
raise AuthError(_("Authentication failure. The username {0!s} is not allowed to "
|
|
398
417
|
"impersonate via JWT.".format(wrong_username)))
|
|
399
418
|
if required_role and r.get("role") not in required_role:
|
|
@@ -41,7 +41,7 @@ from ..lib.token import (init_token, get_tokens_paginate, assign_token,
|
|
|
41
41
|
reset_token, resync_token, set_pin_so, set_pin_user,
|
|
42
42
|
set_pin, set_description, set_count_window,
|
|
43
43
|
set_sync_window, set_count_auth,
|
|
44
|
-
set_hashlib, set_max_failcount, set_realms,
|
|
44
|
+
set_hashlib, set_max_failcount, set_realms, set_use_timeshift,
|
|
45
45
|
copy_token_user, copy_token_pin, lost_token,
|
|
46
46
|
get_serial_by_otp, get_tokens,
|
|
47
47
|
set_validity_period_end, set_validity_period_start, add_tokeninfo,
|
|
@@ -795,6 +795,7 @@ def set_api(serial=None):
|
|
|
795
795
|
* max_failcount
|
|
796
796
|
* validity_period_start
|
|
797
797
|
* validity_period_end
|
|
798
|
+
* use_timeshift
|
|
798
799
|
|
|
799
800
|
The token is identified by the unique serial number or by the token owner.
|
|
800
801
|
In the later case all tokens of the owner will be modified.
|
|
@@ -822,6 +823,7 @@ def set_api(serial=None):
|
|
|
822
823
|
count_auth_success_max = getParam(request.all_data, "count_auth_success_max")
|
|
823
824
|
validity_period_start = getParam(request.all_data, "validity_period_start")
|
|
824
825
|
validity_period_end = getParam(request.all_data, "validity_period_end")
|
|
826
|
+
use_timeshift = getParam(request.all_data, "use_timeshift")
|
|
825
827
|
|
|
826
828
|
res = 0
|
|
827
829
|
|
|
@@ -874,6 +876,11 @@ def set_api(serial=None):
|
|
|
874
876
|
validity_period_start)})
|
|
875
877
|
res += set_validity_period_start(serial, user, validity_period_start)
|
|
876
878
|
|
|
879
|
+
if use_timeshift is not None:
|
|
880
|
+
g.audit_object.add_to_log({'action_detail': "use_timeshift=%r, "
|
|
881
|
+
"" % use_timeshift})
|
|
882
|
+
set_use_timeshift(serial, use_timeshift)
|
|
883
|
+
|
|
877
884
|
g.audit_object.log({"success": True})
|
|
878
885
|
return send_result(res)
|
|
879
886
|
|
|
@@ -389,6 +389,9 @@ def check():
|
|
|
389
389
|
g.audit_object.log({"info": log_used_user(user, details.get("message")),
|
|
390
390
|
"success": success,
|
|
391
391
|
"serial": serials,
|
|
392
|
+
"user": user.login,
|
|
393
|
+
"resolver": user.resolver,
|
|
394
|
+
"realm": user.realm,
|
|
392
395
|
"token_type": details.get("type")})
|
|
393
396
|
return send_result(result, rid=2, details=details)
|
|
394
397
|
|
|
@@ -301,6 +301,15 @@ class Audit(AuditBase):
|
|
|
301
301
|
duration = datetime.datetime.now() - self.audit_data.get("startdate")
|
|
302
302
|
else:
|
|
303
303
|
duration = None
|
|
304
|
+
# We wan't to reduce the passkey events a bit...
|
|
305
|
+
if self.config.get("EDUMFA_REDUCE_SQLAUDIT") == "1" or str(self.config.get("EDUMFA_REDUCE_SQLAUDIT")).lower() == "true":
|
|
306
|
+
if (self.audit_data.get("action") == "POST /validate/triggerchallenge" or \
|
|
307
|
+
"PRE-EVENT" in self.audit_data.get("action") or \
|
|
308
|
+
"POST-EVENT" in self.audit_data.get("action")) and \
|
|
309
|
+
self.audit_data.get("serial") == None and self.audit_data.get("user") == None:
|
|
310
|
+
self.session.close()
|
|
311
|
+
self.audit_data = {}
|
|
312
|
+
return
|
|
304
313
|
le = LogEntry(action=self.audit_data.get("action"),
|
|
305
314
|
success=int(self.audit_data.get("success", 0)),
|
|
306
315
|
serial=self.audit_data.get("serial"),
|
|
@@ -93,8 +93,7 @@ class SecretObj:
|
|
|
93
93
|
self.preserve = preserve
|
|
94
94
|
|
|
95
95
|
def getKey(self):
|
|
96
|
-
log.
|
|
97
|
-
'- verify the usage scope and zero + free ')
|
|
96
|
+
log.debug('Requesting secret key - verify the usage scope and zero + free ')
|
|
98
97
|
return decrypt(self.val, self.iv)
|
|
99
98
|
|
|
100
99
|
def getPin(self):
|
|
@@ -1113,6 +1113,10 @@ def init_token(param, user=None, tokenrealms=None,
|
|
|
1113
1113
|
if validity_period_start:
|
|
1114
1114
|
tokenobject.set_validity_period_start(validity_period_start)
|
|
1115
1115
|
|
|
1116
|
+
use_timeshift = param.get("useTimeShift")
|
|
1117
|
+
if use_timeshift is not None and use_timeshift != "default":
|
|
1118
|
+
tokenobject.add_tokeninfo("useTimeShift", use_timeshift)
|
|
1119
|
+
|
|
1116
1120
|
# Safe the token object to make sure all changes are persisted in the db
|
|
1117
1121
|
tokenobject.save()
|
|
1118
1122
|
return tokenobject
|
|
@@ -2609,3 +2613,23 @@ def list_tokengroups(tokengroup=None):
|
|
|
2609
2613
|
tgs = TokenTokengroup.query.all()
|
|
2610
2614
|
|
|
2611
2615
|
return tgs
|
|
2616
|
+
|
|
2617
|
+
@log_with(log)
|
|
2618
|
+
def set_use_timeshift(serial, use_timeshift=""):
|
|
2619
|
+
"""
|
|
2620
|
+
Set the value for use_timeshift in the tokeninfo.
|
|
2621
|
+
Can be "True" or "False"
|
|
2622
|
+
|
|
2623
|
+
:param serial: The serial number of the token (exact)
|
|
2624
|
+
:type serial: basestring
|
|
2625
|
+
:param use_timeshift: True or False to override Token Config and enable/disable timeshift feature
|
|
2626
|
+
:type use_timeshift: basestring
|
|
2627
|
+
:return: None
|
|
2628
|
+
"""
|
|
2629
|
+
|
|
2630
|
+
tokenobject = get_one_token(serial=serial)
|
|
2631
|
+
if use_timeshift == "default":
|
|
2632
|
+
tokenobject.del_tokeninfo("useTimeShift")
|
|
2633
|
+
else:
|
|
2634
|
+
tokenobject.add_tokeninfo("useTimeShift", use_timeshift)
|
|
2635
|
+
tokenobject.save()
|
|
@@ -199,14 +199,19 @@ class TotpTokenClass(HotpTokenClass):
|
|
|
199
199
|
timeStep = param.get("timeStep", self.timestep)
|
|
200
200
|
timeWindow = param.get("timeWindow", self.timewindow)
|
|
201
201
|
timeShift = param.get("timeShift", self.timeshift)
|
|
202
|
+
if not timeShift:
|
|
203
|
+
timeShift = 0
|
|
202
204
|
# we support various hashlib methods, but only on create
|
|
203
205
|
# which is effectively set in the update
|
|
204
206
|
hashlibStr = param.get("hashlib", self.hashlib)
|
|
207
|
+
useTimeShift = param.get("useTimeShift", "default")
|
|
205
208
|
|
|
206
209
|
self.add_tokeninfo("timeWindow", timeWindow)
|
|
207
210
|
self.add_tokeninfo("timeShift", timeShift)
|
|
208
211
|
self.add_tokeninfo("timeStep", timeStep)
|
|
209
212
|
self.add_tokeninfo("hashlib", hashlibStr)
|
|
213
|
+
if useTimeShift != "default":
|
|
214
|
+
self.add_tokeninfo("useTimeShift", useTimeShift)
|
|
210
215
|
|
|
211
216
|
@property
|
|
212
217
|
def timestep(self):
|
|
@@ -231,6 +236,16 @@ class TotpTokenClass(HotpTokenClass):
|
|
|
231
236
|
shift = float(self.get_tokeninfo("timeShift") or 0)
|
|
232
237
|
return shift
|
|
233
238
|
|
|
239
|
+
@property
|
|
240
|
+
def is_timeshift_enabled(self):
|
|
241
|
+
useShift = self.get_tokeninfo("useTimeShift")
|
|
242
|
+
if useShift is None:
|
|
243
|
+
useShift = get_from_config("totp.useTimeShift", default=True, return_bool=True)
|
|
244
|
+
if useShift in ["True", "true", "1", 1, True]:
|
|
245
|
+
return True
|
|
246
|
+
else:
|
|
247
|
+
return False
|
|
248
|
+
|
|
234
249
|
@log_with(log)
|
|
235
250
|
def check_otp_exist(self, otp, window=None, options=None, symetric=True,
|
|
236
251
|
inc_counter=True):
|
|
@@ -321,7 +336,9 @@ class TotpTokenClass(HotpTokenClass):
|
|
|
321
336
|
if initTime != -1:
|
|
322
337
|
server_time = int(initTime)
|
|
323
338
|
else:
|
|
324
|
-
server_time = time.time()
|
|
339
|
+
server_time = time.time()
|
|
340
|
+
if self.is_timeshift_enabled:
|
|
341
|
+
server_time += self.timeshift
|
|
325
342
|
|
|
326
343
|
# If we have a counter from the parameter list
|
|
327
344
|
if not counter:
|
|
@@ -356,22 +373,25 @@ class TotpTokenClass(HotpTokenClass):
|
|
|
356
373
|
|
|
357
374
|
# here we calculate the new drift/shift between the server time
|
|
358
375
|
# and the tokentime
|
|
359
|
-
|
|
360
|
-
|
|
376
|
+
if self.is_timeshift_enabled:
|
|
377
|
+
tokentime = self._counter2time(res, self.timestep)
|
|
378
|
+
tokenDt = datetime.datetime.fromtimestamp(tokentime / 1.0)
|
|
361
379
|
|
|
362
|
-
|
|
380
|
+
nowDt = datetime.datetime.fromtimestamp(inow / 1.0)
|
|
363
381
|
|
|
364
|
-
|
|
365
|
-
|
|
382
|
+
lastauth = self._counter2time(oCount, self.timestep)
|
|
383
|
+
lastauthDt = datetime.datetime.fromtimestamp(lastauth / 1.0)
|
|
366
384
|
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
385
|
+
log.debug("last auth : {0!r}".format(lastauthDt))
|
|
386
|
+
log.debug("tokentime : {0!r}".format(tokenDt))
|
|
387
|
+
log.debug("now : {0!r}".format(nowDt))
|
|
388
|
+
log.debug("delta : {0!r}".format((tokentime - inow)))
|
|
371
389
|
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
390
|
+
new_shift = (tokentime - inow)
|
|
391
|
+
log.debug("the counter {0!r} matched. New shift: {1!r}".format(res, new_shift))
|
|
392
|
+
self.add_tokeninfo('timeShift', new_shift)
|
|
393
|
+
else:
|
|
394
|
+
log.debug("the counter {0!r} matched.".format(res))
|
|
375
395
|
return res
|
|
376
396
|
|
|
377
397
|
@log_with(log)
|
|
@@ -398,6 +418,9 @@ class TotpTokenClass(HotpTokenClass):
|
|
|
398
418
|
if autosync is False:
|
|
399
419
|
return res
|
|
400
420
|
|
|
421
|
+
if not self.is_timeshift_enabled:
|
|
422
|
+
return res
|
|
423
|
+
|
|
401
424
|
info = self.get_tokeninfo()
|
|
402
425
|
syncWindow = self.get_sync_window()
|
|
403
426
|
|
|
@@ -553,8 +576,10 @@ class TotpTokenClass(HotpTokenClass):
|
|
|
553
576
|
if current_time:
|
|
554
577
|
time_seconds = self._time2float(current_time)
|
|
555
578
|
|
|
579
|
+
if self.is_timeshift_enabled:
|
|
580
|
+
time_seconds += self.timeshift
|
|
556
581
|
# we don't need to round here as we have already float
|
|
557
|
-
counter = self._time2counter(time_seconds
|
|
582
|
+
counter = self._time2counter(time_seconds, self.timestep)
|
|
558
583
|
otpval = hmac2Otp.generate(counter=counter,
|
|
559
584
|
inc_counter=False,
|
|
560
585
|
do_truncation=do_truncation,
|
|
@@ -605,8 +630,10 @@ class TotpTokenClass(HotpTokenClass):
|
|
|
605
630
|
# use the current server time
|
|
606
631
|
tCounter = self._time2float(datetime.datetime.now())
|
|
607
632
|
|
|
633
|
+
if self.is_timeshift_enabled:
|
|
634
|
+
tCounter -= self.timeshift
|
|
608
635
|
# we don't need to round here as we have alread float
|
|
609
|
-
counter = self._time2counter(tCounter
|
|
636
|
+
counter = self._time2counter(tCounter, self.timestep)
|
|
610
637
|
|
|
611
638
|
otp_dict["shift"] = self.timeshift
|
|
612
639
|
otp_dict["timeStepping"] = self.timeshift
|
|
@@ -616,7 +643,9 @@ class TotpTokenClass(HotpTokenClass):
|
|
|
616
643
|
for i in range(0, count):
|
|
617
644
|
otpval = hmac2Otp.generate(counter=counter + i,
|
|
618
645
|
inc_counter=False)
|
|
619
|
-
timeCounter = (
|
|
646
|
+
timeCounter = (counter + i) * self.timestep
|
|
647
|
+
if self.is_timeshift_enabled:
|
|
648
|
+
timeCounter += self.timeshift
|
|
620
649
|
|
|
621
650
|
val_time = datetime.datetime.\
|
|
622
651
|
fromtimestamp(timeCounter).strftime("%Y-%m-%d %H:%M:%S")
|
|
@@ -630,6 +659,7 @@ class TotpTokenClass(HotpTokenClass):
|
|
|
630
659
|
def get_setting_type(key):
|
|
631
660
|
settings = {"totp.hashlib": "public",
|
|
632
661
|
"totp.timeStep": "public",
|
|
662
|
+
"totp.useTimeShift": "public",
|
|
633
663
|
"totp.timeWindow": "public"}
|
|
634
664
|
return settings.get(key, "")
|
|
635
665
|
|
|
@@ -93,7 +93,7 @@ DEFAULT_CLIENT_EXTENSIONS = {'appid': None, 'credProps': {'rk': None}, 'prf': No
|
|
|
93
93
|
|
|
94
94
|
# Default authenticator extensions
|
|
95
95
|
#
|
|
96
|
-
DEFAULT_AUTHENTICATOR_EXTENSIONS = {"credProtect": None}
|
|
96
|
+
DEFAULT_AUTHENTICATOR_EXTENSIONS = {"credProtect": None, 'hmac-secret': None}
|
|
97
97
|
|
|
98
98
|
log = logging.getLogger(__name__)
|
|
99
99
|
|
|
@@ -295,6 +295,7 @@ class TRANSPORT:
|
|
|
295
295
|
BLE = 'ble'
|
|
296
296
|
NFC = 'nfc'
|
|
297
297
|
INTERNAL = 'internal'
|
|
298
|
+
HYBRID = 'hybrid'
|
|
298
299
|
|
|
299
300
|
|
|
300
301
|
TRANSPORTS = (
|
|
@@ -302,6 +303,7 @@ TRANSPORTS = (
|
|
|
302
303
|
TRANSPORT.BLE,
|
|
303
304
|
TRANSPORT.NFC,
|
|
304
305
|
TRANSPORT.INTERNAL,
|
|
306
|
+
TRANSPORT.HYBRID
|
|
305
307
|
)
|
|
306
308
|
|
|
307
309
|
class RESIDENT_KEY_LEVEL:
|
|
@@ -467,7 +467,7 @@ IMAGES = IMAGES
|
|
|
467
467
|
DEFAULT_DESCRIPTION = _('Generic WebAuthn Token')
|
|
468
468
|
|
|
469
469
|
# Policy defaults
|
|
470
|
-
DEFAULT_ALLOWED_TRANSPORTS = "usb ble nfc internal"
|
|
470
|
+
DEFAULT_ALLOWED_TRANSPORTS = "usb ble nfc internal hybrid"
|
|
471
471
|
DEFAULT_TIMEOUT = 60
|
|
472
472
|
DEFAULT_USER_VERIFICATION_REQUIREMENT = 'preferred'
|
|
473
473
|
DEFAULT_AUTHENTICATOR_ATTACHMENT = 'either'
|
|
@@ -629,7 +629,7 @@ class WebAuthnTokenClass(TokenClass):
|
|
|
629
629
|
WEBAUTHNACTION.ALLOWED_TRANSPORTS: {
|
|
630
630
|
'type': 'str',
|
|
631
631
|
'desc': _("A list of transports to prefer to communicate with WebAuthn tokens. "
|
|
632
|
-
"Default: usb ble nfc internal (All standard transports)"),
|
|
632
|
+
"Default: usb ble nfc internal hybrid (All standard transports)"),
|
|
633
633
|
'group': WEBAUTHNGROUP.WEBAUTHN
|
|
634
634
|
},
|
|
635
635
|
WEBAUTHNACTION.TIMEOUT: {
|